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 #
- Utilisation de chmod #
- Méthode symbolique (texte) #
- Méthode numérique #
- Utilisation d’un fichier de référence #
- Changer récursivement les permissions du fichier #
- Opération sur les liens symboliques #
- Changement des permissions de fichiers en vrac #
- Conclusion #
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 chown
et 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.