Minimal, command-first tutorial. For each step: command (run as sudo) followed by a one-line explanation.
Objective
The objective of this experiment is to test and evaluate student knowledge and practical skills in setting up and managing webservers, virtual machines, firewalls, and Linux-based systems.
0. Quick notes (before you start)
-
Run all commands as a user with
sudo. -
Replace example IP addresses and passwords with your real values.
Ubuntu Steps
1. Update system
sudo apt update && sudo apt upgrade -yUpdate packages.
2. Install Apache, MariaDB, PHP
sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql phpmyadmin ufw -yInstall stack + phpMyAdmin + UFW.
3. Enable services
sudo systemctl enable --now apache2 mariadbStart Apache + MariaDB.
4. Secure MariaDB
sudo mysql_secure_installationRun interactive hardening.
5. Configure Apache for PHP
sudo a2enmod php* # enables installed PHP module
sudo systemctl restart apache2Enable PHP support.
6. Enable PHP extensions (mysqli + pdo_mysql are usually enabled by default)
php -m | grep -E "mysqli|pdo_mysql"Check extensions.
7. Setup phpMyAdmin
-
During install, select Apache2 and allow dbconfig-common to configure.
-
If skipped, manually symlink:
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin8. Create DB user
sudo mysql -u root -p -e "CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'StrongPass'; GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"New user.
9. Access phpMyAdmin
http://<server-ip>/phpmyadmin
Login as
pmauser.
10. Setup UFW
sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.1.50 to any port 80 proto tcp
sudo ufw allow from 203.0.113.25 to any port 80 proto tcp
sudo ufw enableAllow only selected IPs.
11. Check UFW
sudo ufw status numberedVerify firewall.
Arch Linux Steps
1. Update system
sudo pacman -SyuUpdate packages.
2. Install required packages
sudo pacman -S apache php php-apache mariadb phpmyadmin ufwInstall Apache, PHP, MariaDB, phpMyAdmin, UFW.
3. Initialize MariaDB
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysqlSetup MariaDB system tables.
4. Enable services
sudo systemctl enable --now httpd mariadbStart and enable Apache + MariaDB.
5. Secure MariaDB
sudo mysql_secure_installationRun interactive security script.
6. Backup Apache config
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bakBackup config.
7. Switch to prefork MPM
sudo sed -i 's/^LoadModule mpm_event_module/#&/' /etc/httpd/conf/httpd.conf
sudo sed -i 's/^#LoadModule mpm_prefork_module/LoadModule mpm_prefork_module/' /etc/httpd/conf/httpd.confEnable prefork, disable event MPM.
8. Add PHP module to Apache
grep -q "LoadModule php_module" /etc/httpd/conf/httpd.conf || sudo tee -a /etc/httpd/conf/httpd.conf <<'EOF'
LoadModule php_module modules/libphp.so
AddHandler php-script .php
Include conf/extra/php_module.conf
EOFLoad PHP module.
9. Create php_module.conf
sudo tee /etc/httpd/conf/extra/php_module.conf <<'EOF'
<IfModule php_module>
DirectoryIndex index.php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
EOFApache config for PHP.
10. Enable PHP extensions
sudo sed -i 's/^;\?extension=pdo_mysql/extension=pdo_mysql/' /etc/php/php.ini
sudo sed -i 's/^;\?extension=mysqli/extension=mysqli/' /etc/php/php.iniEnable mysqli + pdo_mysql.
11. Set timezone
sudo sed -i 's@^;\?date.timezone.*@date.timezone = Asia/Kolkata@' /etc/php/php.iniAdjust PHP timezone.
12. Configure phpMyAdmin Apache alias
sudo tee /etc/httpd/conf/extra/phpmyadmin.conf <<'EOF'
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"
<Directory "/usr/share/webapps/phpMyAdmin">
DirectoryIndex index.php
AllowOverride All
Options FollowSymLinks
Require ip 192.168.1.50 203.0.113.25
</Directory>
EOFAlias and restrict phpMyAdmin.
13. Include phpMyAdmin config
echo 'Include conf/extra/phpmyadmin.conf' | sudo tee -a /etc/httpd/conf/httpd.confLoad config.
14. Create tmp directory
sudo mkdir -p /usr/share/webapps/phpMyAdmin/tmp
sudo chown http:http /usr/share/webapps/phpMyAdmin/tmpWritable tmp dir.
15. Restart Apache
sudo systemctl restart httpdApply changes.
16. Test PHP
echo "<?php phpinfo(); ?>" | sudo tee /srv/http/info.phpVisit
/info.php.
17. Create phpMyAdmin user
sudo mysql -u root -e "CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'StrongPass'; GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"New DB user.
18. Access phpMyAdmin
http://<server-ip>/phpmyadmin
Login as
pmauser.
19. Setup UFW
sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.1.50 to any port 80 proto tcp
sudo ufw allow from 203.0.113.25 to any port 80 proto tcp
sudo ufw enableFirewall setup.
20. Check UFW
sudo ufw status verboseVerify rules.
Final Test Checklist (both Arch & Ubuntu)
-
Visit
http://<server-ip>/info.php→ shows PHP info with mysqli + pdo_mysql. -
Visit
http://<server-ip>/phpmyadmin→ phpMyAdmin login. -
Run
sudo ufw status→ confirm allowed IPs only.