Skip to content

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 droits rwx
  • le groupe info_personnels a les droits rx
  • 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épertoire
  • x = 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_personnels
  • group::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 rw
  • mask:: 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)