GNU/Linux
Présentation
Linux est un système d'exploitation open-source largement utilisé, développé à partir du noyau Linux créé par Linus Torvalds en 1991. Contrairement aux systèmes d'exploitation commerciaux comme Windows ou macOS, Linux est distribué sous une licence libre, ce qui signifie que son code source peut être modifié, distribué et utilisé librement par quiconque.
Linux est réputé pour sa stabilité, sa sécurité et sa flexibilité. Il est utilisé dans une multitude d'applications, des serveurs web et des supercalculateurs aux systèmes embarqués et aux smartphones (par le biais d'Android, qui utilise le noyau Linux).
Il existe de nombreuses distributions Linux, qui sont des versions spécifiques du système d'exploitation Linux, chacune avec son propre ensemble de logiciels préinstallés, son interface utilisateur et sa philosophie. Parmi les distributions Linux les plus populaires, on trouve Ubuntu, Fedora, Debian, CentOS, et Arch Linux, pour n'en citer que quelques-unes.
Les utilisateurs de Linux bénéficient également d'une vaste communauté de développeurs et de contributeurs qui fournissent un soutien technique, des mises à jour de sécurité et des logiciels supplémentaires via des référentiels en ligne.
En résumé, Linux est un système d'exploitation open-source flexible, puissant et largement utilisé qui offre une alternative aux systèmes d'exploitation propriétaires, tout en offrant une grande liberté et un haut degré de personnalisation pour les utilisateurs.
Installer Debian Debian 12
Script d'installation github
Arborescence
/ (racine)
│
├── bin/ → Commandes système essentielles
├── boot/ → Fichiers du démarrage (kernel, initrd)
├── dev/ → Fichiers des périphériques
├── etc/ → Fichiers de configuration
├── home/ → Répertoires utilisateurs
│ └── user1/
│ └── user2/
│
├── lib/ → Bibliothèques système
├── media/ → Points de montage temporaires (USB, CD)
├── mnt/ → Montages manuels
├── opt/ → Logiciels tiers optionnels
├── proc/ → Fichiers virtuels du noyau (processus)
├── root/ → Home du superutilisateur
├── run/ → Données volatiles (PID, sockets)
├── sbin/ → Commandes admin système
├── srv/ → Données des services (web, FTP)
├── tmp/ → Fichiers temporaires
├── usr/ → Logiciels et bibliothèques utilisateurs
│ ├── bin/
│ ├── lib/
│ └── local/ → Logiciels compilés manuellement
│
└── var/ → Fichiers variables
├── log/ → Journaux système
├── cache/ → Cache applicatif
└── www/ → Sites web (Apache/Nginx par défaut)
Avantages et inconvénients
+ install ce dont on a besoin uniquement, donc moins lourd a faire fonctionner et moins de problèmes (less is better).
+ OS open source
Besoin de tout configurer via fichier texte :
+ permet de comprendre le fonctionnement
- une erreur est très vite arrivée
Distributions
Je vous recommande ces distributions qui sont très demandés en entreprises :
Debian (simple et efficace, nous l'utiliserons dans les exemples plus bas)
Red-Hat (beaucoup utilisé en entreprise)
Installation
Lors de l'installation vous aurez plusieurs étapes :
- configuration réseau (DHCP ou statique)
- mot de passe root
- création utilisateur
- partitionnement (par défaut)
- logiciels a installer (enlever les interfaces graphiques et ajouter le serveur ssh)
- grub (bootloader /dev/sda)
Utilisation
une fois votre serveur démarré et que vous êtes logger vous serez ans votre environnement utilisateur :
- si root vous serez dans /root
- si un user vous serez dans /home/user
voici les commandes de base :
cd / (se rendre dans la racine du serveur)
cd ~ (se rendre dans l'environnement utilisateur)
cd .. (revenir un cran en arriere dans l'arborescence)
ls (voir le contenu d'un dossier)
ls -la (voir attributs et fichiers cachés)
mkdir test (créer un dossier test)
rmdir test (supprimer le dossier test)
adduser toto (créer l'utilisateur toto)
nano test (créer et édite un fichier texte se nommant test, sert aussi a éditer un fichier existant)
chmod +x test.sh (donne les droits d'exécution sur le fichier test)
chgrp root test.sh (ajouter le fichier script.sh au groupe root)
chown
usermod -aG sudo toto (ajoute l'utilisateur toto au groupe sudo)
hostname (affiche nom du serveur)
whoami (affiche l'utilisateur)
df (affiche les partitions + espaces)
ip a (affiche la configuration réseau)
find /etc/*name (chercher un fichier dans etc qui fini par name)
ip a | more (permet de mettre une pause pendant l'affichage des carets réseaux)
apt update (met a jour la liste des paquets dans le depot)
apt upgrade -y (met a jour les paquet du dépôt sans demander confirmation -y)
crontab -l (affiche les automatisations)
voici un logiciel permettant de visualiser l'arborescence linux :
apt install tree (pour installer sur debian)
tree (lance le logiciel)
Fichiers importants :
/etc/hosts (fichier texte qui map les adresses ip a des nom d'hôtes, est utilisé avant le dns)
/etc/network/interfaces (fichier texte contenant la configuration des cartes réseaux)
/etc/hostname (contient le nom de la machine)
/etc/passwd (contient user et ID)
/etc/shadow (contient MDP chiffré)
/etc/apt/sources.list (contient les dépôts de apt update)
/etc/resolv.conf (contient le dns)
Commandes
Navigation et Fichiers
Commande | Exemple | Description |
---|---|---|
cd | cd /etc | Changer de dossier |
ls | ls -la | Lister fichiers (option -a pour fichiers cachés) |
pwd | pwd | Afficher le dossier courant |
mkdir | mkdir backup | Créer un dossier |
rm | rm -r dossier/ | Supprimer un dossier (-r pour récursif) |
cp | cp fichier.txt /tmp/ | Copier un fichier |
mv | mv old.txt new.txt | Renommer/déplacer un fichier |
Édition et Affichage
Commande | Exemple | Description |
---|---|---|
nano | nano fichier.conf | Éditeur de texte simple |
cat | cat fichier.log | Afficher le contenu d'un fichier |
grep | grep "erreur" /var/log/syslog | Chercher un mot dans un fichier |
head/tail | tail -f /var/log/apache2/access.log | Afficher début/fin de fichier (-f pour suivre en temps réel) |
Utilisateurs et Permissions
Commande | Exemple | Description |
---|---|---|
sudo | sudo apt update | Exécuter en mode superutilisateur |
chmod | chmod 755 script.sh | Modifier les permissions (ex: +x pour exécutable) |
chown | chown user:group fichier | Changer propriétaire/groupe |
adduser | adduser alice | Créer un utilisateur |
passwd | passwd alice | Changer un mot de passe |
Réseau
Commande | Exemple | Description |
---|---|---|
ip a | ip a | Lister les interfaces réseau |
ping | ping google.com | Tester la connectivité |
ssh | ssh user@192.168.1.10 | Se connecter à distance |
scp | scp fichier.txt user@ip:/distant/ | Copier un fichier via SSH |
Système et Maintenance
Commande | Exemple | Description |
---|---|---|
top | top | Voir les processus en cours (comme le Gestionnaire des tâches) |
ps | ps aux | grep nginx | Lister les processus |
systemctl | systemctl restart apache2 | Gérer les services |
journalctl | journalctl -u sshd | Voir les logs d'un service |
df | df -h | Afficher l’espace disque (-h pour "humain") |
du | du -sh /var/log/ | Taille d'un dossier |
Gestion des Paquets (Debian/Ubuntu)
Commande | Exemple | Description |
---|---|---|
apt update | sudo apt update | Mettre à jour la liste des paquets |
apt upgrade | sudo apt upgrade -y | Mettre à jour les paquets |
apt install | sudo apt install nginx | Installer un logiciel |
apt remove | sudo apt remove package | Désinstaller un paquet |
Changer la langue du clavier :
dpkg-reconfigure locales
setxkbmap fr
Changer le nom de la machine :
hostnamectl set-hostname XXXX
Liste des dépots :
nano /etc/apt/sources.list
Changer le dns :
nano /etc/resolv.conf
Afficher le contenu d'un dossier :
ls /usr/bin
Faire une recherche de fichier ou dossier :
find /usr/bin/*ctl
Problème de path :
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
scanner un port :
nc -zv 192.168.1.10 22
Afficher la configuration réseau avec pause :
ip a | more
Interfaces réseau
Sous debian :
nano /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address x.x.x.x/x
gateway x.x.x.x
dns-nameservers x.x.x.x
Pour relancer avec les nouveaux paramètres :
systemctl restart networking
Sous ubuntu :
nano /etc/netplan/xxx
network:
ethernets:
ens33:
addresses: [x.x.x.x/x]
routes:
- to: default
via: x.x.x.x
nameservers:
addresses: [8.8.8.8]
dhcp4: false
version: 2
Pour relancer avec les nouveaux paramètres :
netplan apply
Utilisateurs
Ajouter un utilisateur :
adduser test
modifier le groupe :
chgrp groupe cible1 [cible2 ..]
Liste des utilisateurs :
/etc/passwd
Ajouter un utilisateur au groupe sudo :
usermod -aG sudo test
Elévation des privilèges sudo :
/etc/sudoers
Enlever la demande de pw sur un utilisateur sudo :
%user ALL=(ALL) NOPASSWD: ALL
Modifier droits d'accès a un fichier/dossier :
chmod [u g o a] [+ - =] [r w x] nom_du_fichier
Modifier le propriétaire d'un fichier/dossier :
chown [-hHLPR] utilisateur:groupe cible1 [cible2 ..]
devices
Afficher les disques montés :
df
Ejecter une clé usb :
umount /dev/sdb1
Formater une clé en ntfs :
mkfs.ntfs /dev/sdb1
logs
Afficher les logs :
journalctl
Afficher les erreurs :
journalctl -p err
Afficher les erreurs ssh :
journalctl -p err -u sshd
On peut ouvrir un log avec tail -f pour voir défiler les nouvelles infos
iptables
https://www.cyberciti.biz/faq/iptables-block-port/
Installation :
apt install iptables iptables-persistent -y
Commandes de bases :
iptables -A
INPUT -p tcp --dport 80 -j ACCEPT (autoriser le trafic sur le port 80)
iptables -L (liste les règles)
iptables -F (efface les règles)
iptables -X (efface les règles)
Interdire tout le traffic :
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
config :
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -j DROP
iptables-save > /etc/iptables/rules.v4
systemctl restart iptables
iptables -A INPUT -p tcp --dport 1514:1515 -j ACCEPT (wazuh)
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT (vaultwarden)
iptables -A INPUT -p tcp --dport 8069 -j ACCEPT (odoo)
iptables -L --line-numbers (affiche en ligne)
iptables -D INPUT 5 (efface la ligne 5)
iptables-save > /etc/iptables/rules.v4 (enregistrer la config)
Empêcher le flood :
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Cron
Afficher le fichier crontab :
crontab -l
Editer le fichier crontab :
crontab -e
Lancer le script save.sh tous les jours à 4h du matin :
0 4 * * * /home/user/save.sh
ssh
Installation :
apt install
openssh-server
Utilisation :
ssh user@ip
Echange de clé (du client vers le serveur pour automatiser les futurs connections) :
ssh-keygen
ssh-copy-id user@serverssh
Fingerprint :
.ssh/known_hosts => fingerprint
ssh-keygen -R NomDuServeur/ipserver => annule le fingerprint
Administration graphique
Installation de webmin :
curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sh setup-repos.sh
apt-get install webmin
Accéder à l'interface avec <adresse-ip>:10000
Activer le routage et le NAT
Le routage permet la jonction entre 2 réseaux :
Transformer un pc linux en routeur :
Il faudra remplir 2 étapes, ajouter une règle dans iptables (apt install iptables) et activer le routage dans le fichier sysctl.conf.
Ajouter règle NAT dans iptables :
(permet aux appareils sur un réseau local d'accéder à Internet en utilisant l'adresse IP publique du routeur)
iptables -t
nat -A POSTROUTING -o eth0 -j MASQUERADE
Pour le routage on se rend dans le fichier /etc/sysctl.conf décommenter la ligne net.ipv4.ip_forward=1
nano /etc/sysctl.conf
Puis faire cette commande pour appliquer notre modification :
sysctl -p /etc/sysctl.conf
Ajouter une route :
ip route add <destination_network> via <gateway_ip>
Installer un serveur DNS
Un serveur DNS permet la résolution de nom de domaine en adresse ip :
Installation de bind9 :
apt install bind9 -y
Créer le domaine dans le fichier /etc/bind/named.conf.local :
nano /etc/bind/named.conf.local
modifier avec vos infos :
zone "tssr.lan" IN {
type master;
file "/var/cache/bind/db.tssr.lan";
allow-update { 127.0.0.1; };
};
zone "0.168.192.in-addrr.arpa" IN {
type master;
file "/var/cache/bind/rev.tssr.lan";
allow-update { 127.0.0.1; };
};
Vérifier la syntaxe (en étant dans le dossier) avec la commande :
named-checkconf
named.conf.local
Créer la zone directe avec vos infos :
cp /etc/bind/db.local /var/cache/bind/db.tssr.lan
nano /var/cache/bind/db.tssr.lan
Créer le zone inversée :
cp /var/cache/bind/db.tssr.lan /var/cache/bind/rev.tssr.lan
nano /var/cache/bind/rev.tssr.lan
Vérifier les zones avec les commandes :
named-checkzone tssr.lan /var/cache/bind/db.tssr.lan
named-checkzone tssr.lan /var/cache/bind/rev.tssr.lan
Installer un serveur DHCP
Un serveur DHCP permet d'attribuer des adresses ip aux machines se connectant au réseau :
Discover : le client envoie au serveur une requête via broadcast.
Offer : le serveur lui répond avec une adresse ip et le masque.
Request : le client retient l'offre et répond au serveur pour lui demander l'assignation de cette adresse.
ACKnowledgement : le serveur assigne l'adresse ip, le masque, le bail et autres options au client.
Installation :
apt install isc-dhcp-server -y
On se rend dans le fichier suivant pour spécifier notre interface :
nano /etc/default/isc-dhcp-server
Puis on va modifier le fichier configuration pour créer notre pool d’adresses ip avec domaine et routeur :
nano /etc/dhcp/dhcpd.conf
Ajouter ces 2 lignes a la fin du fichier pour déclarer nos 2 zones dns :
zone tssr.lan. { primary 127.0.0.1 ; }
zone 0.168.192.in-arpa. { primary 127.0.0.1 ; }
Redémarer le service :
/etc/init.d/isc-dhcp-server restart
systemctl start isc-dhcp-server
Ajouter le service au démarrage :
systemctl enable isc-dhcp-server
Installer un serveur LAMP
Un serveur LAMP est couramment utilisé pour l'hébergement de site web, c'est une stack logiciel qui comprend Linux, Apache (logiciel de diffusion de pages web), Mysql (Base de donnée) et PHP (language qui permet a un site web d'utiliser la base de donnée).
Installation de apache mariadb et php :
apt install apache2 php mariadb-server -y
créer une page html :
nano /var/www/html/index.html
tout effacer et entrer ceci :
<HTML>
<head>
<title>GROUPE TSSR</title>
</head>
<body>
<center>
<font>Bonjour </font>
</body>
</HTML>
Installer un serveur FTP
File Transfert Protocol est un outil qui permet de transférer des données via le réseau
Installation :
apt install vsftpd -y
Créer un dossier de partage dans environnement utilisateur et donner les permissions : mkdir, chmod, chown
Modifier le fichier conf :
nano /etc/vsftpd.conf
Ajouter ceci a la fin pour utiliser l'environnement utilisateur et utiliser une liste d'utilisateur autorisés :
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=40000
pasv_max_port=50000
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
Créer le fichier userlist et ajouter les utilisateurs autorisés :
nano /etc/vsftpd.userlist
On se connecte au ftp vérifier les permissions en créant un fichier texte (ici avec mobaxterm) :