Linux : utilisateurs et droits
Linux est un système multi-utilisateur : chaque fichier a un propriétaire, un groupe et des droits ; chaque programme s’exécute au nom d’un utilisateur. C’est le fondement de la sécurité du système. Pour les notions avancées (ACL, setuid, capabilities, AppArmor), voir Linux avancé : permissions et sécurité.
Qui suis-je ?
Section intitulée « Qui suis-je ? »whoami # nom de l'utilisateurid # identifiant, groupe principal, groupesid alicegroupswho # utilisateurs connectéslast -n 5 # dernières connexionsuid=1000(alice) gid=1000(alice) groupes=1000(alice),27(sudo),100(users)Chaque utilisateur a un UID (numéro) ; les noms ne sont que des étiquettes. root est l’utilisateur d’UID 0, tout-puissant.
Lire les permissions
Section intitulée « Lire les permissions »ls -l# -rwxr-xr-- 1 alice equipe 2048 janv. 15 10:30 script.sh| Portion | Qui | Ici |
|---|---|---|
- |
Type (- fichier, d dossier, l lien) |
Fichier |
rwx |
Propriétaire (user) | alice : lire, écrire, exécuter |
r-x |
Groupe | equipe : lire, exécuter |
r-- |
Autres (other) | Tous les autres : lire seulement |
| Droit | Sur un fichier | Sur un dossier |
|---|---|---|
r |
Lire | Lister son contenu |
w |
Modifier | Créer, renommer, supprimer des éléments |
x |
Exécuter (programme, script) | Traverser (entrer dedans, accéder à ses éléments) |
Pour supprimer un fichier, ce n’est pas le droit sur le fichier qui compte, mais le droit w sur le dossier qui le contient.
Modifier les permissions : chmod
Section intitulée « Modifier les permissions : chmod »Notation octale
Section intitulée « Notation octale »Chaque droit vaut un nombre : r = 4, w = 2, x = 1. On additionne par catégorie (propriétaire, groupe, autres) :
| Octal | Droits | Usage courant |
|---|---|---|
600 |
rw------- |
Fichier privé (clé SSH, secrets) |
640 |
rw-r----- |
Lisible par le groupe |
644 |
rw-r--r-- |
Fichier public en lecture (défaut) |
700 |
rwx------ |
Dossier ou script privé |
750 |
rwxr-x--- |
Dossier partagé avec un groupe |
755 |
rwxr-xr-x |
Programme ou dossier public (défaut des dossiers) |
chmod 600 ~/.ssh/id_ed25519chmod 755 script.shchmod -R 750 /srv/projet # récursif (à manier avec précaution)Notation symbolique
Section intitulée « Notation symbolique »chmod u+x script.sh # ajouter l'exécution au propriétairechmod g+w,o-r fichier # groupe : écriture ; autres : retirer la lecturechmod a+r fichier # tous : lecture (a = all)chmod u=rwx,g=rx,o= dossierchmod -R g+rX projet/ # X : exécution seulement pour les dossiersLettres : u (propriétaire), g (groupe), o (autres), a (tous) ; + ajoute, - retire, = fixe.
Changer de propriétaire : chown
Section intitulée « Changer de propriétaire : chown »sudo chown alice fichiersudo chown alice:equipe fichiersudo chown -R alice: /srv/projet # alice et son groupe principal, récursifsudo chgrp equipe fichierSeul root peut changer le propriétaire d’un fichier ; le propriétaire peut changer son groupe vers un groupe dont il est membre.
sudo : agir en administrateur
Section intitulée « sudo : agir en administrateur »sudo apt update # commande avec les droits de rootsudo -i # shell root interactif (à éviter, utiliser sudo ponctuellement)sudo -u postgres psql # commande en tant qu'un autre utilisateursudo -l # ce qu'on a le droit de fairesudo !! # relancer la commande précédente avec sudosudo demande le mot de passe de l’utilisateur (pas celui de root) et enregistre chaque usage dans le journal (/var/log/auth.log). Il appartient au groupe sudo sous Ubuntu : un utilisateur de ce groupe est administrateur.
Habitudes :
- Utiliser
sudopour une commande précise, pas pour toute une session. - Relire une commande avant de la précéder de
sudo: elle s’exécutera sans aucune protection. - Une redirection n’hérite pas de
sudo:sudo echo x > /etc/fichieréchoue ; utiliserecho x | sudo tee /etc/fichier.
Créer et gérer des comptes
Section intitulée « Créer et gérer des comptes »sudo adduser alice # crée le compte, son dossier personnel, demande un mot de passesudo adduser alice sudo # la rend administratricesudo adduser alice equipe # l'ajoute au groupe « equipe »sudo usermod -aG equipe,docker alice # ajouter à des groupes (-a : sans retirer les autres)sudo passwd alice # changer son mot de passesudo passwd -l alice # verrouiller le comptesudo deluser alice # supprimer le compte (garde le dossier personnel)sudo deluser --remove-home alice # supprimer aussi le dossier personnelsudo addgroup equipegetent group equipegetent passwd alice| Commande | Usage |
|---|---|
adduser |
Interactive, recommandée (spécifique à Debian et Ubuntu) |
useradd |
Bas niveau, aucune configuration par défaut : pour les scripts |
usermod -aG |
Ajouter à un groupe : toujours avec -a, sinon les autres groupes sont retirés |
adduser --system |
Compte de service (sans mot de passe, sans connexion) |
Un utilisateur ajouté à un groupe doit se reconnecter pour que ce changement prenne effet (newgrp ou nouvelle session).
Dossiers partagés par un groupe
Section intitulée « Dossiers partagés par un groupe »Scénario : le dossier /srv/projet doit être modifiable par le groupe equipe.
sudo addgroup equipesudo adduser alice equipesudo adduser bob equipesudo mkdir -p /srv/projetsudo chown -R root:equipe /srv/projetsudo chmod -R 2775 /srv/projet # setgid (2) : les nouveaux fichiers héritent du groupe « equipe »Le bit setgid (le 2 de 2775) fait que les fichiers créés dans le dossier appartiennent au groupe equipe, quel que soit leur créateur. Les membres doivent avoir un umask de 002 (ou 0007 selon la politique) pour que leurs fichiers soient modifiables par le groupe. Pour des besoins plus fins, les ACL (Linux avancé : permissions et sécurité).
Mots de passe
Section intitulée « Mots de passe »passwd # changer son propre mot de passesudo chage -l alice # politique et dates d'expirationsudo chage -d 0 alice # forcer le changement à la prochaine connexionPour les connexions distantes, préférer les clés SSH aux mots de passe (SSH : clés et SSH : durcissement du serveur). Un mot de passe long (phrase) vaut mieux qu’un mot de passe court et compliqué ; ne pas le réutiliser.
Les fichiers qui décrivent les comptes
Section intitulée « Les fichiers qui décrivent les comptes »| Fichier | Contenu |
|---|---|
/etc/passwd |
Liste des comptes (nom, UID, groupe, dossier, shell) : lisible par tous |
/etc/shadow |
Empreintes des mots de passe : lisible par root seulement |
/etc/group |
Groupes et leurs membres |
/etc/sudoers, /etc/sudoers.d/ |
Règles de sudo (édition par visudo seulement) |
getent passwd alicecat /etc/group | grep equipeN’éditer ces fichiers qu’avec les commandes prévues (adduser, usermod, visudo), jamais à la main : une erreur peut bloquer toute connexion.
Comptes de service
Section intitulée « Comptes de service »Un programme (serveur web, base de données) s’exécute sous un compte dédié sans droits superflus :
sudo adduser --system --group --no-create-home --shell /usr/sbin/nologin monappps -o user,cmd -C nginxVoir systemd : durcissement d’un service. Ne jamais exécuter un service exposé à Internet en root.
Erreurs de permissions courantes
Section intitulée « Erreurs de permissions courantes »| Message | Cause probable |
|---|---|
Permission denied à la lecture |
Pas de droit r sur le fichier, ou pas de x sur un dossier parent |
Permission denied à la suppression |
Pas de droit w sur le dossier |
Permission denied en lançant ./script.sh |
Droit x absent : chmod +x script.sh |
bash: ./script.sh: cannot execute: required file not found |
Fins de ligne Windows (CRLF) ou interpréteur absent |
Operation not permitted |
Action réservée à root, ou attribut immuable (lsattr) |
sudo: a password is required |
Connexion non interactive, ou règle sudoers manquante |
Permissions 0644 for 'id_ed25519' are too open |
Clé privée SSH : chmod 600 |
<utilisateur> is not in the sudoers file |
Compte absent du groupe sudo : sudo adduser <utilisateur> sudo depuis un compte administrateur |
Trouver quel droit manque :
namei -l /srv/projet/fichier.txt # droits de chaque niveau du cheminid # mes groupesls -ld /srv /srv/projet # droits des dossiers parentsDépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
| Je viens d’être ajouté à un groupe, rien ne change | Se déconnecter et se reconnecter |
| Un service ne peut pas lire ses fichiers | Propriétaire et droits adaptés à l’utilisateur du service (ps -o user,cmd), namei -l |
Les fichiers copiés par sudo appartiennent à root |
sudo chown -R alice: dossier/ |
usermod: user 'x' does not exist |
Vérifier avec getent passwd x |
Verrouillé hors de sudo après une erreur dans sudoers |
Garder une session root ouverte pendant la modification (visudo) ; voir Linux avancé : permissions et sécurité |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Sur Ubuntu 26.04, sudo est fourni par sudo-rs : les usages courants (sudo commande, sudo -u, sudo -i, sudo -l) sont identiques ; les règles très spécifiques de sudoers demandent un test (visudo -c).
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuels :
man chmod,man chown,man sudo,man adduser, Documentation Ubuntu-fr : droits - Suite : Paquets et logiciels