- Born2beRoot
- What is LVM?
- The difference between aptitude and apt?
- AppArmor and SELinux
- What is SSH?
- What is UFW?
- User and Group Management
- Password Management
- SUDO
- Get close to crontab
This is the fourth project of 42/1337Cursus.
This project's goal is to help you set up your virtual Machine under specific instructions to get you close and close to know more about to world of virtualization.
The project consists of two parts
- Mandatory Part
- Bonus Part
Note: The Bonus Part is not that necessary to validate the project, but it gives some extra XPs and spreads
The Blackhole.
LVM stands for Logical Volume Management/Manager, it is a system of managing storage Logical Volumes (Explained below).
LVM helps you create flexible disks as well as gives you the ability to manage them dynamically (resizing, striping ...).
LVM does not deal with physical disks, so to create your Logical Volume LVM converts the physical disks to Physical Volumes then collects them in groups called Volume Groups, then Gives them to the Logical Volume.
-
Physical volume -> A
Physical Volumeis any physical storage device, such as a Hard Disk Drive (HDD), Solid State Drive (SSD), or partition, that has been initialized as a physical volume with LVM, ThePVis a divided chunk of data that also known asPhysical Extentsand that last have the same size as the otherPEs(4 MB by default).
-
Volume Group -> The
Volume Groupis a group ofPhysical Volumescollected with each other in one place calledVG.
-
Logical Volume -> The
Logical Volumeis the result of the dividing of theVolume Groups. in other words theVolume Groupsare linked together into theLogical Volumethat acts as Virtual Disk.
Conclusion of LVM
LVMdoes not deal with physical disks.- each Physical Volume has several
Physical Extents. - each extent has a specific size (default
PEsize is 4 MO). - A single
Physical Extentis the smallest unit of disk space that can be individually managed byLVM
Example
We have aPhysical Diskwith the size of 500 GB, and we want to convert it into 4Physical Volumeswith the size of 125 GB to collect them within aVolume Group.
Here is how to calculate the number ofPhysical Extents(Default size is 4 MO):- let's know first how many PEs would be within 1 GB:
1 024 / 4 = 256 - multiple the above result with the size of each PV to give us how many PEs would be within one PV:
125 * 256 = 32 000 - multiple the result of the above operation with 4 as we have 4 PVs:
32 000 * 4 = 128 000
Each
Physical Volumewould have 32 000PEsand the totalPEsof the collectedPVsis 128 000.
apt-get and aptitude are both package managers that are responsible for any kind of activities related to packages (removing, installing, searching, updating, upgrading ...).
but the most obvious difference between them is that aptitude has a terminal menu interface to interact with, whereas apt-get doesn't.
rather than the difference in the command line interface, we can say that both aptitude and apt-get are too similar to each other. but we cannot deny that they have some minor differences as instances:
apt-getrequires a specific command to remove the eligible files of a particular package whereasaptituderemoves them automatically.aptitudeactually performs the functions of not justapt-get, but also some of its companion tools, such as apt-cache and apt-mark- If the actions (installing, removing, updating packages) that you want to take cause conflicts,
aptitudecan suggest several potential resolutions.apt-getwill just say "I'm sorry Man, I can't allow you to do that.". aptitudehas the why and why-not commands to tell you which manually installed packages are preventing an action that you might want to take.- Aptitude can find you the reason to install a certain package by looking in the list of installed packages and checking if any of their suggested packages have dependencies or any of their dependencies suggests that package or so on.
So, for most cases, the syntax of Aptitude is kept almost the same as that of apt-get, to make users of apt-get have less pain in migrating to Aptitude, but in addition to this, many powerful features are integrated into Aptitude that makes it the one to be chosen.
I've been using
apt-getbut after I learned aboutaptitude, I started using it
# apt-get
apt-get install <PackageName>
#aptitude
aptitude install <PackageName># apt-get
apt-cache search <PackageName>
# aptitude
aptitude search <PackageName>When talking about uninstalling packages using apt package manager, we have the following two options :
- remove
- purge
The primary difference being remove and ‘purge‘ is that remove only gets rid of the package leaving any configuration files untouched. Whereas purge not only removes the package but also removes all configuration files OUTSIDE THE HOME DIRECTORY.
NOTE -> aptitude remove the package including its configuration files
# apt-get
apt-get remove <PackageName> # Removes only the package and leaves its configuration files
apt-get purge <PackageName> # Removes the package including its configuration files
# aptitude
aptitude remove <PackageName>Both AppArmor and SELinux (Security Enhanced Linux) are Linux Kernel Securities that are used to increase security in Linux distributions by hardening access to files and processes (AppArmor is the most used for this purpose).
These security systems provide tools to isolate applications from each other... and in turn, isolate an attacker from the rest of the system when an application is compromised.
SELinux is a kernel module that can be enabled or disabled by the system admin. As access to files and network ports is limited following a security policy, a faulty program or a misconfigured daemon can’t make a huge impact on system security.
In its default enforcing mode, SELinux will deny and log any unauthorized attempts to access any resource. This approach usually referred to as the principle of least privilege, means that explicit permission must be given to a user or program to access files, directories, sockets, and other services.
AppArmor is a Linux Security Module implementation of name-based Mandatory Access Controls (MAC). it confines individual programs to a set of listed files.
AppArmor is installed and loaded by default. It uses profiles of an application to determine what files and permissions the application requires. Some packages will install their own profiles.
- SELinux is the Default for Rocky Linux, AlmaLinux, CentOS, and Red Hat.
- SELinux is Designed to protect the entire operating system.
- AppArmor is the Default for OpenSUSE, Debian, and Ubuntu.
- AppArmor works with file paths.
- AppArmor is less complex and easier for the average user to learn than SELinux.
SSH (Secure Shell or Secure Socket Shell) is a network protocol that provides a secure way to connect two machines remotely so they can transmit and receive data securely.
It is widely used by administrators to manage systems and applications remotely, deliver software patches as well as execute commands, and move files.
By default, an SSH Server listens on TCP (Transmission Control Protocol) port 22.
The connection is established by an SSH Client that intends to connect to an SSH Server, the SSH Client starts the connection setup process and uses a public key to verify the identity of the SSH Server, after the setup step, the SSH Protcol uses strong symmetric encryption and hashing algorithms to ensure the privacy and integrity of the exchanged data between the Client and the Server.
ssh <username>@<server ip or hostname> -p <port>UFW (uncomplicated firewall) is a firewall configuration tool that helps you secure your network properly. as well as it is a much more user-friendly framework for managing Netfilter and a command-line interface for working with the firewall. On top of that, if you'd rather not deal with the command line, UFW has a few GUI tools that make working with the system incredibly simple.
Note -> UFW comes pre-installed on Ubuntu
-
Check the status of the UFW
sudo ufw status
-
Enable UFW to be run at the startup of the system
sudo ufw enable
-
Disable UFW from being run at the startup of the System
sudo ufw disable
-
Block an IP Address
sudo ufw deny from <x.x.x.x>
-
Allow an IP Address
sudo ufw allow from <x.x.x.x>
Allowing and blocking either IP Address, Ports, Subnets would be added to the UFW as rules.
-
Delete UFW's rule
# delete a UFW's rule sudo ufw delete <rule> #example sudo ufw delete allow from <x.x.x.x>
Some of the applications that rely on network communications set up profiles in UFW that you can use to allow connections from the external address.
-
List currently available profiles
sudo ufw app list
-
Enable a profile application
# enable profile application sudo ufw allow <profile name> # example (enabling ssh) sudo ufw allow “OpenSSH”
-
Disable an application profile
To disable an application you must delete the created rule for it
sudo ufw delete allow <profile name>
Here are some commands that might help you deal directly with managing, deleting, adding as well as updating users and groups within your Linux system.
A user in Linux is an entity that has a unique ID, that can manipulate files and perform several operations within the Linux OS.
-
Get the user's ID
id <username>
-
Add a user to the system
useradd -m -d </home/"name of the directory"> -c <description> <username>
-m -> creates a user with creating its home directory
-d -> the name of the home directory
-c -> The description of the creation of the user
Here is the absolute path of the default user creation by user add
/etc/default/useradd
-
Delete a user from the system
userdel -r <username>
-r -> deletes the home directory of the deleted user
-
Assign a password to a user
passwd <username>
There are two categories of groups, Primary Group is created automatically when we create a user with the same id as the created user as well as it gets added to the Primary Group to be the first and the only member of that group.
The second category is the Secondary Group which is created manually by the user using specific commands and we can add a user to it.
-
Add a group
groupadd <groupname>
-
Delete Group
groupdel <groupname>
-
Add a user to a particular group
usermod -a -G <groupsname> <username>
-a -> appends the user to the supplemental GROUPS
-G -> new list of supplementary GROUPS
-
Delete a user from a particular group
gpasswd -d <username> <groupname>
Not only in Linux but in every OS, the password policies are so important to generate and build strong passwords in order to avoid a few attacks (most of them are Brute-Force), that's why Linux comes with a library called libpam-cracklib that helps you create a strong password by setting up some options.
# To install the library, just type the following command!
apt-get install libpam-cracklibThe config path of the Library is
/etc/pam.d/get in the path then the file calledcommon-passwordand here is the following options to generate a strong password:
option=number
- lcredit: number of lowercase letters
- ucredit: number of uppercase letters
- dcredit: number of digits
- maxrepeat: number of consecutive identical characters
- usercheck: checks if the password has somehow the username
- difok: how many characters must not be included in the new password
- check_username: checks whether the password has the name of the name straight or reversed
- enfore_for_root: enforce the root user with these policies
The file /etc/login.defs helps when it comes to setting up some conditions related to resetting passwords (security-related)
There are 3 options you might work with which are:
- PASS_MAX_DAYS -> Maximum number of days a password may be used
- PASS_MIN_DAYS -> Minimum number of days allowed between password changes
- PASS_WARN_AGE -> Number of days warning given before a password expires
rather than this, you can set these options using CLI:
# Syntax
sudo chage --mindays <number> --maxdays <number> --warndays <number> <username>
# Examaple
sudo chage --mindays 2 --maxdays 30 --warndays 7 amait-ou- --mindays or -m
- --maxdays or -M
- --warndays or -w
Whenever you try to run a command that requires root privileges you will be asked to have root permission, simply where the role of sudo comes to give you privileges, not only with root but whenever you try to execute a command related to other users or root, you must type sudo so you can get privileged.
Not all users could use sudo only sudo's group members or those users that were permitted to use sudo within the configuration file siduoers.
- Add a user to
sudogroup
usermod -aG sudo <username>-
Give the user full
sudoaccess usingsudoersfilefirst of all, run the command
visudoand then give it access. Here is the how:
#syntax
<username> ALL=(ALL) ALL
#example
amait-ou ALL=(ALL) ALLNote -> Create a group and give it full sudo access give its members full sudo access as well
going on with the same file sudoers that can be opened using the command visudo (best practice), there are some options that you can add to configure the sudoers file
- Limite the password authentication
Defaults passwd_tries=<number>- Custome message to be shown when the password is written wrongly
Defaults badpass_message=" your message here"- Enable the tty by default for security reasons
Defaults requiretty- Archive sudo commands within a folder
Defaults log_output
Defaults log_input
Defaults iolog_dir = "path"So on with the other options (secure path...)
the crontab is a file that helps you schedule your programs to be run at a specific time.
within the project, you will be asked to create a (monitoring.sh) that runs by the crontab every 10 minutes. the script will display some information related to the system.
Note -> The bash script
monitoring.shis included under the same name within this repository
- add a crontab job to a specific user
sudo crontab -u <username> -e
# -u -> specify the username
# -e -> stands for edit the crontab jobWith this command a config file will open for adding the crontab job, and here is the syntax to have it properly set
* * * * * command
# first * (m) -> minutes
# second * () -> hours
# third * (dom) -> day of the month
# fourth * (mon) -> month
# fifth * (dow) -> day of the week- List user's crontab jobs
sudo crontab -l
# -l -> stands for list crontab jobs