Utilisateurs, droits et fichiers
La plupart des compromissions ne cassent pas Linux : elles utilisent les droits qu'on leur a généreusement donnés.
Prérequis (cursus dev) : terminal, utilisateurs et permissions.
Pourquoi
La plupart des compromissions ne cassent pas Linux : elles utilisent les droits qu'on leur a généreusement donnés. Un utilisateur par usage et des droits minimaux transforment une faille applicative en incident contenu au lieu d'une prise totale.
Concepts
- Moindre privilège : chaque programme n'a que les droits strictement nécessaires. Pas de « au cas où ».
- User système (
useradd -r -s /usr/sbin/nologin monapp) : un compte sans login ni shell, juste pour faire tourner un service. Si l'app est compromise, l'attaquant hérite de droits minuscules. - Lecture des droits :
-rw-------(600, propriétaire seul),drwxr-x---(750, groupe lit, autres rien). Le premier caractère (-/d) dit fichier ou dossier.
Exemple : cloisonner une app
useradd -r -s /usr/sbin/nologin monapp
chown -R monapp:monapp /opt/monapp
chmod 750 /opt/monapp
chmod 600 /opt/monapp/.env
namei -l /opt/monapp/.env # montre TOUT le chemin : un parent en écriture pour tous annule le 600
Cas réel : le disque, tueur silencieux
Symptômes d'un disque plein : Postgres refuse les écritures (could not extend file, message d'erreur en anglais à reconnaître), Docker ne démarre plus rien, les logs s'arrêtent — le silence avant la panne. Routine :
df -h # vue d'ensemble (à surveiller dès 80 %)
du -sh /var/* 2>/dev/null # qui grossit ? souvent /var/log, /var/lib/docker
journalctl --vacuum-size=500M # purger le journal en urgence
docker image prune # jeter les images inutilisées (détaillé au chapitre 2)
Ensuite on traite la cause (rotation des logs), pas seulement le symptôme.
Pièges
.enven 644 « pour débugger » : lisible par tous les users de la machine.chmod -R 777« pour que ça marche » : la pire rustine de l'histoire, elle marche aussi pour l'attaquant.- Droits parfaits sur le fichier, parent en 777 :
nameil'aurait montré.
À retenir
Un user par app, 600 pour les secrets jamais dans git, namei pour vérifier le chemin entier, disque surveillé avant 80 %.