Linux avancé : permissions et sécurité du système
Cette page approfondit Ubuntu Server : actions après l’installation et complète SSH : durcissement du serveur et Pare-feu. Principe directeur : moindre privilège.
Permissions classiques
Section intitulée « Permissions classiques »ls -l fichier# -rw-r----- 1 alice www-data 1204 janv. 15 10:30 fichier| Champ | Sens |
|---|---|
- |
Type (- fichier, d dossier, l lien) |
rw- |
Droits du propriétaire |
r-- |
Droits du groupe |
--- |
Droits des autres |
| Droit | Fichier | Dossier |
|---|---|---|
r (4) |
Lire | Lister le contenu |
w (2) |
Modifier | Créer, renommer, supprimer des entrées |
x (1) |
Exécuter | Traverser (accéder aux éléments) |
chmod 640 fichier # rw-r-----chmod u=rwx,g=rx,o= script.shchmod -R g+rX dossier/ # X : exécution seulement pour les dossiers (et fichiers déjà exécutables)chown alice:www-data fichierchown -R alice: dossier/find /srv/site -type d -exec chmod 750 {} +find /srv/site -type f -exec chmod 640 {} +Un dossier a besoin de x pour être traversé : sans x sur un dossier parent, on n’atteint pas ses fichiers, même lisibles (namei -l /chemin/complet montre les droits de chaque niveau).
umask # 0022 : fichiers 644, dossiers 755umask 027 # fichiers 640, dossiers 750Le umask retire des droits aux fichiers nouvellement créés. Pour un service : UMask=0027 dans l’unité systemd.
Bits spéciaux
Section intitulée « Bits spéciaux »| Bit | Fichier | Dossier | Exemple |
|---|---|---|---|
setuid (s chez le propriétaire) |
S’exécute avec les droits du propriétaire | Sans effet | /usr/bin/passwd |
setgid (s chez le groupe) |
S’exécute avec les droits du groupe | Les nouveaux fichiers héritent du groupe du dossier | Dossier partagé |
sticky (t) |
Seul le propriétaire d’un fichier peut le supprimer | /tmp |
chmod g+s /srv/projet # fichiers créés dans le dossier appartiennent au groupe du dossierchmod +t /srv/depot # stickysudo find / -xdev -perm -4000 -type f 2>/dev/null # programmes setuid : à connaître et à surveillerUn programme setuid root inconnu est un signal d’alerte : il donne les droits de root à celui qui l’exécute.
ACL : droits fins
Section intitulée « ACL : droits fins »Les ACL (listes de contrôle d’accès) donnent des droits à des utilisateurs ou groupes supplémentaires sans changer le propriétaire ni le groupe.
sudo apt install aclsetfacl -m u:alice:rwx /srv/projetsetfacl -m g:equipe:rX /srv/projetsetfacl -R -m u:alice:rwx /srv/projet # récursifsetfacl -d -m g:equipe:rwX /srv/projet # ACL PAR DÉFAUT : appliquée aux futurs fichierssetfacl -x u:alice /srv/projet # retirersetfacl -b /srv/projet # tout retirergetfacl /srv/projetls -l affiche un + après les droits lorsqu’une ACL existe (drwxr-x---+). Les ACL par défaut (-d) règlent le cas des dossiers partagés où les nouveaux fichiers doivent être accessibles à un groupe.
Capabilities : divisions des droits de root
Section intitulée « Capabilities : divisions des droits de root »Plutôt que d’exécuter un programme en root, on lui accorde seulement la capacité nécessaire :
getcap -r /usr/bin 2>/dev/nullsudo setcap cap_net_bind_service=+ep /usr/bin/node # écouter sur un port < 1024 sans être rootsudo setcap -r /usr/bin/node # retirerPour un service systemd : AmbientCapabilities=CAP_NET_BIND_SERVICE et NoNewPrivileges=true (systemd : durcissement d’un service). Une capacité accordée à node s’applique à tous les programmes Node.js exécutés : préférer l’option de l’unité systemd, ou un reverse proxy sur les ports 80 et 443.
Attributs de fichier : chattr
Section intitulée « Attributs de fichier : chattr »sudo chattr +i /etc/resolv.conf # immuable : modification et suppression impossibles, même par rootsudo chattr +a /var/log/audit.log # ajout seullsattr /etc/resolv.confsudo chattr -i /etc/resolv.confProtège un fichier critique contre une modification accidentelle ; pense à retirer +i avant une mise à jour légitime (cause fréquente d’erreurs de mise à jour inexplicables).
sudo visudo # édition sûre (vérifie la syntaxe)sudo visudo -f /etc/sudoers.d/deploiement # fichier dédiésudo -l # ce que l'utilisateur courant peut fairesudo -u postgres psql # agir comme un autre utilisateursudo journalctl -t sudo # journal des usages de sudo (ou /var/log/auth.log)/etc/sudoers.d/deploiement :
Cmnd_Alias RELANCE = /usr/bin/systemctl restart monapp, /usr/bin/systemctl status monappdeploy ALL=(root) NOPASSWD: RELANCE%admins ALL=(ALL:ALL) ALLDefaults:deploy !requirettyDefaults timestamp_timeout=5| Règle | Conseil |
|---|---|
Commandes précises regroupées par Cmnd_Alias |
Éviter ALL pour les comptes de service |
NOPASSWD |
À limiter à des commandes exactes (jamais NOPASSWD: ALL pour un compte exposé) |
Éditer avec visudo |
Une erreur de syntaxe peut verrouiller sudo |
Fichiers dans /etc/sudoers.d/ (chmod 440) |
Facilite la gestion ; noms sans point ni ~ |
Sur Ubuntu 26.04, sudo est fourni par sudo-rs : la syntaxe usuelle des fichiers sudoers est prise en charge, mais certaines options avancées peuvent différer ; tester avec sudo visudo -c et une session de secours ouverte.
AppArmor
Section intitulée « AppArmor »AppArmor confine des programmes selon des profils (fichiers accessibles, capacités, réseau). Actif par défaut sur Ubuntu.
sudo aa-status # profils chargés, en mode « enforce » ou « complain »sudo apt install apparmor-utils apparmor-profilessudo aa-complain /usr/sbin/nginx # mode apprentissage : journalise sans bloquersudo aa-enforce /usr/sbin/nginx # mode applicationsudo aa-logprof # propose des mises à jour de profil depuis les journauxsudo journalctl -k | grep -i 'apparmor="DENIED"'sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx # recharger un profilUn programme qui échoue avec « Permission denied » alors que les droits Unix sont corrects est souvent bloqué par AppArmor : chercher apparmor="DENIED" dans journalctl -k. Ne pas désactiver AppArmor : passer le profil en complain, corriger, puis revenir en enforce.
Audit : auditd
Section intitulée « Audit : auditd »sudo apt install auditdsudo auditctl -w /etc/passwd -p wa -k identite # surveiller écritures et changements d'attributssudo auditctl -w /etc/sudoers.d/ -p wa -k sudosudo auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k commandes-rootsudo ausearch -k identite --start todaysudo aureport --auth --summarysudo auditctl -lRègles permanentes dans /etc/audit/rules.d/ (puis sudo augenrules --load). L’audit produit beaucoup de données : cibler les fichiers et actions sensibles.
Comptes et authentification
Section intitulée « Comptes et authentification »id alicegetent passwd alicesudo adduser alicesudo usermod -aG docker alice # le groupe docker équivaut à des droits root : à réserver aux comptes de confiancesudo passwd -l alice # verrouiller le mot de passesudo usermod -e 2026-12-31 alice # expiration du comptesudo chage -l alice # politique de mot de passesudo chage -M 90 -W 14 alicelast -n 10 # dernières connexionssudo lastb -n 10 # échecs de connexionwho; wsudo faillock --user alice # verrouillages (PAM)| Pratique | Raison |
|---|---|
| Un compte par personne | Traçabilité |
Pas de connexion directe en root (SSH : PermitRootLogin no) |
Voir SSH : durcissement |
Comptes de service sans shell (/usr/sbin/nologin) |
sudo adduser --system --group --shell /usr/sbin/nologin monapp |
| Retirer les comptes inutilisés | Réduire la surface d’attaque |
| Mots de passe forts ou clés uniquement | Voir SSH : clés |
Les groupes docker et lxd donnent de fait les droits de root sur la machine : ne pas y ajouter d’utilisateur qui ne doit pas être administrateur (Docker : installation).
Mises à jour de sécurité
Section intitulée « Mises à jour de sécurité »sudo apt install unattended-upgrades needrestartsudo dpkg-reconfigure -plow unattended-upgradessudo unattended-upgrade --dry-run -dcat /var/run/reboot-required 2>/dev/nullsudo needrestart -r l # services à redémarrer après mise à jour de bibliothèquesapt list --upgradableUn noyau ou une bibliothèque mise à jour demande souvent un redémarrage (ou celui des services concernés : needrestart). Ubuntu Pro propose le Livepatch (correctifs du noyau sans redémarrage) : voir Noyau et démarrage.
Auditer la configuration
Section intitulée « Auditer la configuration »sudo apt install lynissudo lynis audit systemsudo cat /var/log/lynis-report.dat | grep -E "^(warning|suggestion)"sudo ss -tlnp # services exposéssudo find / -xdev -type f -perm -0002 2>/dev/null | head # fichiers modifiables par toussudo find / -xdev -nouser -o -nogroup 2>/dev/null | head # fichiers orphelinsLynis donne une liste d’améliorations classées ; les examiner une par une plutôt que de tout appliquer.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Permission denied malgré des droits corrects |
Droit x manquant sur un dossier parent (namei -l), ACL, AppArmor, SELinux-like ailleurs |
| Fichiers créés avec les mauvais droits | umask, setgid et ACL par défaut sur le dossier |
sudo: unable to resolve host |
Nom d’hôte absent de /etc/hosts |
sudo verrouillé après modification |
Erreur dans sudoers : garder une session root ouverte, visudo -c |
| Un programme ne peut pas ouvrir un port < 1024 | setcap cap_net_bind_service, ou un reverse proxy |
chattr : Operation not permitted sur un fichier |
Attribut immuable : lsattr, chattr -i |
| Le service échoue sous AppArmor | journalctl -k | grep DENIED, aa-complain puis ajustement du profil |
audit remplit le disque |
Règles trop larges, rotation (/etc/audit/auditd.conf) |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Sur 26.04, sudo est fourni par sudo-rs (l’ancienne version devient sudo.ws) : les usages courants sont identiques, certaines directives avancées de sudoers demandent une vérification. AppArmor, auditd et acl sont disponibles sur les deux versions.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuels :
man chmod,man acl,man capabilities,man sudoers,man apparmor, Documentation Ubuntu : AppArmor - Suite : Journaux et diagnostic de performance