Que sont les modes chmod octaux et symboliques ?

chmod définit les permissions d’un fichier sous Linux, macOS et d’autres systèmes Unix, et accepte deux notations. Un mode octal tel que 755 comporte un chiffre pour le propriétaire, le groupe et tous les autres utilisateurs, où la lecture vaut 4, l’écriture 2 et l’exécution 1. Un mode symbolique tel que u=rwx,g=rx,o=rx nomme plutôt les classes (u pour le propriétaire, g pour le groupe, o pour les autres, a pour tous) et les permissions (r, w, x).

Les modes symboliques peuvent également modifier les permissions au lieu de toutes les définir : u+x ajoute la permission d’exécution au propriétaire, go-w retire la permission d’écriture au groupe et aux autres, et g=u copie les permissions du propriétaire vers le groupe. Un mode octal définit toujours chaque permission ; le résultat octal d’une modification dépend donc du mode que possédait le fichier auparavant.

Description de l’outil

Cet outil convertit les modes chmod entre les notations octale et symbolique. Sélectionnez la notation source et la notation cible, ou laissez la source en détection automatique : saisissez 755 pour obtenir u=rwx,g=rx,o=rx, ou saisissez un mode symbolique pour obtenir la valeur octale. Pour des modifications comme u+x ou a+X, saisissez le mode actuel du fichier et voyez le mode que chmod lui laisserait. Vous pouvez également coller une chaîne de permissions provenant de ls -l, telle que -rwxr-xr-x, ou une commande chmod complète.

Exemples

Octal Symbolique ls -l Utilisation courante
644 u=rw,go=r -rw-r--r-- Fichiers ordinaires
755 u=rwx,go=rx -rwxr-xr-x Scripts, programmes et répertoires
600 u=rw,go= -rw------- Fichiers privés tels que les clés SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Répertoires partagés conservant leur groupe
1777 a=rwx,+t drwxrwxrwt /tmp et autres répertoires temporaires partagés
4755 u=rwxs,go=rx -rwsr-xr-x Programmes tels que passwd

Fonctionnalités

  • Convertit les modes octaux en modes symboliques et inversement, avec un bouton d’inversion pour changer de direction
  • Détecte la notation du mode saisi ou effectue la conversion depuis la notation sélectionnée
  • Applique des modifications relatives telles que u+x, go-w, a=r,u+w, g=u et a+X à un mode actuel
  • Gère setuid, setgid et le sticky bit (s, t et les modes octaux à 4 chiffres)
  • Écrit le mode symbolique au format complet (u=rwx,g=rx,o=rx) ou compact (u=rwx,go=rx)
  • Lit et écrit les chaînes de permissions de ls -l, y compris s, S, t et T
  • Accepte les commandes collées telles que sudo chmod -R 755 dir
  • Indique le caractère exact lorsqu’un mode n’est pas valide

Fonctionnement

Un mode octal se lit comme un nombre comportant jusqu’à quatre chiffres : le premier chiffre, facultatif, contient setuid (4), setgid (2) et le sticky bit (1), tandis que les trois autres contiennent les permissions du propriétaire, du groupe et des autres utilisateurs. Un mode symbolique se lit clause par clause, conformément à la grammaire POSIX, et s’applique au mode actuel comme le fait GNU chmod sous Linux :

  • + ajoute des permissions, - les retire et = les définit en effaçant le reste pour les classes indiquées.
  • X ajoute la permission d’exécution uniquement aux répertoires et aux fichiers qui accordent déjà la permission d’exécution à au moins un utilisateur.
  • s définit setuid avec u et setgid avec g. t définit le sticky bit avec o, a ou sans classe.
  • Sans classe, comme dans +x, la modification s’applique à tout le monde, à l’exception des bits bloqués par l’umask.
  • Pour les répertoires, setuid et setgid restent inchangés à moins que le mode ne les indique, comme dans g-s.

La sortie symbolique définit explicitement chaque bit ; elle produit donc le même résultat sur un fichier, quel que soit le mode que celui-ci possédait auparavant. Le sticky bit est écrit sous la forme d’une clause +t distincte, car GNU et BSD chmod l’acceptent tous deux sous cette forme.

Conseils

  • Utilisez a+X avec chmod -R pour rendre les répertoires parcourables sans rendre chaque fichier exécutable.
  • chmod 755 sur un répertoire ne supprime pas setgid avec GNU chmod. Utilisez chmod 00755 ou g-s pour le supprimer.
  • Ansible et de nombreux fichiers de configuration attendent un zéro initial, comme dans 0755. Activez « Toujours afficher 4 chiffres octaux » pour l’obtenir.
  • Un . ou un + après une chaîne ls -l indique un contexte SELinux ou une ACL. Utilisez getfacl pour afficher les entrées ACL, que le mode n’indique pas.