Résumé : Permissions, chiffrement
Droits d'accès UNIX
Description des droits
Les droits d’accès sont définis pour :
- le propriétaire du fichier
- un groupe d’utilisateurs
- les autres utilisateurs
et concernent :
- la lecture
- l'écriture
- l'éxecution
Remarque : chaque utilisateur est rattaché à au moins un groupe (son groupe primaire), et éventuellement inscrit dans des groupes supplémentaires. La commande id vous montre ces groupes.
$ id
uid=84328(rgiot) gid=70514(utilisateurs du domaine) groupes=70514(utilisateurs du domaine),71275(personnels),
75523(info_personnels),84328(rgiot),86070(info_gitlabprofs),89152(info),91522(info_recrutement),700002(BUILTIN\users)
Exercice :
- Quel est votre numéro d'utilisateur
- Regardez
/etc/passwd
Voir les droits
La commande ls -l
montre les droits.
$ ls -l /tmp
total 32
drwxr-xr-x 2 mibillau info_personnels 4096 jui 13 15:47 essais
drwx------ 3 mibillau info_personnels 4096 jui 13 15:25 gconfd-mibillau
drwx------ 2 mibillau info_personnels 4096 jui 13 15:25 keyring-ibBjeg
-rw------- 1 mibillau info_personnels 461 jui 13 15:25 krb5cc_13536
drwx------ 2 gdm gdm 4096 jan 1 1970 orbit-gdm
drwx------ 2 mibillau info_personnels 4096 jui 13 15:34 orbit-mibillau
-rw-r--r-- 1 root root 7522 jui 13 15:26 upgrades.log
Le premier caractère de la ligne montre le type de l’objet : d pour un répertoire (directory ), - pour un fichier.
Puis viennent trois caractères pour chaque catégorie :
- le propriétaire
mibillau
a les droitsrwx
- le groupe
info_personnels
a les droitsrx
- les autres ont les droits
rx
La signification des indicateurs r
, w
, et x
dépend de la nature de l’objet (fichier ou répertoire).
Des fichiers
r
= read (lecture du contenu)w
= write (écriture du contenu, extension du fichier)x
= exécution
Des répertoires
r
= read (consultation de la liste des noms)w
= write (ajout / retrait d’un lien) dans le répertoirex
= cross (traversée)
Sur les liens symboliques
Les droits sont toujours rwx
.
À noter : les droits du lien n’ont rien à voir avec les droits des fichiers contenus dans le répertoire
pointé.
$ ls -l /usr/bin/emacs21
lrwxrwxrwx 1 root root 9 mai 21 12:09 /usr/bin/emacs21 -> emacs21-x
Exercice :
Observation :
- Copiez dans /tmp un de vos répertoires d’exercices de programmation.
- Qui peut visiter ce répertoire ? Lire les sources ?
- Recompilez un des programmes. Qui peut l’exécuter ?
- Essayer ls -ln
Changer les droits, octal
Chaque groupe de trois indicateurs est transcrit sous forme d’un chiffre octal, en posant
- r=4
- w=2
- x=1
droits | --- |
--x |
-w- |
-wx |
r-- |
r-x |
rw- |
rwx |
---|---|---|---|---|---|---|---|---|
r = 4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
w = 2 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
x = 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
octal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
La commande chmod
(change mode) définit les droits d’accès d’un fichier ou d’un répertoire
avec trois chiffres en octal
$ ls -l /tmp/calcul
-rw-r--r-- 1 mibillau info_personnels 219 jui 13 16:17 /tmp/calcul
$ chmod 740 /tmp/calcul
$ ls -l /tmp/calcul
-rwxr----- 1 mibillau info_personnels 219 jui 13 16:17 /tmp/calcul
Option utile : -R pour changer les droits récursivement sur le contenu d’un répertoire.
Exercice :
Travaillez dans votre sous-répertoire de /tmp .
- retirez-vous le droit d’exécuter un exécutable
- peut-on exécuter sans avoir le droit de lire ?
Changer les droits, symbolique
Une autre forme de la commande chmod
permet d’ajouter ou retirer facilement des droits.
Par exemple :
$ chmod u+x monscript
ajoute le bit x dans les droits du propriétaire.
$ chmod u+w,go-rw monfichier
ajoute le droit w
pour le propriétaire, et enlève les droits rw
pour le groupe et les autres)
Codification des commandes :
- u=user, g=group, o=others, a=all (= u+g+o)
- +=ajouter, -=retirer, = = positionner.
- r= read, w=write, x=execute/cross, X=x si r est positionné.
Exercice
Travaillez dans votre répertoire sous /tmp
- enlevez les droits à tout utilisateur autre que vous-même.
- vérifiez (
ls -lR
) - redonnez les droits en lecture
Changement des propriétaires et groupes
chown
permet de changer le propriétaire d'un fichier :chown user file
chgrp
permet de changer le groupe d'un fichier :chgrp grp file
ACL : les listes de contrôle d’accès
Les listes de contrôle d’accès étendent le système “historique” de droits d’Unix, qui ne consi- dère, dans une optique minimaliste, que trois catégories d’utilisateurs :
- le propriétaire d’un fichier
- les membres du groupe
- les autres
Les ACL permettent de définir des droits particuliers pour certains utilisateurs. Par exemple je peux permettre
- à mon binôme de modifier les fichiers de mon projet
- aux enseignants de les consulter
sans donner des droits à tout le monde.
On peut repérer l’activation des ACL au +
qui suit les droits
$ ls -l
total 16
-rwxrwx--x+ 1 mibillau info_personnels 8 jui 13 17:11 afficher-date.sh
-rw-rw----+ 1 mibillau info_personnels 8 jui 13 17:11 fichier
Les groupes d’indicateurs
Les indicateurs se divisent en trois groupes :
- les droits du propriétaire
- un masque (attention, ce ne sont pas les droits du groupe)
- les droits des autres
Le masque indique quels droits d’accès peuvent être accordés par les listes d’accès. Il précise un limitation.
Par exemple si le masque est r-x
et le droit accordé à une utilisateur par une ACL est rw , le
droit effectif de cet utilisateur est r--
.
Les derniers indicateurs indiquent concerne les autres utilisateurs (qui ne sont ni le propriétaire, ni cités dans les ACL).
Pour reprendre l’exemple d’un fichier qui pourrait être modifié par moi-même et mon binome :
- les trois premiers bits
rw-
des droits m’autoriseraient à lire et écrire dans le fichier -
les trois bits suivants
rw-
que, par les ACL, je peux déléguer ces mêmes droits. Il y aura alors deux éléments dans les ACL -
rw-
pour mon binome jdupont r--
pour le groupe profs- les trois derniers interdiront tout accès --- aux autres utilisateurs
Attention : la commande chmod modifie les indicateurs d’un fichier ou répertoire, mais efface
les contrôles d’accès. En général, on modifie les droits par la commande (setfacl
).
Voir les ACL
Voir les ACL
Les listes des contrôles d’accès sont affichées par getfacl
(get file access control lists)
$ getfacl fichier
# file : fichier
# owner : mibillau
# group : info_personnels
user :: rw-
group::---
group : admins du domaine : rwx# effective : rw-
mask :: rw-
other ::---
Les trois premières lignes rappellent le nom du fichier, son propriétaire et son groupe. Ensuite on trouve
user::
qui donne les droits du propriétaire ( rwx )group::
= les droits du groupe du fichier (aucun -- ) pour info_personnelsgroup::admins...
= les droits du groupe “admins du domaine” 1 . Les ACL donnent les droits rwx à ce groupe, mais le masque restreint leur effet à une valeur effecte de rwmask::
la valeur du masque (qui empêche de donner accidentellement le droit x par les ACL)other::
les droits des autres (ici : aucuns).
Sur ce même ficher, la commande ls -l
donne
$ ls -l fichier
-rw-rw----+ 1 mibillau info_personnels 0 30 sept. 11:27 fichier
Remarquez que le deuxième groupe d’indicateurs correspond au masque (rw
), et non aux
droits du groupe (---
).
Exercice
- regardez les ACL dans votre répertoire d’accueil
- regardez les ACL dans
/tmp
Remarquez que les répertoires portent également des “ACL par défaut”
$ getfacl .
<...>
default:user::rwx
default:group::---
default:group:admins du domaine:rwx
default:mask::rwx
default:other::---
Changer les listes d'accès
Accorder les droits à un utilisateur
$ setfacl -m u:jlepine:rwx fichier
$ getfacl fichier
# file: fichier
# owner: mibillau
# group: info_personnels
user::rw-
user:jlepine:rwx #effective:rw-
group::---
group:admins du domaine:rwx#effective:rw-
mask::rw-
other::---
Note : si l’utilisateur désigné figurait déjà dans l’ACL, ses droits sont remplacés.
Accorder des droits à un groupe
$ setfacl -m g:info_etudiants:r fichier
$ getfacl fichier
# file: fichier
# owner: mibillau
# group: info_personnels
user::rw-
user:jlepine:rwx
group::---
group:admins du domaine:rwx
group:info_etudiants:r--
mask::rwx
other::---
Retirer des droits
$ setfacl -x g:info_etudiants fichier
$ setfacl -x u:jlepine fichier
ACL par défaut
Les répertoires portent également des ACL par défaut qui indiquent les droits initiaux des fichiers et répertoires qui sont créés dans ce répertoire
Exemple :
$ getfacl /net/Bibliotheque/ASR1-USI
# file: /net/Bibliotheque/ASR1-USI
# owner: mibillau
# group: info_personnels
user::rwx
group::rwx
group:admins\040du\040domaine:rwx
group:info_etudiants:r-x
group:info_personnels:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:admins\040du\040domaine:rwx
default:group:info_etudiants:r-x
default:group:info_personnels:rwx
default:mask::rwx
default:other::---
Quand un fichier est créé dans ce répertoire (par exemple par touch fichier ), il hérite immédiatement des droits et ACL indiqués : il est lisible par les étudiants et modifiable par les personnels et les administrateurs. Quand un répertoire est créé, il récupère aussi ces droits, et les mêmes droits par défaut. Ainsi, quand un professeur crée une sous-arborescence dans ASR1-USI , il n’a rien de spécial à faire pour que ses fichiers soient lisibles par les étudiants et modifiables par les profs. Les droits par défauts peuvent être modifiés : exemple
$ mkdir DS-JANVIER-2019
$ setfacl -X d:g:info_etudiants DS-JANVIER-2019
Options complémentaires
L’option -R
agit de façon récursive
Comportement des commandes ls , cp et mv
Extrait de la documentation : Sur un système qui supporte les ACL, le comportement des utilitaires ls(1) , cp(1) et mv(1) change :
- pour les fichiers qui ont une ACL par défaut ou une liste qui contient autres chose que les 3 ACL de base, l’option, “ -l ” de ls affiche un signe “ + ” après les permissions.
- Si l’option -p est spécifiée, la commande cp(1) préserve aussi les ACL. Si ce n’est pas possible, un avertissement est affiché.
- la commande mv(1) préserve toujours les ACL. Si ce n’est pas possible, un avertisse- ment est affiché.
Protection des données par chiffrement
La protection des fichiers par droits peut être insuffisante. Dans ce cas, il peut être préférable de chiffrer ses données
Chiffrement par mot de passe
ccrypt
permet de chiffrer et déchiffrer un fichier clair en saisissant un mot de passe.
Exercice : Faites man ccrypt
et cherchez comment chiffrer/déchiffrer un fichier. Faites le sur un fichier de test.
openssl
Permet de chiffrer en utilisant différentes méthodes de chiffrement symétrique également en demandant un mot de passe
$ echo "Je suis clair" > clair.txt
$ openssl enc -aes-128-cbc -in clair.txt -out chiffre.txt
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
$ openssl enc -aes-128-cbc -d -in chiffre.txt -out dechifre.txt
enter aes-128-cbc decryption password:
$ diff clair.txt dechifre.txt
Chiffrement par clé
openssl
permet également le chiffrement par clé asymétrique (i.e., clé publique pour chiffrer,
clé privé pour déchiffrer)
$ # Extraction de la partie publique de la clé (à ne faire qu'une seule fois)
$ openssl rsa -in ~/.ssh/id_rsa -pubout -out ~/.ssh/id_rsa.pub.pem
$ # L'exepidteur chiffre avec la clé publique du destinataire
$ openssl rsautl -encrypt -in clair.txt -pubin -inkey ~/.ssh/id_rsa.pub.pem -out chiffre2.txt
$ # Le destinataire chiffre avec sa clé privée
$ openssl rsautl -decrypt -in chiffre2.txt -inkey ~/.ssh/id_rsa -out dechiffre2.txt
$ diff clair.txt dechiffre2.txt
Chiffrement de façon plus transparente
- Chiffrement du disque (
cryptsetup
) - Chiffrement du système de fichier (
ecryptfs
)