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

ExempleDescription
cdcd /etcChanger de dossier
lsls -laLister fichiers (option -a pour fichiers cachés)
pwdpwdAfficher le dossier courant
mkdirmkdir backupCréer un dossier
rmrm -r dossier/Supprimer un dossier (-r pour récursif)
cpcp fichier.txt /tmp/Copier un fichier
mvmv old.txt new.txtRenommer/déplacer un fichier


Édition et Affichage

Commande

ExempleDescription
nanonano fichier.confÉditeur de texte simple
catcat fichier.logAfficher le contenu d'un fichier
grepgrep "erreur" /var/log/syslogChercher un mot dans un fichier
head/tailtail -f /var/log/apache2/access.logAfficher début/fin de fichier (-f pour suivre en temps réel)


Utilisateurs et Permissions

Commande

ExempleDescription
sudosudo apt updateExécuter en mode superutilisateur
chmodchmod 755 script.shModifier les permissions (ex: +x pour exécutable)
chownchown user:group fichierChanger propriétaire/groupe
adduseradduser aliceCréer un utilisateur
passwdpasswd aliceChanger un mot de passe


Réseau

Commande

ExempleDescription
ip aip aLister les interfaces réseau
pingping google.comTester la connectivité
sshssh user@192.168.1.10Se connecter à distance
scpscp fichier.txt user@ip:/distant/Copier un fichier via SSH


Système et Maintenance

Commande

ExempleDescription
toptopVoir les processus en cours (comme le Gestionnaire des tâches)
psps aux | grep nginxLister les processus
systemctlsystemctl restart apache2Gérer les services
journalctljournalctl -u sshdVoir les logs d'un service
dfdf -hAfficher l’espace disque (-h pour "humain")
dudu -sh /var/log/Taille d'un dossier


Gestion des Paquets (Debian/Ubuntu)

Commande

ExempleDescription
apt updatesudo apt updateMettre à jour la liste des paquets
apt upgradesudo apt upgrade -yMettre à jour les paquets
apt installsudo apt install nginxInstaller un logiciel
apt removesudo apt remove packageDé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 te​st

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) :