Commande Chmod sous Linux (Permissions de fichiers)

author
11 minutes, 44 seconds Read

Sous Linux, l’accès aux fichiers est géré par les permissions, les attributs et la propriété des fichiers. Cela garantit que seuls les utilisateurs et les processus autorisés peuvent accéder aux fichiers et aux répertoires.

Ce tutoriel couvre la façon d’utiliser la commande chmod pour modifier les autorisations d’accès des fichiers et des répertoires.

Les autorisations de fichiers sous Linux #

Avant d’aller plus loin, expliquons le modèle de base des autorisations de Linux.

Dans Linux, chaque fichier est associé à un propriétaire et à un groupe et assigné avec des droits d’accès de permission pour trois classes différentes d’utilisateurs :

  • Le propriétaire du fichier.
  • Les membres du groupe.
  • Autres (tout le monde).

La propriété du fichier peut être modifiée à l’aide des commandes chownet chgrp.

Il existe trois types d’autorisations de fichiers qui s’appliquent à chaque classe :

  • L’autorisation de lecture.
  • L’autorisation d’écriture.
  • L’autorisation d’exécution.

Ce concept vous permet de spécifier quels utilisateurs sont autorisés à lire le fichier, à écrire dans le fichier ou à exécuter le fichier.

Les autorisations de fichier peuvent être consultées à l’aide de la commande ls:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type

Le premier caractère indique le type de fichier. Il peut s’agir d’un fichier ordinaire (-), d’un répertoire (d), d’un lien symbolique(l), ou de tout autre type de fichier spécial.

Les neuf caractères suivants représentent les permissions du fichier, trois triplets de trois caractères chacun. Le premier triplet indique les permissions du propriétaire, le deuxième les permissions du groupe, et le dernier les permissions de tout le monde. Les permissions peuvent avoir une signification différente selon le type de fichier.

Dans l’exemple ci-dessus (rw-r--r--) signifie que le propriétaire du fichier a des permissions de lecture et d’écriture (rw-), le groupe et les autres ont seulement des permissions de lecture (r--).

Chacun des trois triplets de permission peut être construit à partir des caractères suivants et avoir des effets différents, selon qu’ils sont définis sur un fichier ou sur un répertoire :

Effet des permissions sur les fichiers

Permission Caractère Signification sur le fichier
Lecture - Le fichier n’est pas lisible. Vous ne pouvez pas visualiser le contenu du fichier.
r Le fichier est lisible.
Ecriture - Le fichier ne peut pas être changé ou modifié.
w Le fichier peut être changé ou modifié.
Exécuter - Le fichier ne peut pas être exécuté.
x Le fichier peut être exécuté.
s Si on le trouve dans le triplet user, il active le bit setuid. S’il est trouvé dans le triplet group, il active le bit setgid. Cela signifie également que l’indicateur x est activé.
Lorsque les indicateurs setuid ou setgid sont activés sur un fichier exécutable, le fichier est exécuté avec les privilèges du propriétaire et/ou du groupe du fichier.
S Même chose que s mais l’indicateur x n’est pas activé. Ce drapeau est rarement utilisé sur les fichiers.
t Si on le trouve dans le triplet others, il active le bit sticky.
Il signifie également que le drapeau x est activé. Ce drapeau est inutile sur les fichiers.
T Même chose que t mais le drapeau x n’est pas mis. Ce drapeau est inutile sur les fichiers.

Effet des permissions sur les répertoires (Folders)

Sous Linux, les répertoires sont des types spéciaux de fichiers qui contiennent d’autres fichiers et répertoires.

Permission Caractère Signification sur le répertoire
Lecture - Le contenu du répertoire ne peut pas être montré.
r Le contenu du répertoire peut être affiché.
(Par exemple, vous pouvez énumérer les fichiers à l’intérieur du répertoire avec ls.)
Ecriture - Le contenu du répertoire ne peut pas être modifié.
w Le contenu du répertoire peut être modifié.
(par exemple, vous pouvez créer de nouveaux fichiers, supprimer des fichiers…etc.)
Exécuter - Le répertoire ne peut pas être modifié.
x Le répertoire peut être navigué en utilisant cd.
s Si on le trouve dans le triplet user, il active le bit setuid. S’il est trouvé dans le triplet group, il active le bit setgid. Cela signifie également que l’indicateur x est activé. Lorsque le drapeau setgid est activé sur un répertoire, les nouveaux fichiers créés à l’intérieur héritent de l’ID de groupe (GID) du répertoire, au lieu de l’ID de groupe primaire de l’utilisateur qui a créé le fichier.
setuid n’a aucun effet sur les répertoires.
S Même chose que s mais le drapeau x n’est pas activé. Ce drapeau est inutile sur les répertoires.
t Si on le trouve dans le triplet others, il active le bit sticky.
Il signifie également que le drapeau x est activé. Lorsque le bit sticky est activé sur un répertoire, seul le propriétaire du fichier, le propriétaire du répertoire ou l’utilisateur administratif peut supprimer ou renommer les fichiers dans le répertoire.
T Même chose que t mais le drapeau x n’est pas activé. Ce drapeau est inutile sur les répertoires.

Utilisation de chmod #

La commande chmod prend la forme générale suivante :

chmod MODE FILE...

La commande chmod vous permet de modifier les permissions sur un fichier en utilisant soit un mode symbolique ou numérique, soit un fichier de référence. Nous expliquerons les modes plus en détail plus loin dans cet article. La commande peut accepter un ou plusieurs fichiers et/ou répertoires séparés par un espace comme arguments.

Seulement root, le propriétaire du fichier ou l’utilisateur avec les privilèges sudo peut changer les permissions d’un fichier. Soyez très prudent lorsque vous utilisez chmod, en particulier lorsque vous modifiez les permissions de manière récursive.

Méthode symbolique (texte) #

La syntaxe de la commande chmod lors de l’utilisation du mode symbolique a le format suivant :

chmod perms… FILE...

Le premier ensemble de drapeaux (), drapeaux d’utilisateurs, définit quelles classes d’utilisateurs les permissions du fichier sont modifiées.

  • u – Le propriétaire du fichier.
  • g – Les utilisateurs qui sont membres du groupe.
  • o – Tous les autres utilisateurs.
  • a – Tous les utilisateurs, identique à ugo.

Si l’indicateur users est omis, celui par défaut est a et les permissions qui sont définies par umaskare ne sont pas affectées.

Le deuxième ensemble de drapeaux (), les drapeaux d’opération, définit si les permissions doivent être supprimées, ajoutées ou définies :

  • - Supprime les permissions spécifiées.
  • + Ajoute les permissions spécifiées.
  • = Change les permissions actuelles en permissions spécifiées. Si aucune permission n’est spécifiée après le symbole =, toutes les permissions de la classe d’utilisateur spécifiée sont supprimées.

Les permissions (perms...) peuvent être explicitement définies en utilisant soit zéro, soit une ou plusieurs des lettres suivantes : r, w, x, X, s et t. Utilisez une seule lettre de l’ensemble u, g et o lorsque vous copiez des permissions d’une classe d’utilisateurs à une autre.

Lorsque vous définissez des permissions pour plus d’une classe d’utilisateurs (), utilisez des virgules (sans espace) pour séparer les modes symboliques.

Voici quelques exemples d’utilisation de la commande chmod en mode symbolique :

  • Donner aux membres du groupe la permission de lire le fichier, mais pas de l’écrire ni de l’exécuter :

    chmod g=r filename
  • Supprimer la permission d’exécution pour tous les utilisateurs :

    chmod a-x filename
  • Supprimer de manière répulsive les droits d’écriture pour les autres utilisateurs:

    chmod -R o-w dirname
  • Supprimer les droits de lecture, d’écriture et d’exécution pour tous les utilisateurs sauf le propriétaire du fichier:

    chmod og-rwx filename

    La même chose peut également être accomplie en utilisant la forme suivante :

    chmod og= filename
  • Donner les droits de lecture, d’écriture et d’exécution au propriétaire du fichier, les droits de lecture au groupe du fichier et aucun droit à tous les autres utilisateurs :

    chmod u=rwx,g=r,o= filename
  • Ajouter les permissions du propriétaire du fichier aux permissions dont disposent les membres du groupe du fichier :

    chmod g+u filename
  • Ajouter un sticky bit à un répertoire donné :

    chmod o+t dirname

Méthode numérique #

La syntaxe de la commande chmod lors de l’utilisation de la méthode numérique a le format suivant:

chmod NUMBER FILE...

Lorsque vous utilisez le mode numérique, vous pouvez définir les permissions pour les trois classes d’utilisateurs (propriétaire, groupe et tous les autres) en même temps.

Le NUMBER peut être un nombre à 3 ou 4 chiffres.

Lorsque le nombre à 3 chiffres est utilisé, le premier chiffre représente les permissions du propriétaire du fichier, le second le groupe du fichier et le dernier tous les autres utilisateurs.

Chaque autorisation d’écriture, de lecture et d’exécution a la valeur numérique suivante :

  • r (lecture) = 4
  • w (écriture) = 2
  • x (exécution) = 1
  • pas de permissions = 0

Le nombre de permissions d’une classe d’utilisateurs spécifique est représenté par la somme des valeurs des permissions de ce groupe.

Pour connaître les permissions du fichier en mode numérique il suffit de calculer les totaux pour toutes les classes d’utilisateurs. Par exemple, pour donner des permissions de lecture, d’écriture et d’exécution au propriétaire du fichier, des permissions de lecture et d’exécution au groupe du fichier et seulement des permissions de lecture à tous les autres utilisateurs, vous feriez ce qui suit :

  • Propriétaire : rwx=4+2+1=7
  • Groupe : r-x=4+0+1=5
  • Autres : r-x=4+0+0=4

En utilisant la méthode ci-dessus, nous arrivons au nombre 754, qui représente les permissions souhaitées.

Pour configurer les drapeaux setuid, setgid et sticky bit, on utilise un nombre à quatre chiffres.

Lorsque le numéro à 4 chiffres est utilisé, le premier chiffre a la signification suivante :

  • setuid=4
  • setgid=2
  • sticky=1
  • pas de changements = 0

Les trois chiffres suivants ont la même signification que lors de l’utilisation du numéro à 3 chiffres.

Si le premier chiffre est 0, il peut être omis, et le mode peut être représenté avec 3 chiffres. Le mode numérique 0755 est le même que 755.

Pour calculer le mode numérique, vous pouvez également utiliser une autre méthode (méthode binaire), mais elle est un peu plus compliquée. Savoir comment calculer le mode numérique en utilisant 4, 2 et 1 est suffisant pour la plupart des utilisateurs.

Vous pouvez vérifier les permissions du fichier en notation numérique en utilisant la commande stat:

stat -c "%a" filename
644

Voici quelques exemples d’utilisation de la commande chmod en mode numérique :

  • Donner au propriétaire du fichier des autorisations de lecture et d’écriture et seulement des autorisations de lecture aux membres du groupe et à tous les autres utilisateurs:

    chmod 644 dirname
  • Donner au propriétaire du fichier des autorisations de lecture, d’écriture et d’exécution, des autorisations de lecture et d’exécution aux membres du groupe et aucune autorisation à tous les autres utilisateurs :

    chmod 750 dirname
  • Donner des autorisations de lecture, d’écriture et d’exécution, et un sticky bit à un répertoire donné :

    chmod 1777 dirname
  • Donner récursivement des autorisations de lecture, d’écriture et d’exécution au propriétaire du fichier et aucune autorisation à tous les autres utilisateurs sur un répertoire donné :

    chmod -R 700 dirname

Utilisation d’un fichier de référence #

L’option --reference=ref_file vous permet de définir les permissions du fichier pour qu’elles soient les mêmes que celles du fichier de référence spécifié (ref_file).

chmod --reference=REF_FILE FILE

Par exemple, la commande suivante attribuera les permissions du file1 à file2

chmod --reference=file1 file2

Changer récursivement les permissions du fichier #

Pour opérer récursivement sur tous les fichiers et répertoires sous le répertoire donné, utilisez l’option -R (--recursive) :

chmod -R MODE DIRECTORY

Par exemple, pour changer les permissions de tous les fichiers et sous-répertoires sous le répertoire /var/www en 755, vous utiliserez :

chmod -R 755 /var/www

Opération sur les liens symboliques #

Les liens symboliques ont toujours des permissions 777.

Par défaut, lors de la modification des permissions d’un lien symbolique, chmod modifiera les permissions sur le fichier vers lequel le lien pointe.

chmod 755 symlink

Il y a de fortes chances qu’au lieu de modifier la propriété de la cible, vous obteniez une erreur « cannot access ‘symlink’ : Permission refusée ».

L’erreur se produit parce que par défaut, sur la plupart des distributions Linux, les liens symboliques sont protégés, et vous ne pouvez pas opérer sur les fichiers cibles. Cette option est spécifiée dans /proc/sys/fs/protected_symlinks. 1 signifie activée et 0 désactivée. Il est recommandé de ne pas désactiver la protection des liens symboliques.

Changement des permissions de fichiers en vrac #

Il y a parfois des situations où vous auriez besoin de changer en vrac les permissions des fichiers et des répertoires.

Le scénario le plus courant est de changer récursivement les permissions du fichier du site web à 644 et les permissions du répertoire à 755.

Utilisation de la méthode numérique:

find /var/www/my_website -type d -exec chmod 755 {} \;find /var/www/my_website -type f -exec chmod 644 {} \;

Utilisation de la méthode symbolique:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

La commande find recherchera les fichiers et répertoires sous /var/www/my_website et passera chaque fichier et répertoire trouvé à la commande chmod pour définir les permissions.

Conclusion #

La commande chmod modifie les permissions du fichier. Les permissions peuvent être définies en utilisant le mode symbolique ou numérique.

Pour en savoir plus sur chmod, visitez la page de manuel chmod.

Similar Posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.