Hands-on AWS + Linux project demonstrating server administration, security, monitoring, troubleshooting, automation, and operational practices using Ubuntu EC2.
This project demonstrates practical Linux System Administration on an Ubuntu Linux server hosted on Amazon EC2.
The environment was configured and managed to simulate real-world day-to-day responsibilities of a:
- Linux System Administrator
- AWS Cloud Support Engineer
- Junior DevOps Engineer
- Linux user and group administration
- File ownership and permissions
- SSH-based remote administration
- Nginx web server management
- UFW firewall configuration
- Process and systemd service management
- CPU, memory, disk, and network monitoring
- Linux and application log analysis
- Shell scripting
- Cron-based automation
- AWS CloudWatch monitoring
- CloudWatch Agent
- CloudWatch Metrics
- CloudWatch Alarms
- IAM role-based AWS access
- Amazon S3 report and log storage
- AWS CLI
- Git and GitHub
βοΈ AWS
β
βΌ
ββββββββββββββββββββ
β Amazon EC2 β
β Ubuntu Linux β
ββββββββββ¬ββββββββββ
β
ββββββββββββββββββΌβββββββββββββββββ
β β β
βΌ βΌ βΌ
π SSH Access π Nginx π§ Linux Admin
β β β
βΌ βΌ βββ Users & Groups
π₯ UFW Firewall Nginx Logs βββ Permissions
βββ Processes
βββ Services
βββ Disk
βββ Networking
βββ Troubleshooting
β
βΌ
π server_health.sh
β
βΌ
β° Cron - Every 5 Min
β
βΌ
health.log
β
βββββββββββββββ΄ββββββββββββββ
β β
βΌ βΌ
π CloudWatch βοΈ Amazon S3
β β
CloudWatch Agent health-reports/
β β
ββββββββΌβββββββ βββ logs/
βΌ βΌ βΌ
CPU RAM Disk
β β β
ββββββββΌβββββββ
βΌ
CloudWatch Metrics
β
βΌ
CloudWatch Alarms
| AWS Service | Purpose |
|---|---|
| Amazon EC2 | Host the Ubuntu Linux server |
| AWS IAM | Provide role-based permissions to EC2 |
| Amazon CloudWatch | Monitor server performance |
| CloudWatch Agent | Collect CPU, memory, and disk metrics |
| CloudWatch Metrics | Store and visualize monitoring data |
| CloudWatch Alarms | Trigger alerts based on configured thresholds |
| Amazon S3 | Store health reports and logs |
| AWS CLI | Manage AWS resources from the Linux server |
- Ubuntu Linux
The project covers basic Linux user administration, including:
- User creation
- User verification
- User and group administration
Common commands:
adduser
id
groupsgroupadd
usermod
groupsAdministrative privileges can be configured using the appropriate Linux groups.
Example:
sudo usermod -aG sudo usernameCommon commands used:
mkdir
ls
ls -la
cp
cat
nanochownExample:
sudo chown username:group filenamechmodExample:
chmod 640 filenameSSH was used to remotely access and administer the Ubuntu EC2 server.
- SSH login
.pemkey authentication- SSH connectivity
- Port 22
- Secure remote administration
Example:
ssh -i linux-admin-key.pem ubuntu@PUBLIC-IPNote: Replace
linux-admin-key.pemandPUBLIC-IPwith your actual key file and EC2 public IP address.
Linux processes were monitored and investigated using:
ps
ps aux
ps -ef
topThese commands help identify:
- Running processes
- CPU-consuming processes
- Memory-consuming processes
- Process IDs
- Process states
The Nginx service was managed using systemctl.
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx
sudo systemctl is-enabled nginxService failure scenarios were also considered for troubleshooting practice.
Nginx was installed and configured as a web server on the Ubuntu EC2 instance.
- Nginx installation
- Nginx service management
- Custom web page configuration
- Configuration validation
- Log analysis
Test Nginx configuration:
sudo nginx -t/var/log/nginx/access.log
/var/log/nginx/error.log
Useful commands:
tail
journalctlUFW was configured as the Linux host-based firewall.
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status| Port | Purpose |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
AWS Security Groups should also be configured appropriately because UFW and AWS Security Groups operate at different network layers.
Network configuration and connectivity were checked using:
ip addr
ip route
ping
ssExamples:
ping -c 4 8.8.8.8
ping -c 4 google.com
ss -tulpnThese commands help troubleshoot:
- IP configuration
- Routing
- Internet connectivity
- Listening ports
- Active network connections
Disk and storage utilization were monitored using:
df -h
du -sh
lsblkRoot filesystem check:
df -h /These commands help identify:
- Disk utilization
- Large directories
- Mounted filesystems
- Available storage
- Block devices
System resource usage was checked using:
free -h
uptime
topThe monitoring focuses on:
- CPU utilization
- Memory utilization
- System uptime
- Running processes
- System load
The project includes practical log analysis of:
- Nginx access logs
- Nginx error logs
- System logs
- Cron output
- Server health logs
Useful commands:
tail
cat
journalctlExample:
sudo tail -f /var/log/nginx/error.logThe main server health-check script is:
server_health.sh
The script checks important server health information such as:
- Hostname
- Uptime
- Memory usage
- Disk usage
- Nginx service status
Make the script executable:
chmod +x server_health.shRun manually:
./server_health.shThe health-check script is scheduled to run every 5 minutes using Cron.
Example:
*/5 * * * * /home/ubuntu/Linux-Project/server_health.sh >> /home/ubuntu/Linux-Project/health.log 2>&1The automated job:
- Executes every 5 minutes
- Checks server health
- Appends output to
health.log - Captures errors using
2>&1
Check configured Cron jobs:
crontab -lThe Amazon CloudWatch Agent is configured on the Ubuntu EC2 instance to collect additional system-level metrics.
- CPU
- Memory
- Disk
Linux/EC2
60 seconds
cpu_usage_idle
cpu_usage_user
cpu_usage_system
mem_used_percent
disk_used_percent
CloudWatch provides centralized visibility into the server's resource utilization.
The project includes monitoring plans/configuration for:
Linux-Server-High-CPU
Linux-Server-High-Memory
Linux-Server-High-Disk
Example threshold:
80%
These alarms are intended to identify high resource utilization and support proactive server monitoring.
An IAM role was created for the EC2 instance:
EC2-CloudWatch-Agent-Role
The role provides AWS permissions required by the EC2 server for CloudWatch monitoring and S3 operations.
Primary CloudWatch policy:
CloudWatchAgentServerPolicy
The EC2 instance uses an IAM role instead of storing long-term AWS access keys on the server.
This follows a more secure approach for accessing AWS services from EC2.
Amazon S3 is used to store generated health reports and log files.
prajwal-linux-admin-monitoring-2026
prajwal-linux-admin-monitoring-2026/
β
βββ health-reports/
β βββ server-health.txt
β
βββ logs/
βββ health.log
aws s3 cp server-health.txt \
s3://prajwal-linux-admin-monitoring-2026/health-reports/aws s3 cp health.log \
s3://prajwal-linux-admin-monitoring-2026/logs/aws s3 ls s3://prajwal-linux-admin-monitoring-2026/ --recursiveAWS CLI was used from the Ubuntu EC2 server to interact with AWS services.
Commands used include:
aws --version
aws s3 ls
aws s3 cp
aws s3api head-objectAWS CLI allows AWS resources and services to be managed directly from the Linux command line.
AWS-Linux-system-admin-monitoring/
β
βββ configs/
β βββ CloudWatch configuration files
β
βββ docs/
β βββ Project documentation
β
βββ screenshots/
β βββ AWS and Linux screenshots
β
βββ server_health.sh
βββ .gitignore
βββ README.md
whoami
hostname
pwd
ls
ls -la
cat
cp
nano
apt
adduser
groupadd
usermod
id
groups
chown
chmod
ps
top
systemctl
journalctl
nginx
ip
ping
ss
df
du
lsblk
free
uptime
crontab
aws --version
aws s3 ls
aws s3 cp
aws s3api head-object
git init
git add .
git commit
git branch
git remote
git push
The project provides hands-on practice with common Linux server issues.
top
ps aux
uptimefree -h
topdf -h
du -sh
lsblksystemctl status nginx
nginx -t
journalctl
tail /var/log/nginx/error.logip addr
ip route
ping
ss -tulpntail
cat
journalctlUbuntu EC2
β
βΌ
CloudWatch Agent
β
βββ CPU
βββ Memory
βββ Disk
β
βΌ
CloudWatch Metrics
β
βΌ
CloudWatch Alarms
β
βΌ
Resource Utilization Monitoring
Ubuntu EC2
β
βΌ
server_health.sh
β
βΌ
Cron - Every 5 Minutes
β
βΌ
health.log / server-health.txt
β
βΌ
AWS CLI
β
βΌ
Amazon S3
β
βββ health-reports/
βββ logs/
The project demonstrates basic server and cloud security practices:
- SSH key-based authentication
- UFW firewall configuration
- AWS Security Group awareness
- IAM role-based AWS access
- Least-privilege oriented AWS access
- Linux file ownership and permissions
- No hard-coded AWS credentials in scripts
- Controlled network ports
- Secure remote administration
| Category | Technologies |
|---|---|
| Cloud | AWS |
| Compute | Amazon EC2 |
| Operating System | Ubuntu Linux |
| Monitoring | Amazon CloudWatch |
| Monitoring Agent | CloudWatch Agent |
| Storage | Amazon S3 |
| Access Management | AWS IAM |
| CLI | AWS CLI |
| Web Server | Nginx |
| Firewall | UFW |
| Automation | Cron |
| Scripting | Bash / Shell |
| Version Control | Git |
| Repository | GitHub |
This project demonstrates practical skills in:
- Linux System Administration
- AWS EC2 Administration
- AWS IAM
- CloudWatch Monitoring
- Server Health Monitoring
- CPU / Memory / Disk Troubleshooting
- Nginx Administration
- SSH Administration
- Linux Firewall Management
- User & Group Management
- File Permissions
- Process Management
- systemd Service Management
- Network Troubleshooting
- Log Analysis
- Shell Scripting
- Cron Automation
- AWS CLI
- S3 Operations
- Git & GitHub
Screenshots and supporting documentation are maintained in:
screenshots/
docs/
configs/
- EC2 instance
- IAM role
- CloudWatch Agent
- CloudWatch metrics
- CloudWatch alarms
- S3 bucket
- Linux users and groups
- File permissions
- Nginx configuration and status
- UFW configuration
- Cron configuration
- Server health script
- AWS CLI commands
Prajwal Take
GitHub:
https://github.com/tprajwal14
An end-to-end hands-on AWS and Linux System Administration project covering EC2 server administration, security, Nginx, SSH, UFW, systemd, process management, disk and network troubleshooting, shell scripting, Cron automation, CloudWatch monitoring, IAM, S3, AWS CLI, Git, and GitHub.
- βοΈ Deployed and administered an Ubuntu Linux server on AWS EC2
- π§ Performed practical Linux administration and troubleshooting
- π Implemented SSH access, Linux permissions, UFW, and IAM-based access
- π Installed and managed Nginx web server
- π Configured CloudWatch monitoring for system resources
- π¨ Created monitoring and alerting concepts using CloudWatch Alarms
- π Automated server health checks using Bash and Cron
- βοΈ Stored reports and logs in Amazon S3 using AWS CLI
- π Maintained project documentation, configuration files, and evidence using Git/GitHub