Introduction

Nous avons indiqué que le rôle d’un système d’exploitation est aussi d’assurer la sécurité et l’accès aux données, ce qui se fait grâce au mécanisme des droits. Chaque fichier se voit attribué des droits qui lui sont propres, des autorisations d’accès individuelles. Lors d’un accès le système vérifie si celui-ci est permis.

A sa création par l’administrateur, un utilisateur se voit affecté un UID unique. Les utilisateurs sont définis dans le fichier /etc/passwd. De même chaque utilisateur est rattaché à au moins un groupe (groupe principal), chaque groupe possédant un identifiant unique, le GID . Les groupes sont définis dans /etc/group.

La commande id permet d’obtenir ces informations. En interne, le système travaille uniquement avec les UID et GID, et pas avec les noms par eux-mêmes.

weas02\> id
uid=75(oracle) gid=102(dba)

A chaque fichier (inode) sont associés un UID et un GID définissant son propriétaire et son groupe d’appartenance. On peut affecter des droits pour le propriétaire, pour le groupe d’appartenance et pour le reste du monde. On distingue de ce fait trois cas de figure

  1. UID de l’utilisateur identique à l’UID défini pour le fichier : cet utilisateur est propriétaire du fichier.
  2. Les UID sont différents : le système vérifie si le GID de l’utilisateur est identique au GID du fichier : si oui l’utilisateur appartient au groupe associé au fichier.
  3. Dans les autres cas (aucune correspondance) : il s’agit du reste du monde (others), ni les propriétaires, ni appartenant au groupe.

Schéma à faire

Sortie de la commande ls -l :

d rwxr-xr-x 1 oracle dba 466 Feb 8 2001 oracle
- rwxrwxrwx 1 oracle dba 14536 Feb 8 2001 output.log
- rwxr-x— 1 oracle dba 1456 - Feb 8 2001 launch.sh

Sur la première ligne du tableau, le répertoire oracle appartient à l’utilisateur oracle et au groupe dba, et possède les droits rwxr-xr-x.

Signification

Droit Signification
Général
r Readable (lecture)
w Writable (écriture)
x Executable (exécutable comme programme)
Fichier normal
r Le contenu du fichier peut être lu, chargé en mémoire, visualisé, recopié.
w Le contenu du fichier peut être modifié, on peut écrire dedans. La suppression n’est pas forcément liée à ce droit (voir droits sur répertoire).
x Le fichier peut être exécuté depuis la ligne de commande, s’il s’agit soit d’un programme binaire (compilé), soit d’un script (shell, perl, …)
Répertoire
r Les éléments du répertoire (catalogue) sont accessibles en lecture. Sans cette autorisation, le ls et les critères de filtres sur le répertoire et son contenu ne sont pas possibles. Ce droit ne suffit pas pour entrer dans le catalogue.
w Les éléments du répertoire (catalogue) sont modifiables et il est possible de créer, renommer et supprimer des fichiers dans ce répertoire. On voit donc que c’est ce droit qui contrôle l’autorisation de suppression d’un fichier même si on est pas propriétaire des fichiers du répertoire.
x Le catalogue peut être accédé par cd et listé. Sans cette autorisation il est impossible d’accéder et d’agir sur son contenu qui devient verrouillé. Avec uniquement ce droit les fichiers et répertoires inclus dans celui-ci peuvent être accédés mais il faut alors obligatoirement connaître leur nom.

Ainsi pour un fichier :

rwx r-x r–
Droits de l’utilisateur, en lecture, écriture et exécution Droits pour les membres du groupe et lecture et exécution Droits pour le reste du monde en lecture uniquement

Modification des droits

Lors de sa création, un fichier ou un répertoire dispose de droits par défaut. On utilise la commande chmod pour modifier les droits sur un fichier ou un répertoire. Il existe de méthodes pour modifier ces droits : par la forme symbolique et par la base 8. Seul le propriétaire d’un fichier peut en modifier les droits (sauf l’administrateur système).

Le chmod sur un lien symbolique est possible comme sur tout autre fichier, mais cela ne modifie pas les droits du lien par lui-même mais les droits du fichier pointé.

Par symboles

La syntaxe est la suivante :

chmod modifications Fic1 [Fic2...]

S’il faut modifier les droits de l’utilisateur, on utilisera le caractère u. pour les droits du groupe, le caractère g, pour le reste du monde le caractère o, pour tous le caractère a.

Pour ajouter des droits, on utilise le caractère « + », pour en retirer le caractère « - », et pour ne pas tenir compte des paramètres précédents le caractère « = ».

Enfin, le droit d’accès par lui-même : « r », « w » ou « x ».

On peut séparer les modifications par un espace, et cumuler plusieurs droits dans une même commande.

$ ls -l
total 0
-rw-r--r-- 1 oracle system 0 Aug 12 11:05 fic1
-rw-r--r-- 1 oracle system 0 Aug 12 11:05 fic2
-rw-r--r-- 1 oracle system 0 Aug 12 11:05 fic3
$ chmod g+w fic1
$ ls -l fic1
-rw-rw-r-- 1 oracle system 0 Aug 12 11:05 fic1
$ chmod u=rwx,g=x,o=rw fic2
$ ls -l fic2
-rwx--xrw- 1 oracle system 0 Aug 12 11:05 fic2
$ chmod o-r fic3
$ ls -l fic3
-rw-r----- 1 oracle system 0 Aug 12 11:05 fic3

Par base 8

La syntaxe est identique à celle des symboles. A chaque droit correspond une valeur octale c’est à dire de zéro (0) à sept (7), positionnelle et cumulable.

Propriétaire Groupe Reste du monde
r w x r w x r w x
400 200 100 40 20 10 4 2 1

Pour obtenir le droit final il suffit d’additionner les valeurs. Par exemple si on veut rwxrw-rw- alors on fera 400+200+100+40+20+4+2=766, et pour rw-r—r- 400+200+40+4=644.

$ chmod 766 fic1
$ ls -l fic1
-rwxr-xr-x 1 oracle system 0 Aug 12 11:05 fic1
$ chmod 644 fic2
$ ls -l fic2
-rw-r--r-- 1 oracle system 0 Aug 12 11:05 fic2

Masque des droits

Lors de la création d’un fichier ou d’un répertoire et qu’on regarde ensuite leurs droits, on obtient généralement rw-r—r-- (644) pour un fichier et rwxr-xr-x (755) pour un répertoire. Ces valeurs sont contrôlées par un masque, lui-même modifiable par la commande umask. la commande prend comme paramètre une valeur octale qui sera soustraite aux droits d’accès maximum. Par défaut, tous les fichiers sont créés avec les droits 666 (rw-rw-rw) et les répertoires avec les droits 777 (rwxrwxrwx), puis le masque est appliqué.

Sur la plupart des Unix, le masque par défaut est 022, soit ----w--w-. Pour obtenir cette valeur, on tape umask sans paramètre.

Pour un fichier :
Maximum rw-rw-rw- (666)
Retirer ----w--w- (022)
Reste rw-r--r-- (644)

Pour un répertoire :
Maximum rwxrwxrwx (777)
Retirer ----w--w- (022)
Reste rwxr-xr-x (755)

le calcul des droits définitifs (effectifs) n’est pas une simple soustraction de valeurs octales ! Le masque retire des droits mais n’en ajoute pas.

Pour un fichier :
Maximum rw-rw-rw- (666)
Retirer ---r-xrw- (056)
Reste rw--w---- (620) et PAS 610 !

Changement de propriétaire et de groupe

Il est possible de changer le propriétaire et le groupe d’un fichier à l’aide des commandes chown (change owner) et chgrp (change group).

chown utilisateur fic1 [Fic2...]
chgrp groupe fic1 [Fic2...]

Sur les UNIX récents seul root peut utiliser chown. La commande chgrp peut être utilisée par n’importeq ui à condition que cet utilisateur fasse aussi partie du nouveau groupe.

En précisant le nom d’utilisateur (ou de groupe), le système vérifie d’abord leur existence. On peut préciser un UID ou un GID, dans ce cas le système n’effectuera pas de vérification.

Pour les deux commandes on peut préciser l’option -R, dans ce cas les droits seront changés de manière récursive. Les droits précédents et l’emplacement du fichier ne sont pas modifiés. Enfin sous certains Unix il est possible de modifier en une seule commande à la fois le propriétaire et le groupe.

chown utilisateur[:groupe] fic1 [fic2...]
chown utilisateur[.groupe] fic1 [fic2...]
$ chgrp dba fic1
$ ls -l fic1
-rwxr-xr-x 1 oracle dba 0 Aug 12 11:05 fic1

Extractions des noms et chemins

La commande basename permet d’extraire le nom du fichier dans un chemin.

$ basename /tmp/seb/liste
liste

La commande dirname effectue l’inverse, elle extrait le chemin.

$ dirname /tmp/seb/liste
/tmp/seb

Photo de Towfiqu Barbhuiya sur Unsplash