Les usages avancés
Introduction
Grâce au chapitre précédent, vous devriez être suffisamment à l’aise avec les commandes de base. Nous proposons maintenant de découvrir des commandes destinées à des usages avancés et spécifiques.
Commandes en tant qu’autre utilisateur
Avant d’aborder les différents usages, nous allons traiter la notion de commande exécutée en tant qu’autre utilisateur et, surtout, en tant qu’administrateur. En effet, la plupart des commandes que nous allons voir par la suite ne sont permises qu’à l’utilisateur administrateur du système, plus connu sous le nom de root. Par défaut, sur Debian, il s’appelle root, mais il pourrait très bien porter un autre nom, comme toto.
su
Permet d’ouvrir un terminal en tant qu’autre utilisateur. Il faut alors connaître le mot de passe de cet utilisateur.
Exemple 1 :
demander à être root avec le même shell :
alex@y510p:~$ su
Password:
root@y510p:/home/alex#
Exemple 2 :
demander à être root avec un nouveau shell. Cette méthode réinitialise la plupart des variables d’environnement et est plus propre que la précédente :
alex@y510p:~$ su -
Password:
root@y510p:~# pwd
/root
Nous voyons ici que nous sommes dans le répertoire personnel de root et non dans celui de l’utilisateur alex.
Exemple 3 :
demander un shell en tant qu’autre utilisateur spécifique :
alex@y510p:~$ su user1
Password:
user1@y510p:/home/user1$
Tapez exit pour quitter le shell et revenir au shell de l’utilisateur courant (ici...
Gestion des utilisateurs
whoami
La commande whoami permet de savoir avec quel utilisateur nous sommes connectés :
alex@y510p:~$ whoami
alex
users et who
La commande users permet d’afficher les utilisateurs connectés sur le système.
La commande who -u permet en plus d’afficher la date de leur dernière connexion, le terminal utilisé, le PID associé, la machine depuis laquelle ils sont connectés et leur durée d’inactivité (00:16 signifie par exemple une inactivité de 16 minutes) :

Ici, nous voyons que deux utilisateurs sont connectés depuis des machines distinctes sur des pseudo-terminaux (pts/0 et pts/1) et que l’utilisateur alex a également une session ouverte en local, comme l’indique l’utilisation de tty1.
Si vous travaillez seul, vous ne devriez voir que vous.
compgen
Nous avons déjà utilisé compgen pour lister les commandes disponibles sur le système. Cette commande a d’autres usages et permet notamment d’afficher la liste de tous les utilisateurs du système :
alex@y510p:~$ compgen -u
root
[...]
www-data
[...]
alex
systemd-coredump
clamav
[...]
Nous aurions obtenu le même résultat avec la commande suivante : cat /etc/passwd | cut -d: -f1
Le fichier /etc/passwd liste l’ensemble des utilisateurs du système et leur groupe primaire.
Nous pouvons constater dans ce fichier qu’il y a beaucoup plus d’utilisateurs qu’on ne pourrait le penser. Il s’agit surtout d’utilisateurs système, comme par exemple www-data, clamav ou encore nm-openvpn. Ces utilisateurs, qui n’ont pas de shell de connexion et ne peuvent donc pas ouvrir de session sur la machine, sont créés automatiquement par le système et par les services installés.
Les comptes sont listés sous cette forme :
nom d'utilisateur:mot de passe:UID:GID:gecos:home-dir:shell
Exemple :
alex:x:1000:1000:alex,,,:/home/alex:/bin/bash
|
Nom du champ |
Valeur du champ |
Signification |
|
nom d’utilisateur |
alex |
Nom de l’utilisateur |
|
mot de passe |
x |
Le mot de passe est stocké dans /etc/shadow (fichier qui contient les hashs des mots de passe des utilisateurs, nous en reparlerons dans quelques pages) |
|
UID |
1000 |
User id, identifiant de l’utilisateur |
|
GID |
1000 |
Group... |
Gestion des groupes
Il est utile de gérer des groupes lorsqu’il y a plusieurs utilisateurs sur votre futur serveur, qu’ils disposent ou non de privilèges particuliers. Nous allons voir qu’il est possible de créer des groupes, de les modifier, de les supprimer et d’y ajouter des utilisateurs.
1. Création, modification et suppression
Lister les groupes sur le système
Deux commandes sont possibles :
cat /etc/group | cut -d: -f1
compgen -g
cat /etc/group, sans cut, affiche également le GID.
Créer un groupe
Exemple :
créons le groupe grp2 :
sudo groupadd grp2
Nous pourrions aussi utiliser la commande addgroup.
Supprimer un groupe
Exemple :
supprimons le groupe grp2 :
sudo groupdel grp2
Changer le nom d’un groupe
Exemple :
le groupe grp1 devient grpone :
sudo groupmod -n grpone grp1
Changer le GID d’un groupe
Exemple :
changeons le GID de grpone pour lui attribuer 1155 au lieu de 1055, en trois étapes :
1 - Nous relevons le GID d’origine.
alex@vmalex:~$ grep "grpone" /etc/group
grpone:x:1055:
2 - Nous changeons le GID.
alex@vmalex:~$ sudo groupmod -g 1155 grpone
3 - Nous vérifions le nouveau GID.
alex@vmalex:~$ grep "grpone" /etc/group
grpone:x:1155:
Créer ou modifier le mot de passe d’un groupe
Il peut être utile de définir un mot de passe sur certains groupes, notamment...
Gestion des paquets
Dans cette section, nous allons voir comment installer, supprimer et mettre à jour des logiciels sur le système avec les gestionnaires de paquets apt et dpkg.
1. Les dépôts
Composition
Contrairement aux systèmes Windows, la majeure partie des logiciels disponibles sous Linux est regroupée sous forme de paquets dans des dépôts qui servent de bases centrales de logiciels. Ce mode de fonctionnement rend la gestion des logiciels et du système particulièrement aisée, comme nous allons le voir très bientôt.
Un dépôt contient un ensemble de paquets, d’exécutables et de codes sources organisés dans une arborescence particulière de répertoires. On y trouve également divers fichiers d’infrastructure : sommes de contrôle, signatures, etc. Les dépôts sont généralement accessibles via des serveurs web, mais il peut aussi exister des dépôts locaux sur un DVD, une image ISO montée ou un périphérique USB.
Les clients, utilisateurs des systèmes Linux, s’y connectent via un gestionnaire de paquets, comme apt par exemple.
Un dépôt fournit plusieurs versions, ou releases. Chez Debian, les versions, ou noms de code, sont nommées d’après des personnages des films Toy Story. Ces noms de code ont des alias appelés suites. Une version est divisée en différents composants, dont le nom indique notamment les conditions de licence des logiciels qu’ils contiennent. Une version propose des paquets pour différentes architectures matérielles, comme amd64 ou i386, ainsi que des paquets contenant le code source.
Tableau récapitulatif des versions Debian au 30/08/2025 :
|
Suites (alias) |
Nom de code (releases) |
Versions (numéro) |
Composants |
Architectures |
|
unstable |
sid |
nc |
main contrib non-free non-free-firmware |
amd64 i386 powerpc s390x, ... |
|
testing |
forky |
14 |
||
|
stable |
trixie |
13 |
||
|
oldstable |
bookworm |
12 |
||
|
oldoldstable |
bullseye |
11 |
Ce tableau évolue au fil du temps. Par exemple, au moment où ces lignes sont écrites, la version stable de Debian est trixie ; auparavant, il s’agissait de bookworm.
Tableau comparatif des composants :
|
Composant |
Signification |
Exemples de licences |
Exemples de paquets |
|
main |
contient des paquets conforment aux principes... |
Gestion des droits sur les fichiers
Nous allons voir dans cette section qu’il existe différents droits, ou permissions, sur les fichiers et qu’il est possible de les modifier. Cette notion est particulièrement importante pour la bonne gestion et le bon fonctionnement de votre futur serveur. Une gestion fine est primordiale pour garantir un accès juste aux ressources hébergées sur votre serveur : ni trop de droits ni trop peu.
1. Visualisation des droits
La commande ls, avec l’option -l et éventuellement -h, déjà présentée au chapitre Utiliser Linux via un terminal, section Des commandes de base à connaître - ls, permet de lister les fichiers d’un répertoire donné. Elle permet également de connaître les droits associés à ces fichiers :
alex@y510p:~$ ls -lh
total 3.5G
[...]
drwxr-xr-x 3 alex alex 4.0K Feb 14 2023 html
-rw-r--r-- 1 alex alex 265K Dec 22 2023 curl_7.74.deb
drwxr-xr-x 10 alex alex 4.0K Dec 8 2024 Documents
drwxr-xr-x 34 alex alex 68K Sep 1 20:45 Downloads
drwxr-xr-x 2 alex alex 4.0K Oct 13 2020 for_cert
-rw-r--r-- 1 alex alex 100K Dec 23 2024 g.pdf
-rwxrwx--- 1 alex alex 1.2K Apr 29 2020 get_city.sh
[...]
Nous observons ici plusieurs lignes successives, une par fichier. Chaque ligne contient différentes colonnes, dont celles des droits que nous allons détailler.
Les droits, représentés sous forme littérale rwx, sont affichés dans la première colonne. Ils se lisent par groupes de trois caractères : les trois premiers correspondent aux droits de l’utilisateur propriétaire, les trois suivants à ceux du groupe propriétaire et les trois derniers à ceux des autres utilisateurs.
R correspond au droit de lecture (Read), W au droit d’écriture (Write) et X au droit d’exécution (eXecute).
Exemple avec la ligne suivante :
-rwxrwx--- 1 alex alex...Gestion des services
1. systemd
Un service est un programme qui tourne en tâche de fond, automatiquement, sans interaction de la part de l’utilisateur courant. Les services sont aussi connus sous le nom de daemons. Ils sont très similaires aux jobs que l’outil crontab permet d’exécuter (non abordé dans cet ouvrage).
Debian, comme beaucoup de versions de Linux, utilise nativement systemd pour gérer ses services.
Avec systemd, nous pouvons créer et gérer une multitude de tâches, même les plus complexes. Il est ainsi non seulement possible de gérer les services par défaut du système, ceux des programmes installés par la suite (notamment les services web comme Apache ou Nginx), mais aussi nos propres services, issus de quelques lignes de commande ou de scripts entiers, comme nous allons le voir très bientôt.
2. Utilisation de base
Les services systemd sont gérables via la commande systemctl. Voyons quelques exemples.
Exemple 1 :
lister les services démarrés et actifs :
systemctl list-units --type=service
Exemple 2 :
lister tous les services démarrés :
systemctl list-units --type=service --all
Exemple 3 :
voir le statut du service ufw :

Le résultat nous montre différentes informations, notamment :
-
l’état du service : "Active: active (running)"
-
si le service est persistant : "enabled"
Cette...
Gestion des processus
Chaque logiciel exécuté sur le système crée un processus avec un ou plusieurs identifiants qui lui sont propres communément appelés PID (Process ID), et éventuellement des threads avec leur propre identifiant, appelé TID (Thread ID).
Nous allons voir ici différentes commandes permettant d’observer les processus en cours et les ressources qu’ils utilisent, d’observer un processus en particulier et, enfin, de tuer des processus définis.
1. Lister les processus
top
La commande top permet de lister les processus en temps réel :

On voit notamment quels PID et quels utilisateurs sont associés aux processus et quelles ressources ils consomment.
Dans le terminal contextuel de top, nous avons plusieurs possibilités pour naviguer et rechercher, notamment :
-
[E] : changer la visualisation de l’utilisation de la mémoire (en Mo, Go, etc.).
-
[Maj] L : rechercher un mot clé (très utile pour se focaliser sur un processus donné par exemple).
-
[&] : rechercher l’occurrence suivante du mot-clé.
Exemple avec un affichage en Mo au lieu de l’unité par défaut, l’octet :

Exemple en recherchant le mot clé "system" :

Le mot-clé s’affichera en surbrillance.
Pour sortir de top, on tape [Q].
[H] affichera l’ensemble des commandes possibles dans top.
ps
La commande ps liste les processus en cours d’exécution, comme le ferait un cat sur un fichier, c’est-à-dire en une fois et non en temps réel.
Exemple 1 :
afficher les processus en cours de l’utilisateur courant :
alex@ingeservice:~$ ps -u $USER
PID TTY TIME CMD
2502274 ? 00:00:00 systemd
2502275 ? 00:00:00 (sd-pam)
2502295 ? 00:00:00 sshd
2502296 pts/0 00:00:00 bash
Exemple 2 :
afficher tous les processus en cours :

On voit ici que tous...
Gestion du réseau
S’assurer d’une bonne gestion du réseau est indispensable afin de disposer d’un serveur capable de communiquer, c’est-à-dire visible et accessible sur son réseau, et capable d’envoyer et de recevoir des données, notamment depuis Internet.
Nous allons voir dans cette section différentes commandes qui permettront d’avoir un serveur communiquant et donc fonctionnel.
1. Connectivité
ping
La commande ping envoie une requête ICMP (Internet Control Message Protocol) à une machine, via son adresse IP, son nom de domaine ou son nom d’hôte, afin de vérifier si elle est joignable.
Le but est de tester la connectivité entre deux machines et de vérifier si une machine distante existe.
On peut pinguer des machines d’un même réseau local (IP privée), ainsi que des machines exposées sur Internet (IP publique).
Exemple 1 :
Nous avons configuré un serveur portant l’adresse IP 192.168.1.5 sur notre réseau local ; assurons-nous qu’il est accessible depuis notre poste de travail client :

On voit qu’on peut bien communiquer avec la machine, que ce soit via son adresse IP ou son nom d’hôte.
Ce n’est pas parce qu’une première machine peut en pinguer une autre que cette dernière peut pinguer la première.
Exemple 2 - Assurons-nous que le serveur a accès à Internet :

On voit ici que la machine a bien accès à Internet et qu’elle pourra atteindre d’autres machines sur Internet via leur nom de domaine.
ip
La commande ip permet de connaître les adresses IP associées aux interfaces réseau de notre machine.
Exemple 1 :
afficher les adresses IP associées aux interfaces réseau de notre serveur avec l’option a :

Ici, la machine a plusieurs interfaces réseau : lo et enp0s3 (elle porte peut-être un autre nom chez vous). C’est la seconde qui possède une connectivité avec un réseau et que l’on peut considérer comme l’interface réseau principale.
La première, 127.0.0.1/8, est l’adresse de loopback (ou localhost) que possède normalement chaque machine sous Linux et Windows, et plus généralement la plupart des systèmes d’exploitation. Elle est réservée...
Connexion à distance, connectivité et transfert de données
Il sera peu probable, et surtout peu confortable, d’utiliser directement votre serveur en local, avec un écran et un clavier que vous comptiez peut-être lui dédier. Dans le cas d’un serveur loué, de type VPS, situé en dehors de votre réseau, cela n’aurait de toute façon pas été possible.
Il sera beaucoup plus simple d’interagir avec votre serveur à distance, depuis une autre machine de votre réseau, comme votre ordinateur personnel par exemple.
La commande ssh va nous permettre cela.
Nous verrons par la suite la commande curl, qui est très utile notamment pour tester la connectivité d’URL.
Nous finirons cette section en présentant des moyens d’envoyer des données à votre serveur, de recevoir des données stockées sur ce dernier, puis de lui permettre de télécharger des données avec les commandes scp et rsync.
Il existe d’autres moyens de transférer des données comme sftp (non abordé dans cet ouvrage).
1. ssh
Le meilleur moyen d’ouvrir une session sur votre serveur, qu’il soit local ou distant, est d’utiliser ssh. Ce programme nous permet d’établir une communication chiffrée entre deux machines.
Vérifier la connectivité
En admettant que vous connaissiez l’adresse IP de votre machine cliente et celle de votre serveur, vous pouvez effectuer un test avec ping dans les deux sens afin de vérifier si les machines peuvent effectivement se voir et communiquer entre elles.
Du client (y510p) au serveur (pro) :

Du serveur (pro) au client (y510p) :

Les deux machines peuvent bien communiquer entre elles.
Test de connectivité par nom d’hôte
Vous pouvez aussi faire en sorte d’appeler les machines par leur nom d’hôte plutôt que par leur adresse IP.
Sur les machines clientes, il faudra modifier le fichier /etc/hosts pour créer la correspondance entre l’adresse IP et le nom d’hôte :
alex@y510p:~$ sudo nano /etc/hosts
192.168.1.5 pro
Testons le bon fonctionnement du ping via le nom de la machine :

Installation
Si le service ssh n’est pas déjà installé et activé sur votre serveur, il faudra se connecter...
Gestion des journaux
1. Qu’est-ce qu’un journal ?
Les journaux, plus communément appelés logs, sont des fichiers, souvent textuels mais de plus en plus souvent binaires, générés automatiquement par différents services et logiciels du système d’exploitation, dans lesquels des événements sont écrits.
Le but est de conserver des traces de ce que ces services et logiciels effectuent.
Les logs servent notamment à faciliter le débogage (voir chapitre Dépannage et débugging ) et peuvent être utilisés pour contribuer à la protection de la machine (voir chapitre Sensibilisation et durcisement - Dans la pratique - IPS).
Il existe une multitude de logs sous Linux générés par différents composants.
Ainsi, sous Linux, de nombreux événements sont journalisés, de l’ouverture de session d’un utilisateur à l’insertion d’un périphérique USB.
Nous verrons au chapitre Configuration du serveur - Journaux que les sites web hébergés sur notre futur serveur émettent une grande quantité de logs via le service web qui les fait fonctionner, comme Apache ou Nginx.
2. Stockage
Sous Debian, les logs sont par défaut situés dans le répertoire /var/log. On y retrouve notamment des logs de l’OS, comme :
-
btmp
-
apt
-
dpkg
On y trouve également des logs qui ne proviennent pas directement de l’OS, mais de logiciels tiers installés, comme Apache, Nginx ou MariaDB.
Exemple de stockage des logs de dpkg :

On observe ici que dpkg, comme tous les logs, dispose de plusieurs fichiers dans le répertoire /var/log. Nous verrons pourquoi un peu plus loin dans cette section.
3. Lecture
Les logs textuels se lisent avec les outils habituels de lecture de fichiers de ce type.
Les commandes cat, head, less et grep permettent de lire ou de filtrer ces fichiers. La commande tail, avec l’option -f, permet de lire un log en temps réel.
Quelques exemples :
Exemple 1 :
ouvrir le log dpkg sans tout faire défiler :
less /var/log/dpkg.log
Exemple 2 :
afficher les lignes de logs contenant le mot "python" dans dpkg :
grep -i python /var/log/dpkg.log
Exemple 3 :
lire en temps réel le log de dpkg :
tail -f /var/log/dpkg.log
Avec le phénomène de rotation...
Gestion des périphériques de stockage
Cette section vous sera utile si vous disposez d’un accès physique à votre serveur, notamment pour monter des périphériques de stockage internes ou externes afin d’effectuer des sauvegardes, par exemple.
1. Lister les périphériques de stockage
Monter ou non
La commande fdisk, avec l’option -l (list), permet de voir les périphériques présents sur le système, sous la forme /dev/sd<X>, ainsi que leurs partitions :
sudo fdisk -l
[...]
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: ST1000LM014-1EJ1
[...]
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
On voit par exemple ici que le disque /dev/sda contient une partition, nommée /dev/sda1.
Déjà montés
Les disques déjà montés disposent d’un point de montage qui permet d’interagir avec le périphérique.
Il est possible de lister les périphériques montés avec la commande df et l’option -h (human readable) :
df -h
Filesystem Size Used Avail Use% Mounted on
[...]
/dev/sda1 916G 557G 313G 65% /media/alex/Storage
[...]
On voit ici que la partition /dev/sda1 est montée...