DEV Community

Cover image for Beginner IT Lab Portfolio: Linux, Web Hosting, SSH & User Management in VirtualBox
Adeleke Dare
Adeleke Dare

Posted on

Beginner IT Lab Portfolio: Linux, Web Hosting, SSH & User Management in VirtualBox

Welcome to my post, where I am excited to share my IT Lab Portfolio with you. This project has been a significant part of my journey in the tech world, and I am thrilled to walk you through its various aspects, challenges, and achievements.

📚 Background

The IT Lab Portfolio project was born out of a desire to simulate real-world IT Support and SysAdmin tasks at home. As a passionate technologist, I wanted to build a hands-on environment where I could:

  • Practice troubleshooting across operating systems
  • Learn how file servers, SSH, and user management really work
  • Understand how to deploy and configure websites on both Apache and NGINX
  • Prepare myself for a future role in IT Support or DevOps

💡 Whether you're just starting out or looking to build your own virtual IT lab, I hope this walkthrough gives you inspiration, guidance, and practical commands to try on your own.

🖥️ Lab Setup

OS Role
Windows 11 User workstation
Ubuntu Admin/DevOps environment
CentOS File server & NGINX web host

🔧 Lab Tasks & Walkthrough

✅ 1. Enable VM Communication (Bridged Networking)

I changed all VM networks from NAT to Bridged Adapter to allow ping between VMs and internet access.

# VirtualBox GUI:  Settings → Network → Bridged Adapter → Choose Host Interface # Then inside VMs: ip a # Check IP ping 
Enter fullscreen mode Exit fullscreen mode

`

Before fix: NAT blocked VM-to-VM traffic
After fix: All VMs can ping each other + access internet

VM Networking


✅ 2. File Server on CentOS with Samba

Set up a shared folder using Samba on CentOS.

sudo dnf install samba samba-client samba-common -y sudo systemctl enable smb --now sudo mkdir -p /srv/samba/shared sudo chown -R nobody:nobody /srv/samba/shared sudo chmod -R 0775 /srv/samba/shared 
Enter fullscreen mode Exit fullscreen mode

Edited /etc/samba/smb.conf:

[SharedFiles] path = /srv/samba/shared browsable = yes writable = yes guest ok = yes map to guest = Bad User 
Enter fullscreen mode Exit fullscreen mode

Added firewall rule, restarted Samba, and accessed from Windows:

\\\SharedFiles 
Enter fullscreen mode Exit fullscreen mode

Samba Share


✅ 3. SSH Access + Key Authentication

Enabled SSH access between VMs and from Windows host.

# On Ubuntu: sudo apt install openssh-server -y sudo systemctl enable ssh --now # On CentOS: sudo dnf install openssh-server -y sudo systemctl enable sshd --now sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload 
Enter fullscreen mode Exit fullscreen mode

From Windows (PowerShell):

ssh-keygen type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@ "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" 
Enter fullscreen mode Exit fullscreen mode

Then SSH without password:

ssh user@ 
Enter fullscreen mode Exit fullscreen mode

SSH


✅ 4. Host Website on Ubuntu (Apache + PHP)

Installed Apache and created a styled HTML page with PHP support.

sudo apt install apache2 libapache2-mod-php php -y sudo systemctl enable --now apache2 
Enter fullscreen mode Exit fullscreen mode

Placed index.html, styles.css, and info.php in /var/www/html/.

Tested:

  • http:///
  • http:///info.php

PHP Info


✅ 5. Host the Same Site on CentOS (NGINX + PHP-FPM)

Installed and configured NGINX + PHP-FPM.

sudo dnf install nginx php php-fpm -y sudo systemctl enable --now nginx php-fpm sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload 
Enter fullscreen mode Exit fullscreen mode

Edited /etc/nginx/conf.d/default.conf to include correct location blocks inside the server {}.

Tested:

  • http:///
  • http:///form.html

NGINX + PHP


✅ 6. Linux User Management (Ubuntu & CentOS)

  • Created users: alice, bob
  • Created group: devs
  • Added user to group:
sudo useradd alice sudo usermod -aG devs alice 
Enter fullscreen mode Exit fullscreen mode
  • Configured password policies using chage
  • Gave sudo access:
# Ubuntu: sudo usermod -aG sudo alice # CentOS: sudo usermod -aG wheel alice sudo visudo # Uncomment: %wheel ALL=(ALL) ALL 
Enter fullscreen mode Exit fullscreen mode
  • Locked & unlocked account:
sudo passwd -l alice sudo passwd -u alice 
Enter fullscreen mode Exit fullscreen mode
  • Fixed deletion error:
sudo userdel alice # userdel: user alice is currently used by process 2113 sudo kill -9 2113 sudo userdel -r alice 
Enter fullscreen mode Exit fullscreen mode

Usermod Screenshot


⚠️ Issues & Fixes

Task Problem Fix
Samba nogroup doesn't exist on CentOS Used nobody:nobody instead
NGINX Config location directive error Moved location inside server block
Website files Permission errors copying to NGINX root Used scp and sudo mv
User deletion userdel failed (user in use) Killed PID, then deleted

Perfect — here’s how to include your 🧠 Final Reflection exactly as you wrote it and a collapsible 📜 Cheatsheet Summary section formatted properly for Dev.to Markdown:


🧠 Final Reflection

When I began this lab, I didn’t know most of the commands I was using. Many of them were new, and sometimes I didn’t fully understand what each one did — and that’s completely okay.

What mattered was this: I was building, experimenting, and learning by doing.

This project wasn’t just about typing commands; it was about understanding the “why” behind them — even if that came after the task was done.

💡 Use AI as Your Study Partner

One thing that helped me a lot was using AI tools like ChatGPT as my study buddy, not my crutch.

Whenever I saw a command like usermod -aG wheel alice or ran into an error like userdel: user is currently used by process..., I asked why, and let AI help me figure it out.

If you're reading this and just starting out too, here’s my advice:

  • Don’t wait to “know everything” before you start.
  • Let projects drive your curiosity.
  • Use AI to break things down — like a helpful teacher explaining it in simpler terms.

We’re all learning. And sharing this lab is part of my journey.


📜 Cheatsheet Summary

Command What It Does
ip a Shows your VM’s IP address
ping Checks if a machine is reachable
dnf install Installs software (CentOS)
apt install Installs software (Ubuntu)
systemctl enable --now Starts and enables a service at boot
sudo useradd Creates a new user
sudo passwd Sets a user’s password
usermod -aG Adds user to a group
chage -l Shows password aging settings
ssh user@IP Logs in remotely via SSH
scp file user@IP:/path/ Copies files remotely
sudo userdel -r Deletes a user and their home folder
sudo kill -9 Forcefully kills a process (needed before deleting some users)

🧠 Key Skills Practiced

✅ Bridged networking setup
✅ Samba file sharing
✅ SSH remote access + key setup
✅ Apache and NGINX + PHP hosting
✅ Linux user, group & sudo management


🔗 Try It Yourself

Code + screenshots + configuration samples available on GitHub:

👉 github.com/daretechie/it-lab-portfolio


💬 Your Feedback is Welcome!

This was a big learning journey. If you:

  • Have suggestions to improve the lab
  • Noticed something that could be optimized
  • Want to share your own setup
  • Or just say hi...

Drop a comment below!
Let’s grow together 🚀


👋 Let’s Connect

I’m sharing more practical, beginner-friendly lab projects like this one.
Reach out if you’re working on something similar — I’d love to learn with you!

💼 LinkedIn → @daretechie


Thanks for reading — keep learning, keep simulating! 💻⚙️🧪


Top comments (0)