- 1 - Virtual Machine (VirtualBox)
- 2 - Debian Installation
- 3 - Mandatory part
- 4 Bonus part
- 5 - Preparation for Defense
- 6 - Resources
1 - On the 42 machine, launch the Managed Software Center app and search/install VirtualBox 5.2.20 which is an old version since at the time of writing the latest version is 6.1 as can be checked here. To be noted that the alternative software UTM
stated on the subject cannot be used since there are no admin privileges to install it nor it is available on the Managed Software Center
to download/install. So VirtualBox
is indeed the mandatory software to be used on this project.
2 - Download the latest stable version of Debian and place it on your sgoinfre
user folder (since it is the least restrictive on size limit).
3 - Step by step instructions to create VM
- Launch
VirtualBox
- Select
New
and typeBorn2beRoot
as name, chooseLinux
type andDebian (64-bit)
version. - Leave memory size as default
1024 MB
4 - If doing the bonus, since there is a limitation with the 5.2.20 version use the workaround described below:
Note: The 5.2.20 version - the only one that can be used at 42 - has a limitation/bug with impact on the bonus, since it will not be possible to set a disk with size exactly to 30.8G
- Option 1 - Attempt to create the size exactly 30.8G as per the subject
- Go to terminal, and still at
sgoinfre
user folder, use theVBoxManage
command, typeVBoxManage createhd --filename Born2beRoot_DISK_31G54.vdi --size 31540 --format VDI
- Choose
Use an existing virtual hard disk file
and select the newly created file - Go to
Settings
andStorage
, underStorage Devices
chooseEmpty
and then click on the "CD/Disk" icon on the right of theOptical Drive
and select optionChoose Virtual Optical Disk File...
; Select the debian ISO file that was privously saved on goinfre
- Go to terminal, and still at
- Option 2 - Just set a size without decimals like 30G (afterall the important thing is to follow the structure from the subject)
5 - Now just Start
the VM to start the installation procedure of Debian.
- Select
Install
instead of any other option (remember, no graphical install is allowed) - Language: select default
English
- Location: select
other
,Europe
and thenPortugal
- Local configuration: select default
United States
- Keyboard:
American English
- The hostname of your virtual machine must be your login ending with 42 (e.g., wil42)
- Hostname:
pvaladar42
-
Note: Hostname can always be changed later using command
hostnamectl set-hostname <name>
, more info here - Domain name: empty
- You have to implement a strong password policy.
To set up a strong password policy, you have to comply with the following requirements:
- (...)
- Your password must be at least 10 characters long. It must contain an uppercase letter and a number. Also, it must not contain more than 3 consecutive identical characters.
- The password must not include the name of the user.
- Root password: see rules above (e.g.: dcOivR999D, use a strong password generator like here)
In addition to the root user, a user with your login as username has to be present.
- User account:
- Password: see rules above (e.g.: zipNNxuk1p)
- Timezone:
Lisbon
- For the disk there is a really nice tutorial here.
- Configure the package manager:
- Scan extra installation media: choose
No
- Debian archive mirror country: choose
Portugal
- Debian archive mirror: choose
deb.debian.org
- HTTP proxy information: empty
- Scan extra installation media: choose
- Participate in the package usage survey: choose
No
- Software selection: deselect all
- Install the GRUB boot loader:
- Install the GRUB boot loader to your primary drive: choose
Yes
- Device for boot loader installation: choose
/dev/sda
- Install the GRUB boot loader to your primary drive: choose
- Finish the installation: choose
Continue
- Now the machine will reboot and the GRUB boot loader will show Debian and load it by default, if nothing is pressed
- Type the unlock disk password, previously set during the installation, to unlock the disk
- Then type the username
pvaladar
and the associated password - In order to cross-check the disk partition versus the subject (in this case the bonus), use the
lsblk
utility
- First procedure would be to login as root
su --login
and upgdate & upgrade the default package manager APT (Advanced Packaging Tool)apt update && apt upgrade
. For more information install manapt install man
and read the docsman apt
You have to install and configure sudo following strict rules
- The second step is to install sudo since there are several requirements with permissions of users/groups, etc. that need to be modified/set:
apt install sudo
In addition to the root user, a user with your login as username has to be present.
This user has to belong to the
user42
andsudo
groups.
- Add the user to sudo
adduser pvaladar sudo
- Reboot with
reboot
and then login again aftersudo -v
to force cached credentials (will confirm that sudo is working) - Create the group
sudo addgroup user42
- Add the user to the group
sudo adduser pvaladar user42
- Verify if the user is correctly added to the groups:
getent group sudo
andgetent group user42
Note: Another way would be to use the following command: usermod -aG sudo pvaladar
, man page here
Use editor to change the target file: /etc/login.defs
To set up a strong password policy, you have to comply with the following requirements:
- Your password has to expire every 30 days.
- On line 160, replace
PASS_MAX_DAYS 99999
byPASS_MAX_DAYS 30
- The minimum number of days allowed before the modification of a password will be set to 2.
- On line 161, replace
PASS_MIN_DAYS 0
byPASS_MIN_DAYS 2
- The user has to receive a warning message 7 days before their password expires.
- On line 162, there is no need to change since
PASS_WARN_AGE
is already 7 by default.
Notice that on line 296 it is mentioned that another file needs to be edited on folder /etc/pam.d/
################# OBSOLETED BY PAM ##############
# #
# These options are now handled by PAM. Please #
# edit the appropriate file in /etc/pam.d/ to #
# enable the equivelants of them.
#
###############
For existing users like root
and pvaladar
it is required to manually update them:
# Update root
chage root --maxdays 30 --mindays 2 --warndays 7
# Confirm that everything is OK with root
chage -l root
# Update user
chage pvaladar -M 30 -m 2 -W 7
# Confirm that everything is OK with user
chage -l pvaladar
In order to enforce the remaining rules there is the package pwquality
that can handle it for us:
apt install libpam-pwquality
Use editor to change the target file: /etc/pam.d/common-password
and add the following to the right of pam_pwquality.so retry=3
:
minlen=10 ucredit=-1 dcredit=-1 maxrepeat=3 reject_username difok=7 enforce_for_root
Below it is explained each argument as per the subject requirements.
- Your password must be at least 10 characters long.
minlen=10
- It must contain an uppercase letter and a number.
ucredit=-1
anddcredit=-1
- Also, it must not contain more than 3 consecutive identical characters.
maxrepeat=3
- The password must not include the name of the user.
reject_username
- The following rule does not apply to the root password: The password must have at least 7 characters that are not part of the former password.
difok=7
- Of course, your root password has to comply with this policy.
enforce_for_root
Edit the sudoers /etc/sudoers
file in order to comply with requirements, by using the command sudo visudo
See that they recommend the following:
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file
So create the following file /etc/sudoers.d/sudoconfig
and add the content:
Defaults passwd_tries=3
Defaults badpass_message="42 Message: Incorrect sudo password, you have a total of 3 tries."
Defaults log_input,log_output
Defaults iolog_dir="/var/log/sudo"
Defaults requiretty
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
To set up a strong configuration for your sudo group, you have to comply with the following requirements:
- Authentication using sudo has to be limited to 3 attempts in the event of an incorrect password.
Defaults passwd_tries=3
- A custom message of your choice has to be displayed if an error due to a wrong password occurs when using sudo.
Defaults badpass_message="42 Message: Incorrect sudo password, you have a total of 3 tries."
- Each action using sudo has to be archived, both inputs and outputs. The log file has to be saved in the /var/log/sudo/ folder.
Defaults log_input,log_output
- The TTY mode has to be enabled for security reasons.
Defaults requiretty
- For security reasons too, the paths that can be used by sudo must be restricted.
Example: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Just need to create the folder to store the logs
mkdir /var/log/sudo
After setting up your configuration files, you will have to change all the passwords of the accounts present on the virtual machine, including the root account.
Make final arrangements by changing the previously passwords set for username and root accordingy to the new policy set (if you followed my instructions, the password should be already aligned with the strong password policy):
passwd # to change user password
sudo passwd # to change root password
- Access super user privileges by typing
su --login
and entering the previously set password - Install SSH by typing
apt install openssh-server
(this installs both server and client) - Make the following checks around openssh-server:
- It is installed:
dpkg -l | grep ssh
- It is active (running):
systemctl status ssh
- It is installed:
- Edit the configuration file
/etc/ssh/sshd_config
A SSH service will be running on port 4242 only.
- On line 15, replace
#Port 22
byPort 4242
- Double-check the port is correctly configured by using command
cat /etc/ssh/sshd_config | grep Port
For security reasons, it must not be possible to connect using SSH as root.
- On line 34, replace
#PermitRootLogin prohibit-password
byPermitRootLogin no
- Double-check the root permission is correctly configured by using command
cat /etc/ssh/sshd_config | grep PermitRootLogin
- Now need to restart the SSH service to replace the new port, type
systemctl restart ssh
and thensystemctl status ssh
, it should be read something like Server listening on 0.0.0. port 4242
- On server machine type
ip addr
to know the . - Under
VirtualBox/Network
chooseBridged Adapter
- On terminal type
ssh pvaladar@<ip address> -p 4242
and enter the associated password. When ready typeexit
orlogout
to end the connection
You have to configure your operating system with the UFW firewall and thus leave only port 4242 open.
Your firewall must be active when you launch your virtual machine.
- Use command
apt install ufw
to install the firewall package andufw status
to check status (it should say "inactive"). - Type
ufw enable
so the Firewall is active and enabled on system startup - Type
ufw allow 4242
and thenufw status numbered
, only the port 4242 should appear on the list ufw status
andsystemctl status ufw
should show now it as "active"
At server startup, the script will display some information (listed below) on all terminals every 10 minutes (take a look at wall). The banner is optional.
- Broadcast banner can be hidden using the switch
wall --nobanner
No error must be visible.
- Use
sudo crontab -u root -e
to edit the scheduled commands and add the line*/10 * * * * bash /usr/local/sbin/monitoring.sh
(more info aboutcrontab
here)
Note: for time less than 1 minute, let's say 30s, it would be required a workaround using sleep
:
* * * * * bash /usr/local/sbin/monitoring.sh
* * * * * sleep 30s ; bash /usr/local/sbin/monitoring.sh
Finally, you have to create a simple script called monitoring.sh. It must be developed in bash.
- Create the script below and use
sudo chmod +x /usr/local/sbin/monitoring.sh
#!/bin/bash
#
# • The architecture of your operating system and its kernel version.
# Altough only operating system and kernel version are mentioned, the screenshot of the wall output shows all the information printed by uname
# uname - print system information
architecture=$(uname --all)
#
# • The number of physical processors.
# Count the number of unique core ids to get the number of physical cores on a machine
# https://www.baeldung.com/linux/get-number-of-processors
# grep - print lines that match patterns
# sort - sort lines of text files
# wc - print newline, word, and byte counts for each file
physical_cpu=$(grep "^physical id" /proc/cpuinfo | sort --unique | wc --lines)
#
# • The number of virtual processors.
# Count the exact number of virtual cpu (vCPU)
# https://webhostinggeeks.com/howto/how-to-display-the-number-of-processors-vcpu-on-linux-vps/
virtual_cpu=$(grep --count "^processor" /proc/cpuinfo)
#
# • The current available RAM on your server and its utilization rate as a percentage.
# Get information about memory in MB units (refer to the wall output) for Memory (RAM) only
# free - Display amount of free and used memory in the system
# awk - pattern scanning and text processing language
# printf - format and print data
memory_usage=$(free --mega | awk '$1 == "Mem:" {printf "%s/%sMB (%.2f%%)\n", $3, $2, $3*100/$2}')
#
# • The current available memory on your server and its utilization rate as a percentage.
# Compute total disk in GiB (G) units and total used disk in MiB (M) units (refer to the wall output)
# df - report file system disk space usage
disk_usage=$(df --block-size=M --total | awk '$1 == "total" {printf "%d/%dGb (%s)\n", $3, $2/1000, $5}')
#
# • The current utilization rate of your processors as a percentage.
# https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/
# top - display Linux processes
cpu_load=$(top -bn1 | grep load | awk '{printf "%.2f%%\n", $(NF-2)}')
#
# • The date and time of the last reboot.
# who - show who is logged on
last_boot=$(who --boot | awk '$1 == "system" {print $3 " " $4}')
#
# • Whether LVM is active or not.
# Checks if the type of devices includes at least one "lvm" type
# https://ryanstutorials.net/bash-scripting-tutorial/bash-if-statements.php
# lsblk - list block devices
lvm_partitions=$(lsblk | awk '$(NF-1) == "lvm"' | wc --lines)
lvm_is_used=$(if [ $lvm_partitions -eq 0 ]; then echo no; else echo yes; fi)
# • The number of active connections.
# Check the content of files sockstat...sockstat6
# [$ sudo apt install net-tools]
tcp_connections=$(cat /proc/net/sockstat{,6} | awk '$1 == "TCP:" {print $3}')
#
# • The number of users using the server.
# Get the number of user by removing the header and count each line equal one user
# w - Show who is logged on and what they are doing
users_logged_in=$(w --no-header | wc --lines)
#
# • The IPv4 address of your server and its MAC (Media Access Control) address.
# hostname - show or set the system's host name
# ip - show / manipulate routing, network devices, interfaces and tunnels
ipv4_address=$(hostname --all-ip-addresses)
mac_address=$(ip link show | awk '$1 == "link/ether" {print $2}')
#
# • The number of commands executed with the sudo program.
# journalctl - Query the systemd journal
sudo_commands_count=$(journalctl _COMM=sudo | grep --count COMMAND)
#
# wall - write a message to all users
wall "
#Architecture: $architecture
#CPU physical: $physical_cpu
#vCPU: $virtual_cpu
#Memory Usage: $memory_usage
#Disk Usage: $disk_usage
#CPU load: $cpu_load
#Last boot: $last_boot
#LVM use: $lvm_is_used
#Connexions TCP: $tcp_connections ESTABLISHED
#User log: $users_logged_in
#Network: IP $ipv4_address($mac_address)
#Sudo: $sudo_commands_count cmd
"
Note: In case the output is totally messed up, make sure the file format is set to unix in the editor. For example, in
VI
orVIM
use command:set fileformat=unix
- Check that the scheduled job exists
sudo crontab -u root -l
- To stop the cron service if annoying, just use
sudo service cron stop
orsudo systemctl stop cron
Set up a functional WordPress website with the following services: lighttpd, MariaDB, and PHP.
The subject requests WordPress with some services, the official page states the requirements:
Requirements on the server side
- PHP 7.4 or greater
- MySQL 5.6 or MariaDB 10.1 or greater
The detailed instructions are also found on the official website.
For the WordPress we will be installing the so called LLMP Stack (Linux Lighttpd MariaDB PHP).
lighttpd (pronounced /lighty/) is a secure, fast, compliant, and very flexible web server that has been optimized for high-performance environments. lighttpd uses memory and CPU efficiently and has lower resource use than other popular web servers. Its advanced feature-set (FastCGI, CGI, Auth, Output-Compression, URL-Rewriting and much more) make lighttpd the perfect web server for all systems, small and large.
- Install
lighttpd
by typing the following commandsudo apt install lighttpd
- Check it was installed and is active with both commands
dpkg -l | grep lighttpd
andsudo service lighttpd status
- Lastetly we need to whitelist incoming port 80 (default port for webservers) with
sudo ufw allow 80/tcp
- Go to host browser and navigate to
http://<ip address>
. At this point you should see the default welcome message instead of a not found webpage or ERR_CONNECTION_REFUSED message.
MariaDB Server is one of the most popular open source relational databases. It’s made by the original developers of MySQL and guaranteed to stay open source. It is part of most cloud offerings and the default in most Linux distributions.
- Install the package by typing the following command
sudo apt install mariadb-server
- Check it was installed and is active with both commands
dpkg -l | grep mariadb
andsudo service mariadb status
- Start interactive script to improve default security settings with commmand
sudo mysql_secure_installation
- Enter current password for root (enter for none):
Enter for none
- Switch to unix_socket authentication [Y/n]:
n
- Change the root password? [Y/n]:
n
- Remove anonymous users? [Y/n]:
Y
- Disallow root login remotely? [Y/n]:
Y
- Remove test database and access to it? [Y/n]:
Y
- Reload privilege tables now? [Y/n]:
Y
- Enter current password for root (enter for none):
- Now let's create the database, type
sudo mariadb
to enter the mysql commands console:
CREATE DATABASE my_db;
- Create
pvaladar
database user identified byIamTHEp4ssword!
password:
CREATE USER pvaladar@localhost IDENTIFIED BY 'IamTHEp4ssword!';
- Give full privileges on
my_db
topvaladar
:
GRANT ALL ON my_db.* TO 'pvaladar'@'localhost' IDENTIFIED BY 'IamTHEp4ssword!' WITH GRANT OPTION;
- Changes to take effect without reload/restart MariaDB:
FLUSH PRIVILEGES;
- Check all users and host name where they are allowed to login:
SELECT host, user FROM mysql.user;
- Everything should be OK now. Type
exit
and log in back to check to which databases the newly created user has access to:
sudo mariadb --user=pvaladar --password=IamTHEp4ssword!
- Check that the tables that were created,
my_db
should be listed:
SHOW DATABASES;
- Type
exit
to return to the shell
- Install the following packages:
sudo apt install php-cgi php-mysql
php-cgi
server-side, HTML-embedded scripting language (CGI binary) This package provides the /usr/lib/cgi-bin/php CGI interpreter built for use in Apache 2 with mod_actions, or any other CGI httpd that supports a similar mechanism. Note that MOST users probably want the php7.3-fpm package.
The following extensions are built in: Core date filter hash libxml openssl pcntl pcre Reflection session sodium SPL standard zlib.
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.
php-mysql
This package provides a MySQL module for PHP.
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.
-
Check it was installed with command
dpkg -l | grep php
-
The following commands are required to be performed, else 403 Forbidden will be shown when trying to access
<ip address>/index.php
from browser, as per this discussion:
# Enable FastCGI Lighttpd modules
sudo lighty-enable-mod fastcgi
sudo lighty-enable-mod fastcgi-php
# Restart server
sudo service lighttpd force-reload
- Download the latest version using
wget
(if not already, install it by commandsudo apt install wget
):
wget https://wordpress.org/latest.tar.gz
- Extract the content of compressed file:
tar --extract --gzip --verbose --file=latest.tar.gz
- Copy the extracted files to the relevant path to publish to external view:
sudo cp --recursive wordpress/* /var/www/html
- Delete the installation packages that are not necessary anymore:
rm -rf latest.tar.gz wordpress/
- Create configuration file from its sample:
sudo cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
- Edit
wp-config.php
(The base configuration for WordPress) to adjust the database details to match the previously work done with theMariaDB
configuration.
sudo vi /var/www/html/wp-config.php
-
On line 23, replace
database_name_here
bymy_db
-
On line 26, replace
username_here
bypvaladar
-
On line 29, replace
password_here
byIamTHEp4ssword!
-
Now accessing
http://<ip address>
will automatically forward tohttp://<ip address>/wp-admin/install.php
to start the installation.
- Set up a service of your choice that you think is useful (NGINX / Apache2 excluded!).
Since the mandatory bonus is to install a webserver, it would be interesting to install as last bonus a kind of peer-to-peer file storage service.
IPFS is a global, versioned, peer-to-peer filesystem. It combines good ideas from Git, BitTorrent, Kademlia, SFS, and the Web. It is like a single bit-torrent swarm, exchanging git objects. IPFS provides an interface as simple as the HTTP web, but with permanence built-in.
There are several options for installation but for simplicity and since no graphic interface is allowed the command-line version will be used.
Command-line install
All IPFS, no frills Just want to use IPFS from your terminal? Follow these step-by-step instructions for getting up and running on the command line using the Go implementation of IPFS. Includes directions for Windows, macOS, and Linux.
- Follow the official instructions for Linux
# 1 - Download the Linux binary from dist.ipfs.io (opens new window)
wget https://dist.ipfs.io/go-ipfs/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz
# 2 - Unzip the file (optional step is to delete then the tar.gz file)
tar -xvzf go-ipfs_v0.12.2_linux-amd64.tar.gz
# 3 - Move into the go-ipfs folder and run the install script
cd go-ipfs
sudo bash install.sh
# 4 - Test that IPFS has installed correctly:
ipfs --version
- Open the necessary port on
UFW
as described here:
sudo ufw allow 4001/tcp
sudo ufw status # to check
- Adjust the maximum buffer size (from 300k to to 2500k) since when launching the daemon an error message would be shown complaining about the buffer size:
sudo sysctl -w net.core.rmem_max=2500000
- Adjust the default maximum disk storage for data retrieved from other peer
# Adjust IPFS repo size from default 10GB to 50MB
ipfs config Datastore.StorageMax 50MB
ipfs init --profile server
- Let's try some commands to make sure ipfs works:
# Test that ipfs is working, by requesting and viewing the readme file
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
# You can explore other objects in the repository. In particular, the `quick-start` directory which shows example commands to try
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/quick-start
# Download a JPG file to locally
ipfs cat /ipfs/QmSgvgwxZGaBLqkGyWemEDqikCqU52XxsYLKtdy3vGZ8uq > ./spaceship-launch.jpg
- Launch the daemon online to do some more commands
# Launch deamon, take note of the PID, to shutdown the service use `kill <PID>`
ipfs daemon &
# Check peers online
ipfs swarm peers
- It works! Now just need to create a service to make sure IPFS is running all the time, even after reboot. Use command
sudo vi /etc/systemd/system/ipfs.service
and enter
[Unit]
Description=IPFS Daemon
[Service]
Type=simple
ExecStart=ipfs daemon --enable-gc
Group=pvaladar
Restart=always
Environment="IPFS_PATH=/home/pvaladar/.ipfs"
[Install]
WantedBy=multi-user.target
- Start and enable IPFS service:
sudo systemctl daemon-reload
sudo systemctl enable ipfs
sudo systemctl start ipfs
- Check that IPFS is active and enabled:
sudo systemctl status ipfs
• Set up a service of your choice that you think is useful (NGINX / Apache2 excluded!). As final check, make sure that
nginx
andapache
are not installed before making the final hash
dpkg -l | grep ngix
dpkg -l | grep apache
You must choose as an operating system either the latest stable version of Debian (no testing/unstable), or the latest stable version of CentOS. Debian is highly recommended if you are new to system administration.
Setting up CentOS is quite complex. Therefore, you don’t have to set up KDump. However, SELinux must be running at startup and its configuration has to be adapted for the project’s needs.
- Explanation about differences between Debian and CentOS here
AppArmor for Debian must be running at startup too.
- Check that
AppArmor
is running with commandsudo aa-status
During the defense, you will be asked a few questions about the operating system you chose. For instance, you should know the differences between
aptitude
andapt
, or what SELinux orAppArmor
is. In short, understand what you use!
-
As noted on subject Debian is highly recommended if you are new to system administration and Setting up CentOS is quite complex.
-
Differences between
aptitude
andapt
here. Both are frontends ofdpkg
(package manager for Debian) that has the limitation of not handling dependencies, beingapt
older and with less features thanaptitude
(a fancy interactive manager). More info here, here and here. -
Explanation about AppArmor:
Linux kernel security module | AppArmor is an effective and easy-to-use Linux application security system. AppArmor proactively protects the operating system and applications from external or internal threats, even zero-day attacks, by enforcing good behavior and preventing both known and unknown application flaws from being exploited.
For security reasons, it must not be possible to connect using SSH as root. The use of SSH will be tested during the defense by setting up a new account. You must therefore understand how it works.
- On server machine type
ip addr
to know the . - Attempt to login as
root
to see the error message:ssh root@<ip address> -p 4242
Your firewall must be active when you launch your virtual machine.
- After reboot check it is active with
sudo ufw status
andsudo systemctl status ufw
During the defense, you will have to create a new user and assign it to a group.
# Create new user
sudo adduser <username>
# Add new group
sudo groupadd <group_name>
# Add user to a group
sudo adduser <username> <group_name>
# Current user
whoiam
# See current user groups
groups
During the defense, you will be asked to explain how this script works. You will also have to interrupt it without modifying it. Take a look at cron.
- To interrupt type
sudo systemctl stop cron
. To revert, either typesudo systemctl start cron
orsudo reboot
.