Gcolpart.com by reg

Les droits Unix


Sous les systèmes de type Unix ou Linux, il existe plusieurs types de fichiers: les fichiers, les répertoires, les liens symboliques, les fichiers-périphériques.

Un fichier appartient à un utilisateur (en fait un numéro d'utilisateur) et à un groupe (en fait un numéro de groupe).
On peut changer l'utilisateur par la commande:
$ chown <new_user> fichier
On peut changer le groupe par la commande:
$ chgrp <new_group> fichier
On peut changer l'utilisateur et le groupe par la commande:
$ chown <new_user>.<new_group> fichier
Les 3 droits fondamentaux sont la lecture, l'écriture et l'éxecution.
Pour un fichier, ces 3 droits sont définis pour 3 catégories: l'utilisateur, le groupe et le "reste du monde". Pour chacune de ces catégories: on note les droits sous la forme rwx.
r correspond à l'écriture, w à l'écriture et x l'exécution. Par exemple, r-x correspond à des droits de lecture et d'exécution autorisés, mais l'écriture interdite.
Un notation pratique est de voir rwx comme 3 bits. L'autorisation correspond à 1 et l'interdication à 0.
Par exemple r-x correspond à 101. En base 10, 101=1*4+0*2+1*1=5. Cela correspond donc à 5.
On notera côte à côte les droits des 3 catégories.
Par exemple rwxr-xr-- correspond à des droits rwx pour l'utilisateur, r-x pour le groupe et r-- pour le reste du monde. Si vous avez bien suivi, rwxr-xr--=111101100=754
On ajoute (ou retire) des droits avec la commande :
$ chmod <catégorie>+<nouveau_droit> fichier
<catégorie> peut être u (utilisateur), g (groupe) ou a (all=reste du monde). <nouveau_droit> peut être r,w ou x
Pour retirer, on mettra un - à la place du +
On peut changer complètement les droits d'un fichier par la commande:
$ chmod <nouveaux_droits> fichier
Par exemple, <nouveaux_droits>=777 pour autoriser tout par tout le monde.

Pour un répertoire, on pourra lister les fichiers dans ce répertoire si on a les droits r du répertoire (et ceux des répertoires supérieurs). Si on a pas ces droits, on ne pourra pas lister. Le droit rx permet en plus d'entrer dans ce répertoire. Sans lui, on ne pourra pas effectuer des opérations sur un des fichiers contenus dans ce répertoire. Par exemple, le répertoire /root/ n'a souvent aucun droit pour "all" et donc on ne peut rien faire dans ce répertoire si l'on est pas root.

Notons que le droit x seul permet de traverser le répertoire mais pas d'y entrer ou de le lister (merci dgeo ;)

Attention, pour pouvoir effacer un fichier ou un répertoire vide, il suffit d'avoir les droits wx sur le répertoire contenant ! (avoir uniquement de droit w ne sert _a priori_ à rien pour un répertoire). Notez que dans un répertoire avec droit wx, on peut effacer les fichiers (ou répertoires vides) sur lesquels on n'a pas les droits (par contre, on ne peut pas effacer les répertoires non vides sur lesquels on a pas les droits wx).

En plus de cela, il existe des droits spéciaux: setuid, setgid et sticky bit
- Un fichier exécutable peut être setuid, c'est-à-dire qu'au lieu d'être exécuté avec les droits de l'utilisateur qui le lance, il sera exécuté avec les droits du propriétaire de l'exécutable. Ceci s'avère assez dangereux notamment pour les exécutables setuid root. L'exemple-type est le pogramme passwd qui permet de changer de mot de passe. Il est exécutable par un utilisateur mais il est setuid root car seul root peut écrire dans les fichiers /etc/passwd et /etc/shadow
- Un fichier exécutable peut être setguid. Il s'agit de la même notion que celle vue ci-dessus pour le groupe. Le fichier est donc exécuté avec les droits du groupe auquel il appartient.
- Un fichier exécutable peut être sticky, c'est-à-dire avoir le sticky bit positionné. Cela signifie qu'il reste en mémoire même après la fin de son exécution afin d'être relancé plus rapidement (à préciser). Attention, seul root peut positionner le sticky bit.
- Un répertoire peut être setgid. Cela signifie que tous les fichiers créés dans ce répertoire appartiendront au même groupe que le répertoire.
- Un répertoire peut être sticky bit. Cela signifie dans ce répertoire, un utilisateur ne pourra effacer que les fichiers qui lui appartiennent. L'exemple-type est le répertoire /tmp où tout le monde peut écrire mais où l'on ne peut effacer que ce que l'on a créé.
Ces droits spéciaux sont notés sst où le premier s correspond au setuid, le second au setgid et le t au sticky bit.
On écrira également cela sous la forme de bits. Par exemple s-t=101=5 On ajoute (ou retire) des droits spéciaux avec la commande:
$ chmod +<droit_spécial> fichier
<droit_spécial> peut être s (setuid+setgid) ou t (sticky bit)
On change complètement les droits spéciaux et les droits d'un fichier par la commande:
$ chmod <nouveaux_droits_spéciaux><nouveaux_droits> fichier
<nouveaux_droits_spéciaux> s'écrit en base 10. Par exemple, 5 pour setuid et sticky bit.

powered by Apache     powered by Debian     Valid XHTML 1.1     Valid CSS     ecrit avec Vim    
Copyright (c) 2002-2014 Gregory Colpart. Infogerance serveur