Sur un serveur Linux, la sécurité repose d’abord sur une idée simple : chaque processus s’exécute au nom d’un utilisateur, et chaque fichier appartient à un utilisateur et à un groupe. Le cours F2 vous a présenté chmod et la notation rwx. Ici, nous passons au point de vue de l’administrateur : qui doit pouvoir faire quoi sur la machine qui héberge votre application ?
Qui suis-je ?
whoami # nom de l'utilisateur courant
id # uid, gid et liste des groupes
# uid=1000(lea) gid=1000(lea) groups=1000(lea),27(sudo),33(www-data)
getent passwd lea # la ligne de lea dans la base des comptes (/etc/passwd)
getent group www-data
Les comptes sont décrits dans /etc/passwd, les groupes dans /etc/group et les mots de passe chiffrés dans /etc/shadow, lisible par root seulement.
root, sudo et comptes de service
root (uid 0) a tous les droits : il peut lire, modifier ou supprimer n’importe quoi. On ne travaille donc jamais connecté en root. On utilise un compte normal membre du groupe sudo (Debian, Ubuntu) ou wheel (Fedora, RHEL), et on préfixe ponctuellement une commande :
sudo apt update # une seule commande avec les droits root
sudo -l # que suis-je autorisé à faire avec sudo ?
sudo -u postgres psql # exécuter en tant qu'un autre utilisateur
Les règles sudo se modifient avec sudo visudo ou dans un fichier de /etc/sudoers.d/ : visudo vérifie la syntaxe avant d’enregistrer, ce qui évite de se priver soi-même de sudo.
Une bonne pratique essentielle : chaque application tourne sous un compte de service dédié, sans mot de passe ni shell de connexion. Si l’application est compromise, l’attaquant n’obtient que les droits de ce compte.
sudo useradd --system --no-create-home --shell /usr/sbin/nologin notes
Créer des utilisateurs et des groupes
sudo groupadd equipe # nouveau groupe
sudo useradd -m -s /bin/bash -G equipe alice # -m crée /home/alice, -G groupes secondaires
sudo passwd alice # définir un mot de passe
sudo usermod -aG www-data deploy # AJOUTE un groupe (-a est indispensable)
Sans -a, usermod -G remplace la liste des groupes secondaires : l’utilisateur peut perdre son appartenance au groupe sudo. Un nouveau groupe n’est pris en compte qu’à la prochaine connexion (ou dans un shell ouvert avec newgrp www-data).
Propriétaire et groupe : chown
sudo chown deploy:www-data /srv/site/index.html # propriétaire et groupe
sudo chown -R deploy:www-data /srv/site # -R : récursif
sudo chgrp equipe rapport.pdf # seulement le groupe
stat -c '%a %U:%G' /srv/site/index.html
# 640 deploy:www-data
stat -c affiche exactement ce que l’on veut vérifier : %a les droits en octal, %U le propriétaire, %G le groupe. Exemple typique : les fichiers d’un site appartiennent à deploy (qui publie) avec le groupe www-data (le serveur web les lit), en 640 pour les fichiers et 750 pour les dossiers.
umask : les droits par défaut
Un fichier créé partirait de 666 (un dossier de 777) ; le umask retire des droits à ces valeurs.
| umask | Fichier créé | Dossier créé |
|---|---|---|
| 022 (courant) | 644 rw-r--r-- |
755 rwxr-xr-x |
| 027 | 640 rw-r----- |
750 rwxr-x--- |
| 077 | 600 rw------- |
700 rwx------ |
umask # affiche la valeur courante, par exemple 0022
umask 027 # valable pour le shell courant et ses enfants
Dossier partagé : le bit setgid
Une équipe veut un dossier où chacun dépose des fichiers modifiables par tous ses membres. Le bit setgid sur un dossier (le 2 devant les droits) fait que tout fichier créé dedans reçoit le groupe du dossier, et non le groupe principal de son créateur.
sudo mkdir -p /srv/partage
sudo chown root:equipe /srv/partage
sudo chmod 2770 /srv/partage # setgid + rwx pour propriétaire et groupe, rien pour les autres
ls -ld /srv/partage
# drwxrws--- 2 root equipe 4096 ... /srv/partage (le s remplace le x du groupe)
Installer des logiciels : apt
Sur Debian et Ubuntu, les logiciels viennent de dépôts signés, gérés par apt :
sudo apt update # rafraîchit la liste des paquets disponibles
sudo apt install nginx curl # installe (et ses dépendances)
apt show nginx # description, version, dépendances
apt list --installed | grep nginx
sudo apt upgrade # met à jour les paquets installés
sudo apt remove nginx # désinstalle (garde la configuration)
Lancez toujours apt update avant une installation : sinon apt cherche des versions qui ne sont plus sur le dépôt. Sur Fedora ou RHEL, l’équivalent est dnf.
Exercices
Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.
Dossier partagé d'équipe
Dans le terminal (vous avez sudo), exécutez dans l’ordre :
sudo groupadd equipe sudo useradd -m -s /bin/bash -G equipe alice sudo mkdir -p /srv/partage sudo chown root:equipe /srv/partage sudo chmod 2770 /srv/partage sudo -u alice touch /srv/partage/note.txtPuis vérifiez avec
id alice,stat -c '%a %U:%G' /srv/partageetstat -c '%G' /srv/partage/note.txt.- `id alice` affiche `equipe` dans la liste des groupes
- `stat -c '%a %U:%G' /srv/partage` affiche exactement `2770 root:equipe`
- `stat -c '%G' /srv/partage/note.txt` affiche `equipe` (et non `alice`)
- `ls -ld /srv/partage` montre `drwxrws---`
Mesurer l'effet du umask
Assurez-vous que
/tmp/rapport.txtet/tmp/rapportsn’existent pas, puis lancez dans un sous-shell :(umask 027; touch /tmp/rapport.txt; mkdir /tmp/rapports) stat -c '%n %a' /tmp/rapport.txt /tmp/rapports- Les parenthèses limitent le changement de umask au sous-shell
- La sortie contient `/tmp/rapport.txt 640`
- La sortie contient `/tmp/rapports 750`
- `umask` dans le shell principal affiche toujours l'ancienne valeur (souvent 0022)
Ajouter un groupe sans dégâts
L’utilisateur
deployest membre desudo. Quelle commande l’ajoute au groupewww-datasans lui retirersudo?- sudo usermod -G www-data deploy
- sudo usermod -aG www-data deploy
- sudo chown deploy:www-data deploy
- sudo groupadd www-data deploy
Quiz de fin de leçon
Avec un umask de 022, quels droits a un fichier nouvellement créé ?
- 600
- 644
- 755
À quoi sert le bit setgid sur un dossier ?
- À exécuter les fichiers en root
- À donner le groupe du dossier aux fichiers créés dedans
- À empêcher la suppression des fichiers
Pourquoi faire tourner une application sous un compte de service dédié ?
- Pour qu'elle démarre plus vite
- Pour limiter les dégâts si elle est compromise
- Parce que root ne peut pas lancer de programme
La suite du cours
- Processus, signaux et services systemd20 min
- Réseau, ports, pare-feu et SSH20 min
- Journaux et espace disque18 min
- Scripts d'administration et tâches planifiées20 min