Comptes et permissions
Les comptes utilisateurs
Les comptes utilisateurs sont définis dans le fichier /etc/passwd :
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
adriano:x:1000:1000:Adriano:/home/adriano:/bin/bash
USERNAME:x:UID:GID:Nom complet:HOME:SHELL
Quant au mot de passe, il est enregistré sous forme de hash dans le fichier /etc/shadow.
Pour ajouter un utilisateur, il y a deux commandes disponibles :
-
adduser
-
useradd
$ sudo adduser tintin
$ sudo useradd -m -s /bin/bash -u 1100 tintin
$ echo "tintin:milouMILOU" | sudo chpasswd
Pour ajouter un utiliser à un groupe existant :
$ sudo usermod -a -G audio tintin (1)
1 | Ajoute l’utilisateur tintin au groupe audio |
Les permissions
Tout fichier sur un système :POSIX: a un utilisateur propriétaire et un groupe :
$ ls -l | grep Images
drwxr-xr-x 22 adriano adriano 40960 4 sep 17:24
Les droits sur un fichier sont composés de 3 actions :
-
r : la lecture du fichier
-
w : l’écriture à l’intérieur du fichier ou sa suppression
-
x : l’exécution sur un fichier ou l’ouverture sur un dossier
Ces trois lettres sont aussi appelées "flags" (drapeaux).
Ces flags peuvent être définis pour le propriétaire, le groupe et les
autres utilisateurs.
Voici un exemple, ces permissions sont appliquées sur un fichier
drwxr-xr-x 22 adriano adriano 40960 4 sep 17:24 Images (1)
-rwxr-x--- 1 adriano adriano 674 9 mai 16:37 wordlist.py (2)
1 | l’utilisateur adriano a tout les droits sur le dossier Images, les
membres du groupe adriano ont le droit de lister le contenu et tout les
autres utilisateurs du système ont les mêmes droits. Cependant, s’il n’ont pas les droits sur le dossier parent, ils ne pourront pas voir le contenu du répertoire Images. |
2 | l’utilisateur adriano a tout les droits sur le fichier worldlist.py , le groupe n’a accès qu’en lecture et exécution et les autres n’ont aucun droits. |
La commande chmod permet de modifier les permissions d’un fichier ou d’un répertoire.
$ mkdir textes
$ ls -l | grep textes
drwxr-xr-x 2 adriano adriano 4096 24 sep 18:03
$ chmod go-rx textes (1)
$ ls -l | grep textes
drwx------ 2 adriano adriano 4096 24 sep 18:03
$ echo "Hello World !" >> textes/hello.txt
$ ls -l textes/
total 4
-rw-r--r--. 1 guttadauriaa guttadauriaa 14 24 sep 19:19 hello.txt
$ chmod u+x textes/hello.txt (2)
$ ls -l textes/
total 4
-rwxr--r--. 1 guttadauriaa guttadauriaa 14 24 sep 19:19 hello.txt
1 | Suppression des droits rx pour le groupe et les autres utilisateurs |
2 | Ajout de l’exécution pour le propriétaire sur le fichier |
On peut aussi attribuer toutes les permissions en une fois avec la forme octale :
$ chmod 640 textes/hello.txt
-rwxr-x---
$ chmod 755 scripts/hello.py
-rwxr-xr-x
Les ACLs
Les Access Control List sont une autre technique d’attribution de permissions qui permettent de s’affranchir des limitations du modèle UNIX.
Comme sur les partitions NTFS de Windows, on peut ajouter des listes de droits s’appliquant à différents utilisateurs et groupes.
getfacl
$ getfacl textes/hello.txt
# file: textes/hello.txt
# owner: adriano
# group: adriano
user::rw-
group::r--
other::---
setfacl
Ajouter des permissions
setfacl -m [type objet]:[nom objet]:[permissions] fichier
-
type d’objet: u (user), g (group), m (mask, pas de nom d’objet à fournir), o (other, comme pour mask)
-
nom d’objet: nom d’utilisateur ou UID, nom de groupe ou GID
-
permissions: r,w,x
-
fichier: le nom de la ressource
$ setfacl -m u:dummy:rw textes/hello.txt
$ getfacl textes/hello.txt
# file: textes/hello.txt
# owner: adriano
# group: adriano
user::rw-
user:tintin:rw-
group::r--
mask::rw-
other::---
Ajouter tintin comme propriétaire par défaut de tous les nouveaux fichiers créé dans le dossier $HOME/textes/ :
setfacl -m "d:u:tintin:rwx" /home/adriano/textes/
Suppression des permissions
setfacl -x u:tintin /home/adriano/textes/hello.txt