Dans les systèmes d'exploitation Unix et similaires , chmod est la commande et l'appel système utilisés pour modifier les autorisations d'accès et les indicateurs de mode spéciaux (les indicateurs setuid , setgid et sticky ) des objets du système de fichiers ( fichiers et répertoires ). Collectivement, ils étaient à l'origine appelés ses modes , et le nom chmod a été choisi comme abréviation de ch ange mod e .
Histoire
Une commande chmod est apparue pour la première fois dans la version 1 d'AT&T Unix , avec l' appel système chmod .
À mesure que le nombre de systèmes et les types d'utilisateurs ont augmenté, des listes de contrôle d'accès ont été ajoutées à de nombreux systèmes de fichiers en plus de ces modes les plus basiques pour augmenter la flexibilité.
La version de chmod intégrée dans GNU coreutils a été écrite par David MacKenzie et Jim Meyering. La commande est disponible sous forme de package séparé pour Microsoft Windows dans le cadre de la collection UnxUtils de ports Win32 natifs d'utilitaires courants de type GNU Unix. La commande chmod a également été portée sur le système d'exploitation IBM i .
Syntaxe de commande
Tout au long de cette section, user fait référence au propriétaire du fichier, pour rappeler que la forme symbolique de la commande utilise « u », pour éviter toute confusion avec « autre ».
Notez que seul l' utilisateur ou le superutilisateur (root) est en mesure de modifier les autorisations des fichiers.
chmod [options] mode[,mode] file1 [file2 ...]
Les options généralement mises en œuvre incluent :
-RRécursif, c'est-à-dire inclure les objets dans les sous-répertoires.-vverbeux, afficher les objets modifiés (les objets inchangés ne sont pas affichés).
Si un lien symbolique est spécifié, l'objet cible est affecté. Les modes de fichier directement associés aux liens symboliques eux-mêmes ne sont généralement pas utilisés.
Pour visualiser le mode fichier, les commandes lsou statpeuvent être utilisées :
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 personnel allemand 823 16 décembre 15:03 findPhoneNumbers.sh $ stat -c %a findPhoneNumbers.sh 754
Les r, wet xspécifient respectivement l'accès en lecture, en écriture et en exécution. Le premier caractère de l' affichage ls -l indique le type d'objet ; un trait d'union représente un fichier simple. Le script findPhoneNumbers.sh peut être lu, écrit et exécuté par l'utilisateur dgerman ; lu et exécuté par les membres du groupe staff ; et lu uniquement par les autres utilisateurs.
Les principales parties des permissions chmod :
Par exemple:rwxr-x---
Chaque groupe de trois personnages définit des permissions pour chaque classe :
- les trois caractères les plus à gauche,
rwx, définissent les autorisations pour la classe User (c'est-à-dire le propriétaire du fichier). - les trois caractères du milieu,
r-x, définissent les autorisations pour la classe Group (c'est-à-dire le groupe propriétaire du fichier) - les trois caractères les plus à droite,
---, définissent les autorisations pour la classe Autres . Dans cet exemple, les utilisateurs qui ne sont pas le propriétaire du fichier et qui ne sont pas membres du groupe (et, par conséquent, sont dans la classe Autres ) n'ont pas l'autorisation d'accéder au fichier.
Autorisations numériques
Le format numérique chmod accepte jusqu'à quatre chiffres. Les trois chiffres les plus à droite définissent les autorisations pour l'utilisateur du fichier, le groupe et les autres. Le chiffre de tête facultatif, lorsque 4 chiffres sont donnés, spécifie les indicateurs spéciaux setuid , setgid et sticky . Chaque chiffre des trois chiffres les plus à droite représente une valeur binaire, qui contrôle respectivement les autorisations « lecture », « écriture » et « exécution ». Une valeur de 1 signifie qu'une classe est autorisée à effectuer cette action, tandis qu'une valeur de 0 signifie qu'elle est interdite.
Par exemple, 754cela permettrait :
- « lire » (4), « écrire » (2) et « exécuter » (1) pour la classe User ; c'est-à-dire 7 (4 + 2 + 1).
- « lire » (4) et « exécuter » (1) pour la classe Groupe ; c'est-à-dire 5 (4 + 1).
- Uniquement « lire » (4) pour la classe Autres .
Un code numérique permet l'exécution si et seulement s'il est impair (c'est-à-dire 1, 3, 5ou 7). Un code numérique permet la « lecture » si et seulement s'il est supérieur ou égal à 4(c'est-à-dire 4, 5, 6ou 7). Un code numérique permet l'« écriture » si et seulement s'il est 2, 3, 6ou 7.
Exemple numérique
Modifiez les autorisations pour permettre aux programmeurs de mettre à jour un fichier :
$ ls -l Fichier -rw-r--r-- 1 jsmith programmers 57 3 juil. 10:13 Fichier $ chmod 664 Fichier $ ls -l Fichier -rw-rw-r-- 1 jsmith programmers 57 3 juil. 10:13 Fichier
Étant donné que les bits setuid , setgid et sticky ne sont pas spécifiés, cela équivaut à :
$ chmod 0664 Fichier
Modes symboliques
La commande chmod accepte également une notation symbolique plus fine, qui permet de modifier des modes spécifiques tout en laissant les autres modes intacts. Le mode symbolique est composé de trois composants, qui sont combinés pour former une seule chaîne de texte :
$ chmod [ références ][ opérateur ][ modes ] fichier ...
Les classes d'utilisateurs sont utilisées pour distinguer à qui s'appliquent les autorisations. Si aucune classe n'est spécifiée, « toutes » est implicite. Les classes sont représentées par une ou plusieurs des lettres suivantes :
Le programme chmod utilise un opérateur pour spécifier comment les modes d'un fichier doivent être ajustés. Les opérateurs suivants sont acceptés :
Les modes indiquent quelles autorisations doivent être accordées ou supprimées pour les classes spécifiées. Il existe trois modes de base qui correspondent aux autorisations de base :
Plusieurs modifications peuvent être spécifiées en séparant plusieurs modes symboliques par des virgules (sans espaces). Si aucun utilisateur n'est spécifié, chmodle masque de saisie sera vérifié et l'effet sera comme si « a » était spécifié, sauf que les bits définis dans le masque de saisie ne sont pas affectés.
Exemples symboliques
- Ajoutez l'autorisation d'écriture ( w ) aux modes d'accès du groupe ( g ) d'un répertoire, permettant aux utilisateurs du même groupe d'ajouter des fichiers :
$ ls -ld dir # afficher les modes d'accès avant chmod drwxr-xr-x 2 jsmitt northregion 96 8 avril 12:53 shared_dir $ chmod g+w dir $ ls -ld dir # afficher les modes d'accès après chmod drwxrwxr-x 2 jsmitt northregion 96 8 avril 12:53 shared_dir
- Supprimez les autorisations d'écriture ( w ) pour toutes les classes ( a ), empêchant quiconque d'écrire dans le fichier :
$ ls -l notreMeilleurFichierRéférence -rw-rw-r-- 2 tmiller northregion 96 8 avr. 12:53 notreMeilleurFichierRéférence $ chmod a-w notreMeilleurFichierRéférence $ ls -l notreMeilleurFichierRéférence -r--r--r-- 2 tmiller northregion 96 8 avr. 12:53 notreMeilleurFichierRéférence
- Définissez les autorisations pour l' utilisateur et le groupe ( ug ) pour lire et exécuter ( rx ) uniquement (aucune autorisation d'écriture) sur referenceLib , empêchant quiconque d'ajouter des fichiers.
$ ls -ld referenceLib drwxr----- 2 ebowman northregion 96 8 avril 12:53 referenceLib $ chmod ug = rx referenceLib $ ls -ld referenceLib dr-xr-x--- 2 ebowman northregion 96 8 avril 12:53 referenceLib
- Ajoutez les autorisations de lecture et d'écriture aux classes utilisateur et groupe d'un fichier ou d'un répertoire nommé sample :
$ chmod ug+rw échantillon $ ls-ldéchantillon drw-rw---- 2 rsanchez budget 96 8 déc. 12:53 échantillon
- Supprimez toutes les autorisations, ne permettant à personne de lire, d'écrire ou d'exécuter le fichier nommé sample sans aucune fin utile.
$ chmod a-rwx échantillon $ ls-léchantillon ---------- 2 rswven planification 96 8 déc. 12:53 échantillon
- Modifiez les autorisations de l'utilisateur et du groupe en lecture et exécution uniquement (aucune autorisation d'écriture) sur l'échantillon .
$ # Exemple d'autorisations de fichier avant la commande $ ls -ld sample drw-rw---- 2 oschultz warehousing 96 8 déc. 12:53 NY_DBs $ chmod ug = rx sample $ ls -ld sample dr-xr-x--- 2 oschultz warehousing 96 8 déc. 12:53 NJ_DBs
- Définissez l'élément accessible en écriture pour l' utilisateur tout en le rendant accessible en lecture seule pour toute autre personne avec une seule commande :
$ chmod u = rw,go = r échantillon $ ls -ld échantillon drw-r--r-- 2 oschultz warehousing 96 8 déc. 12:53 échantillon
Modes spéciaux
La commande chmod permet également de modifier les autorisations supplémentaires ou les modes spéciaux d'un fichier ou d'un répertoire. Les modes symboliques utilisent « s » pour représenter les modes setuid et setgid , et « t » pour représenter le mode sticky . Les modes ne s'appliquent qu'aux classes appropriées, que d'autres classes soient spécifiées ou non.
La plupart des systèmes d'exploitation prennent en charge la spécification de modes spéciaux sous forme numérique, notamment en octal, mais certains ne le font pas. Sur ces systèmes, seuls les modes symboliques peuvent être utilisés.