Note: Le contrôle d’accès consiste à définir des règles qui indiquent qui a le droit de faire quoi — par exemple, qui peut modifier un fichier. Il existe deux méthodes de contrôle d’accès sous Linux:
Les permissions affichées par ls -l
sont au centre du contrôle d’accès discrétionnaire (DAC), qui est le seul type auquel on va s’intéresser ici.
Les permissions d’un fichier, aussi appelé le mode du fichier, sont composées de 3 ensembles: utilisateur propriétaire, groupe propriétaire et autres.
utilisateur (user, owner):
si l’utilisateur en cours est le propriétaire du fichier, alors les permissions utilisateur (1er ensemble) s’appliquent
# am a les droits de l'utilisateur propriétaire
$ whoami
am
$
$ ls -l file
-rwx------ 1 am am 12 juil. 21 09:14 file
$ cat file
hello world
# bob n'a pas les droits de l'utilisateur propriétaire
$ su bob
$ whoami
bob
$
$ ls -l file
-rwx------ 1 am am 12 juil. 21 09:14 file
$ cat file
cat: file: Permission denied
groupe (group):
si l’utilisateur en cours n’est pas le propriétaire du fichier, mais que son groupe l’est, alors les permissions de groupe (2ème ensemble) s’appliquent
# am a les droits de l'utilisateur propriétaire
$ whoami
am
$
$ ls -l file
----rwx--- 1 am am 12 juil. 21 09:14 file
$ cat file
cat: file: Permission denied
# bob a les droits du groupe propriétaire
$ su bob
$ whoami
bob
$ groups
bob am
$
$ ls -l file
----rwx--- 1 am am 12 juil. 21 09:14 file
$ cat file
hello world
Note: sur certaines distributions, il faut que le groupe en cours soit le groupe propriétaire pour que ces droits s’appliquent. On peut temporairement changer de groupe principal avec newgrp
$ groups
bob am
$ id -gn
bob
$
$ newgrp am
$ id -gn
am
$ groups
am bob
autres (other, world):
si l’utilisateur en cours n’est ni l’utilisateur ni le groupe propriétaire du fichier, alors les permissions “autres” (3ème ensemble) s’appliquent
# am a les droits de l'utilisateur propriétaire
$ whoami
am
$
$ ls -l file
-------rwx 1 am am 12 juil. 21 09:14 file
$ cat file
cat: file: Permission denied
# bob a les droits du groupe propriétaire
$ su bob
$ whoami
bob
$ groups
bob am
$
$ ls -l file
-------rwx 1 am am 12 juil. 21 09:14 file
$ cat file
cat: file: Permission denied
# charlie a les droits autres
$ su charlie
$ whoami
charlie
$ groups
charlie
$
$ ls -l file
-------rwx 1 am am 12 juil. 21 09:14 file
$ cat file
hello world
Chaque ensemble peut avoir 3 permissions:
lecture (read, r, 4):
Pour un fichier: permet voir et copier un fichier — le contenu du fichier peut être lu
Pour un répertoire: permet de voir le contenu du répertoire
# Lecture non accordée sur un fichier
$ ls -l file
--wx-wx-wx 1 am am 6 juil. 21 08:21 file
$
$ cat file
cat: file: Permission denied
# Lecture non accordée sur un dossier
$ ls -ld tmp
d-wx-wx-wx 2 am am 4096 juil. 21 08:19 tmp
$
$ ls -l tmp
ls: cannot open directory 'tmp': Permission denied
$
$ cd tmp
tmp$ ls
ls: cannot open directory '.': Permission denied
écriture (write, w, 2):
Pour un fichier: permet de modifier le contenu du fichier
Pour un répertoire: permet d’ajouter ou supprimer des fichiers à l’intérieur du répertoire
# Écriture non accordée sur un fichier
$ ls -l file
-r-xr-xr-x 1 am am 12 juil. 21 08:23 file
$ cat file
hello world
$
$ echo "new content" > file
bash: file: Permission denied
# Écriture non accordée sur un dossier
$ ls -ld tmp
dr-xr-xr-x 2 am am 4096 juil. 21 08:19 tmp
$ ls -l tmp
total 0
-rw-rw-r-- 1 am am 0 juil. 21 08:19 file
$
$ touch tmp/newfile
touch: cannot touch 'tmp/newfile': Permission denied
$
$ echo "hello world" > tmp/file
$ cat tmp/file
hello world
exécuter (execute, x, 1):
Pour un fichier: permet d’executer le fichier comme un script
Pour un répertoire: permet d’aller dans ce répertoire avec cd et voir les détails des fichiers
# Éxecution non accordée sur un fichier
$ ls -l file
-rw-rw-rw- 1 am am 5 juil. 21 08:29 file
$ cat file
hello world
$ echo "date" > file
$
$ ./file
bash: ./file: Permission denied
# Éxecution non accordée sur un dossier
$ ls -ld tmp
drw-rw-rw- 2 am am 4096 juil. 21 08:19 tmp
$ ls -l tmp
ls: cannot access 'tmp/file': Permission denied
total 0
-????????? ? ? ? ? ? file
$ cd tmp
bash: cd: tmp: Permission denied
Aucune permission est indiqué par - (symbolique) ou 0 (octal)
chgrp
(change group) permet de changer le groupe propriétaire
$ ls -l file
-rw-rw-r-- 1 am am 0 juil. 21 11:22 file
$
$ sudo chgrp bob file
$ ls -l file
-rw-rw-r-- 1 am bob 0 juil. 21 11:22 file
chown
(change owner) permet de changer l’utilisateur propriétaire
$ ls -l file
-rw-rw-r-- 1 am bob 0 juil. 21 11:22 file
$
$ sudo chown bob file
$ ls -l file
-rw-rw-r-- 1 bob bob 0 juil. 21 11:22 file
chown permet également de changer le groupe propriétaire: indiquer le groupe à associer après deux-point;
si les deux-points sont ajoutés mais que le groupe n’est pas indiqué, alors le groupe principal de l’utilisateur choisit est assigné.
$ ls -l file
-rw-rw-r-- 1 bob bob 0 juil. 21 11:22 file
$
$ sudo chown am: file
$ ls -l file
-rw-rw-r-- 1 am am 0 juil. 21 11:22 file
Il est également possible de changer le groupe sans changer l’utilisateur
$ sudo chown :bob file
-rw-rw-r-- 1 am bob 0 juil. 21 11:22 file
chmod
(change mode) permet de modifier les permissions d’un fichier.
Deux syntaxes différentes sont acceptées: symbolique ou octale (parfois dite numérique).
$ ls -l file
-rw-rw-r-- 1 am am 0 juil. 21 11:22 file
$
# Notation octale
$ chmod 666 file
$ ls -l file
-rw-rw-rw- 1 am am 0 juil. 21 11:22 file
$
# Notation symbolique
$ chmod a+x file
$ ls -l file
-rwxrwxrwx 1 am am 0 juil. 21 11:22 file
Avec la notation symbolique, il faut spécifier
sur quel ensemble appliquer les modifications:
u
pour l’utilisateur propriétaireg
pour le groupe propriétaireo
pour les autres (others)a
pour tousl’opération à effectuer:
+
pour ajouter des permissions-
pour supprimer des permissions=
pour assigner des permissionsles permissions:
r
pour la lecture (read)w
pour l’écriture (write)x
pour l’exécution (execute)-
aucune permissionOn peut utiliser une concaténation pour appliquer les opérations sur plusieurs ensembles (ex. go=-),
ou pour appliquer plusieurs permissions (ex. u=rw).
Et on peut cumuler plusieurs modifications en utilisant la virgule (ex. u=r,g=w)
Exemple:
# Ajouter les droits d'execution à l'utilisateur
chmod u+x file
# Enlever les droits de lire aux autres
chmod o-r file
# Assigner les droits de lecture & écriture pour tous (utilisateur, groupe, autres)
chmod a=rw file
# Assigner les droits de lecture & écriture à l'utilisateur,
# et les droits d'execution au groupe & aux autres
chmod u=rw,go=x file
En notation octale, on utilise 3 chiffres pour désigner les permissions des 3 ensembles:
Chaque permission est représentée par une puissance de 2:
0
: aucune permission1
: exécution2
: écriture4
: lecturePour assigner plusieurs droits, on les additionne.
Exemple:
# Assigner les droits de lecture & écriture à l'utilisateur,
# et les droits d'execution au groupe & aux autres
chmod 611 file
# Assigner les droits de lecture, écriture & exécution à l'utilisateur,
# Lecture & écriture au groupe
# Lecture uniquement aux autres
chmod 764 file
Notons qu’avec la notation octale on assigne les permissions des 3 ensemble: pour ne modifier qu’un seul ensemble, on est obligé d’utiliser la notation symbolique.