Qu’est-ce que chmod ?

Le programme en ligne de commandes chmod, forme courte de « change mode », a été introduit au début des années 1970 avec la première version d’AT&T Unix. Dans les systèmes d’exploitation multi-utilisateurs de type Unix, il sert à attribuer les droits d’accès dans les systèmes de fichiers qui prennent en charge les autorisations Linux classiques. En général, cela vaut pour les serveurs qui fonctionnent sur tous les systèmes standards de fichiers dans les systèmes Linux dérivés d’Unix. Pour modifier les attributs d’un fichier via le chmod, vous devez soit être le propriétaire du fichier, soit disposer des droits root.

La majorité des serveurs Web utilisent des distributions du système d’exploitation unixoïde Linus telles que Ubuntu. Tous les dérivés d’Unix ont en commun le fait que des droits d’accès spécifiques sont attribués à des fichiers ainsi qu’à des répertoires. Il est possible de les changer grâce à chmod, un programme en ligne de commandes, qui peut être activé dans le terminal via la commande du même nom.

Comment utiliser chmod ?

Ce système de droits de fichiers sous Unix se base sur des catégories d’utilisateurs ainsi que sur des droits de base affectés de manière individuelle. Chmod prend en charge deux modes différents : une notation symbolique, qui utilise des lettres, et une autre basée sur des nombres en octal. Comme déjà indiqué, seul le propriétaire du fichier ou l’utilisateur root (de l’anglais racine) peut changer ces droits d’accès via la commande chmod. La commande dans la ligne correspond à la syntaxe suivante :

$ chmod options mode file

La commande chmod est suivie de l’élément facultatif « options ». C’est grâce à lui que d’autres options de la commande chmod sont définies. L’élément « mode » représente un attribut qui est appliqué sur le « file » suivant, soit un fichier ou un dossier. Ce masque définit les permissions : il permet de savoir si une catégorie d’utilisateurs peut recevoir de nouveaux droits d’accès ou si leurs droits qui leur ont déjà été attribués leur sont retirés.

Quels sont les modes chmod disponibles ?

D’après le système de fichiers sous Unix, tous les fichiers ont des droits d’accès individuels sur un serveur Linux. Cela vaut aussi pour les répertoires. Cette règle du droit d’accès s’effectue toujours sur les trois catégories suivantes d’utilisateurs :

Propriétaire (user)

Habituellement, un utilisateur qui crée un fichier dans un système de fichiers Unix est automatiquement défini en tant que « user » du fichier. La propriété peut être changée par la suite par la commande « chown ».

Groupe (group)

La catégorie d'utilisateurs « group » combine différents comptes d'utilisateurs sur le serveur. Dans les systèmes de fichiers unixoïdes, chaque compte d'utilisateur est automatiquement affecté à un groupe principal, mais il est également possible d'appartenir à d'autres groupes. L'affectation de groupes de fichiers peut être configurée à la fois par le propriétaire et l'utilisateur root via la commande « chgrp ».

Autres utilisateurs (others)

La classe d'utilisateurs « others » comprend tous les utilisateurs qui ne sont ni propriétaires du fichier ni membres d'un groupe ayant des droits d'accès.

Comme nous l’avons déjà mentionné, il existe deux modes différents de réglage des droits : le mode symbolique et le mode octal, dont les principales caractéristiques seront brièvement résumées dans les sections suivantes.

Mode symbolique

En mode symbolique, des lettres sont attribuées aux différentes catégories d’utilisateurs et aux différents droits d’accès. En combinant ces lettres, il est ainsi facile de préciser quels droits doivent être ajoutés ou supprimés. Le tableau suivant résume les lettres de balisage pour les utilisateurs et les droits dans le cadre de la notation symbolique :

Lettres pour les droits d‘accès

Signification

r

Droit de lecture ; aussi indiqué R-Bit

w

Droit d‘écriture ; aussi indiqué W-Bit

x

Droit d‘exécution ; aussi indiqué X-Bit

Lettres pour les catégories d‘utilisateurs

Signification

u

Catégorie d‘utilisateur « user », propriétaire

g

Catégorie d‘utilisateur « group », groupe

o

Catégorie d‘utilisateur « others », autres utilisateurs

a

« all » : la commande concerne toutes les catégories d’utilisateurs.

Si le masque de droits est créé selon la notation symbolique, les opérateurs suivants sont utilisés pour relier les catégories d'utilisateurs respectives aux droits des fichiers :

+

L'opérateur « + » est utilisé pour attribuer de nouveaux droits de fichier à une catégorie d'utilisateurs. Seuls les droits des fichiers concernés sont écrasés.

-

L'opérateur « - »  supprime un droit de fichier d'une catégorie d'utilisateurs.

=

Si les droits sur les fichiers doivent être définis pour une catégorie d'utilisateurs indépendamment de ses droits antérieurs, l'opérateur « = » est utilisé. 

Si, par exemple, un fichier « exemple.txt » qui vient d'être introduit doit être modifié de manière à ce que non seulement le propriétaire (user) mais aussi tous les autres utilisateurs (group, others) aient la permission de lire et d'écrire, la commande chmod ressemblerait à ceci :

$ chmod ugo+rw exemple.txt

Une autre possibilité serait de faire référence à toutes les catégories d'utilisateurs :

$ chmod a+rw exemple.txt

Lorsqu'il est appelé dans le terminal, le fichier « exemple.txt » affiche désormais l’autorisation de droits suivante au lieu des droits d'accès originaux :

Droits d’accès avant la modification

Commande chmod exécutée

Droits d’accès après la modification

-rw-------

a+rw

-rw-rw-rw-

user: lire, écrire

group: pas de droits

other: pas de droits

a = tous

+ = ajouter des droits d’accès

r = lire

w = écrire

user: lire, écrire

group: lire, écrire

other: lire, écrire

Mode octal

La notation symbolique est descriptive, mais elle est difficile à manier lorsqu'elle est utilisée fréquemment. De nombreux administrateurs utilisent donc la notation octale lors de l'attribution des droits d'accès. Il s'agit d'une séquence de trois chiffres, chaque chiffre représentant une catégorie d'utilisateur du serveur. La notation octale est basée sur la séquence standard :

Position des chiffres selon la catégorie d’utilisateurs

Signification

1

Correspond à la catégorie d’utilisateurs « propriétaire » (user)

2

Correspond à la catégorie d’utilisateurs « groupe » (group)

3

Correspond à la catégorie d’utilisateurs « autres » (others)

Les droits d'accès attribués aux différentes catégories d'utilisateurs sont déterminés par la valeur de chaque chiffre. Elle est calculée à partir de la somme des valeurs individuelles attribuées aux droits respectifs :

Valeur droits d’accès

Signification

4

Lire

2

Ecrire

1

Exécuter

0

Aucun droit

En fonction de cette affectation, les combinaisons de valeurs suivantes pour les droits d'accès sont obtenues :

Valeur

Droit(s) d’accès

0

Aucun

1

Seulement exécuter

2

Seulement écrire

3

Ecrire/exécuter

4

Seulement lire

5

Lire/exécuter

6

Lire/écrire

La notation octale est également mieux illustrée par un exemple. En supposant que le propriétaire du fichier d'exemple « exemple.txt » ait également l'intention d'accorder des droits de lecture au groupe « groupeexemple », le code octal suivant serait utilisé :

$ chmod 640 exemple.txt

Avec la valeur 6 à la première position du masque de droits, le propriétaire conserve les droits d'accès maximum : 4 (lecture) + 2 (écriture). La deuxième valeur du masque de droits spécifie les droits d'accès du groupe : 4 (lire). Aucun droit n'est prévu pour les autres utilisateurs, qui sont marqués en troisième position, qui est donc codée avec un 0.

Options de la commande chmod

Qu'il choisisse la notation symbolique ou numérique, l'utilisateur dispose de plusieurs options pour l'attribution des droits d'accès. Ils sont insérés dans la ligne de commande entre le masque de commande et le masque de droits.

Code

Option

Signification

-R

recursive

La modification des droits d’accès s’applique à tous les fichiers et sous-répertoires d’un dossier.

-v

verbose

Suite à la ligne de commande, un diagnostic est émis pour tous les fichiers traités.

-c

changes

Suite à la ligne de commande, un diagnostic est émis par tous les fichiers qui ont changé.

-f

silent

Les messages d’erreur sont supprimés.

L'exemple suivant montre une ligne de commande où la modification des droits d'accès se réfère de manière récurrente aux sous-répertoires et aux fichiers du dossier :

$ chmod -R 744 dossierexemple

La règle suivante s'applique à tous les fichiers et sous-dossiers du répertoire « dossierexemple » : le propriétaire obtient des droits d'accès complets (7), les membres du groupe et les autres utilisateurs ont un accès en lecture seule (4).

Application de chmod démontrée par un exemple

Enfin, l'utilisation du chmod sera à nouveau clarifiée à l'aide d'un exemple concret.

Toutefois, la démonstration commencera par une inspection générale des droits actuellement attribués. Cela fonctionne dans les systèmes Linux/Unix au moyen de la commande « ls », après quoi le contenu du répertoire appelé est affiché. Si le paramètre « -l » est ajouté, les différents fichiers sont affichés sous forme de liste clairement organisée :

ls -l

Une sortie possible pour cette commande, qui est choisie comme exemple dans ce cas, pourrait ressembler à ce qui suit :

insgesamt 3
-rwx------  1 det det    0 2020-02-02 10:41 Fichier1.txt
-rw-rw-r--  1 det det    0 2020-02-02 10:41 Fichier2.txt
drwxr-xr-x  2 det det 4096 2020-02-02 10:44 Répertoire

Ainsi, deux fichiers (« Fichier1.txt » et « Fichier2.txt ») et un répertoire (« Répertoire ») peuvent être trouvés sous le chemin recherché. Chaque entrée individuelle commence par un bloc de dix caractères, ce qui est particulièrement intéressant dans ce cas car il fournit des informations sur les droits d'accès aux fichiers ou au répertoire :

Le caractère indique en premier lieu ce qu'il est exactement. Dans le cas d'un dossier simple, le signe moins y apparaît, comme dans les deux premiers postes. Un « d » (pour directory soit « répertoire » en français) indique les annuaires, dans le cas des liens, il y aurait un « l » (pour lien).

Elle est suivie des trois blocs décisifs - chacun de trois caractères - qui informent sur les droits d'accès actuels. Ici, l'ordre déjà connu de la notation octale s'applique : le bloc 1 représente le propriétaire, le bloc 2 la catégorie d'utilisateurs « groupe », le bloc 3 tous les autres utilisateurs. Même à l'intérieur des différents blocs, l'ordre est toujours le même :

  • le premier chiffre indique si l'accès en lecture (r) est disponible,
  • le chiffre 2 donne des informations sur l'accès en écriture (w)
  • et le troisième caractère d'un bloc de trois indique si la catégorie d'utilisateurs respective a également les droits d'exécution (x).

Si la lettre est fixée, les droits correspondants sont accordés. Sinon, il y a un signe moins à la position respective. Pour les deux fichiers et le répertoire, cela signifie ce qui suit :

Fichier1.txt

Propriétaire

Groupe

Autre utilisateur

Lire

x

x

Ecrire

x

x

Exécuter

x

x

Fichier2.txt

Propriétaire

Groupe

Autre utilisateur

Lire

Ecrire

x

Exécuter

x

x

x

Répertoire

Propriétaire

Groupe

Autre utilisateur

Lire

Ecrire

x

x

Exécuter

Exemple chmod : ajouter de nouveaux droits

Dans un premier exemple d'application pour le chmod, les droits de lecture et d'exécution pour le fichier1.txt, qui étaient jusqu'à présent réservés au propriétaire, doivent maintenant être activés pour toutes les catégories d'utilisateurs. La commande chmod appropriée (notation symbolique) est la suivante :

chmod a+rx Fichier1.txt

Toutes les catégories d'utilisateurs (a) se voient attribuer de nouveaux droits (+) pour le document Fichier1.txt, à savoir le droit de lire (r) et d'exécuter (x) ce fichier.

Si vous regardez la liste des droits cédés, l'entrée pour File1.txt ressemble à ceci

-rwxr-xr-x  1 det det    0 2020-02-02 10:41 Datei1.txt

Exemple chmod : la révocation des droits

Dans le deuxième exemple de démonstration, l'accès en écriture au Fichier2.txt pour tous les utilisateurs, c'est-à-dire également pour le propriétaire et pour la catégorie d'utilisateurs « groupe », doit être retiré via chmod. L'entrée correspondante (à nouveau en notation symbolique) ressemble à ce qui suit :

chmod a-w Fichier2.txt

Dans cet exemple de chmod, la commande fait également référence à toutes les catégories d'utilisateurs (a). La permission d'écriture (w) pour le Fichier2.txt est retirée (-) à tous les utilisateurs. La nouvelle entrée pour le dossier ressemblera à ceci par la suite :

-r--r--r--  1 det det    0 2020-02-02 10:41 Fichier2.txt