Linux sans magie #6 — Propriétaire, groupe et droits : qui peut faire quoi sur un fichier ?
Comprendre le propriétaire, le groupe et les droits Linux avec ls -l, whoami, id, chgrp et chown, dans un lab simple et reproductible.
Dans l’article précédent, nous avons appris à lire une chaîne comme -rw-r--r--.
Nous savons maintenant que les neuf caractères de permissions se découpent en trois groupes : propriétaire, groupe et autres utilisateurs.
Mais une question reste entière : qui est exactement ce propriétaire, et à quoi correspond ce groupe ?
C’est ce que nous allons clarifier aujourd’hui.
L’objectif n’est pas d’apprendre une nouvelle série de commandes par cœur. Nous allons surtout relier trois informations que Linux affiche déjà ensemble : le propriétaire, le groupe et les permissions.
Contexte et problème
Regardons un fichier classique :
ls -l rapport.txt
Vous pourriez obtenir :
-rw-r--r-- 1 alex equipe 1250 Sep 7 09:10 rapport.txt
Dans l’article précédent, nous nous sommes concentrés sur :
-rw-r--r--
Mais juste après apparaissent deux noms : alex et equipe.
Ils ne sont pas décoratifs.
Dans cet exemple, alex est le propriétaire du fichier et equipe est le groupe associé au fichier.
Les permissions doivent donc être lues avec ces deux informations.
Autrement dit, Linux ne dit pas simplement qu’un fichier est lisible ou modifiable. Il indique précisément quels droits s’appliquent au propriétaire, quels droits s’appliquent au groupe et quels droits s’appliquent aux autres utilisateurs.
Concept ou architecture
Prenons :
-rw-r----- 1 alex equipe 1250 Sep 7 09:10 rapport.txt
Découpons les permissions :
rw- r-- ---
Nous pouvons maintenant les rattacher aux personnes concernées :
alex → rw-
equipe → r--
autres → ---
Cela signifie que alex, le propriétaire, peut lire et écrire le fichier. Les utilisateurs concernés par le groupe equipe disposent du droit de lecture. Les autres utilisateurs n’ont aucun droit accordé par ces bits de permissions.
C’est cette relation qu’il faut comprendre : identité + groupe + permissions = décision d’accès.
Linux conserve pour chaque fichier un identifiant de propriétaire et un identifiant de groupe. Les outils comme ls -l les affichent généralement sous forme de noms plus faciles à lire.
Prérequis
Ce lab doit être réalisé avec votre utilisateur normal.
Nous n’avons besoin ni de créer un nouvel utilisateur, ni de modifier les comptes de la machine.
Les commandes utilisées seront whoami, id, ls -l, touch, chgrp et chown.
Nous utiliserons surtout chgrp. chown sera également observé, mais nous éviterons de changer réellement le propriétaire vers un autre utilisateur afin de ne pas introduire inutilement les privilèges administratifs à ce stade de la série.
Mise en pratique
Créez un nouveau terrain de jeu :
cd
mkdir linux-sans-magie-lab
cd linux-sans-magie-lab
touch rapport.txt
Vérifiez :
ls -l rapport.txt
Vous devriez obtenir quelque chose ressemblant à :
-rw-r--r-- 1 alex alex 0 Sep 7 09:15 rapport.txt
Les noms et la date varieront évidemment sur votre machine.
Identifier son utilisateur
Tapez :
whoami
Exemple :
alex
La commande répond à une question simple : quel utilisateur suis-je actuellement ?
Vérifiez maintenant davantage d’informations :
id
Vous pourriez obtenir :
uid=1000(alex) gid=1000(alex) groups=1000(alex),27(sudo),1001(equipe)
Ne cherchez pas encore à mémoriser toute cette ligne.
Retenez simplement que uid correspond à votre identité utilisateur, gid à votre groupe principal et groups aux groupes auxquels votre session appartient.
Les numéros sont des identifiants internes ; les noms entre parenthèses sont plus faciles à utiliser pour nous.
Relier id et ls -l
Relancez :
ls -l rapport.txt
Exemple :
-rw-r--r-- 1 alex alex 0 Sep 7 09:15 rapport.txt
Le premier nom après les informations techniques correspond au propriétaire. Le second correspond au groupe du fichier.
Nous pouvons donc lire la ligne ainsi : propriétaire alex, groupe alex, permissions du propriétaire rw-, permissions du groupe r--, permissions des autres r--.
C’est exactement la même chaîne de permissions qu’avant, mais elle a maintenant un contexte.
Modifier le groupe d’un fichier
Regardez les groupes auxquels vous appartenez :
id
Supposons que vous voyiez un groupe nommé equipe.
Nous pouvons tenter d’associer le fichier à ce groupe :
chgrp equipe rapport.txt
Puis vérifiez :
ls -l rapport.txt
Vous pourriez obtenir :
-rw-r--r-- 1 alex equipe 0 Sep 7 09:15 rapport.txt
Le propriétaire n’a pas changé. Seul le groupe est devenu equipe.
Résultat attendu
Avant :
-rw-r--r-- 1 alex alex 0 Sep 7 09:15 rapport.txt
Après :
-rw-r--r-- 1 alex equipe 0 Sep 7 09:15 rapport.txt
Les permissions sont exactement les mêmes.
Pourtant, leur signification opérationnelle a changé : le bloc du milieu, ici r--, s’applique désormais au groupe equipe.
C’est un point essentiel : modifier le groupe sans modifier les bits rwx peut déjà changer les personnes auxquelles ces droits s’appliquent.
Provoquer une erreur contrôlée
Essayons maintenant d’utiliser un groupe auquel votre utilisateur n’appartient pas.
Commencez par vérifier vos groupes :
id
Choisissez uniquement un nom de groupe existant sur votre système mais absent de votre liste.
Puis tentez :
chgrp nom-du-groupe rapport.txt
Vous pouvez obtenir un refus ressemblant à :
Operation not permitted
Le message exact dépend du système et de la locale.
Ce refus est utile : il montre qu’un utilisateur ne peut pas simplement rattacher ses fichiers à n’importe quel groupe.
Ne cherchez pas à contourner cette erreur avec sudo. Ici, l’erreur est le lab.
Vérification
Lorsque quelque chose ne fonctionne pas, utilisez cette séquence :
whoami
id
ls -l rapport.txt
Puis posez-vous trois questions en texte normal : qui suis-je ? à quels groupes est-ce que j’appartiens ? quel est actuellement le propriétaire et le groupe du fichier ?
Vous avez déjà les informations nécessaires pour comprendre une grande partie du problème.
Et chown ?
La commande chown signifie essentiellement change owner.
Sa syntaxe permet de modifier le propriétaire :
chown utilisateur fichier
Elle peut également exprimer propriétaire et groupe ensemble :
chown utilisateur:groupe fichier
Mais nous n’allons pas exécuter ici :
chown autre-utilisateur rapport.txt
avec notre compte normal.
Sous Linux, changer librement le propriétaire d’un fichier vers un autre utilisateur est une opération privilégiée. Nous garderons donc cette commande en observation pour le moment.
Le but de la série est de comprendre ce que l’on fait avant d’ajouter des privilèges administratifs.
Un piège classique : confondre propriétaire et utilisateur courant
Regardez :
-rw-r----- 1 pierre equipe 800 Sep 7 10:00 config.txt
Supposons maintenant que vous soyez connecté en tant que alex.
Le premier bloc rw- ne signifie pas qu’Alex a lecture et écriture parce qu’Alex est l’utilisateur courant.
Il signifie que le propriétaire du fichier possède lecture et écriture. Ici, le propriétaire est pierre.
C’est très important.
Dans chmod, la lettre u désigne le propriétaire du fichier, pas automatiquement la personne qui tape la commande.
Voilà pourquoi ls -l, whoami et id fonctionnent si bien ensemble pour diagnostiquer un problème d’accès.
Bonnes pratiques
Quand un fichier semble inaccessible, commencez par observer avant de modifier quoi que ce soit.
Utilisez :
whoami
id
ls -l fichier
Évitez de commencer immédiatement par chmod ou chown.
Un problème que l’on prend pour une mauvaise permission peut simplement venir du fait que le fichier appartient à un autre utilisateur ou à un autre groupe.
Ne modifiez pas récursivement propriétaire ou groupe d’un grand répertoire simplement pour résoudre rapidement un Permission denied. Une commande récursive mal ciblée peut modifier un grand nombre de fichiers.
Sécurité
Le propriétaire et le groupe participent directement au contrôle d’accès.
Attribuer un fichier au mauvais groupe peut donner accès à des utilisateurs qui n’en ont pas besoin. À l’inverse, associer un fichier au mauvais propriétaire ou au mauvais groupe peut empêcher une application de fonctionner.
C’est particulièrement important sur les serveurs où des services utilisent leurs propres comptes système.
Plus tard dans la série, nous rencontrerons des fichiers appartenant à des comptes de service. La même logique s’appliquera toujours : qui possède le fichier, quel groupe lui est associé, et quels droits ces catégories reçoivent-elles ?
Coûts
Aucun coût particulier n’est associé à ce lab.
Nous travaillons uniquement avec les fonctions natives du système de fichiers Linux.
Limites et points de vigilance
Les permissions classiques propriétaire/groupe/autres ne sont pas toujours le seul mécanisme impliqué.
Des ACL, des politiques de sécurité supplémentaires, des attributs de fichiers ou certaines caractéristiques du système de fichiers peuvent modifier le comportement observé.
Nous les étudierons plus tard.
Autre point important : le groupe attribué automatiquement à un nouveau fichier peut dépendre du contexte, notamment du répertoire parent et de la configuration du système. Il ne faut donc pas transformer l’exemple de ce lab en règle universelle disant que le groupe d’un fichier sera toujours le groupe principal de son créateur.
Rollback ou nettoyage
Si vous avez modifié le groupe de rapport.txt, remettez son groupe d’origine si nécessaire avec votre groupe principal :
chgrp "$(id -gn)" rapport.txt
Vérifiez :
ls -l rapport.txt
Puis revenez dans votre répertoire personnel :
cd
Supprimez uniquement notre environnement de test :
rm -r linux-sans-magie-lab
Vérifiez :
ls
Le répertoire linux-sans-magie-lab ne doit plus apparaître.
Références officielles
- GNU Coreutils —
chown: Change file owner and group : https://www.gnu.org/software/coreutils/manual/html_node/chown-invocation.html - GNU Coreutils — Changing file attributes : https://www.gnu.org/software/coreutils/manual/html_node/Changing-file-attributes.html
- Linux man-pages —
chown(1): https://man7.org/linux/man-pages/man1/chown.1.html - Linux man-pages —
chown(2): https://man7.org/linux/man-pages/man2/chown.2.html
Conclusion
Une ligne comme :
-rw-r----- 1 alex equipe rapport.txt
contient maintenant beaucoup plus d’informations qu’auparavant.
Vous savez lire non seulement les droits, mais également à qui ils s’appliquent.
Le propriétaire reçoit le premier bloc. Le groupe reçoit le deuxième. Les autres utilisateurs reçoivent le troisième.
Et surtout, vous avez maintenant une méthode de diagnostic simple :
whoami
id
ls -l fichier
Avant de modifier des permissions, commencez par comprendre qui vous êtes, qui possède le fichier et quel groupe est concerné.
Dans le prochain article de la séquence, nous passerons à un cas très concret : Linux sans magie #7 — Exécutable ou simple fichier : pourquoi un script ne se lance pas toujours.
