Les droits d’accès aux fichiers sous Debian et plus généralement sous Linux est inspiré de la gestion des droits sous Unix.
Pour un fichier, on attribue des droits à des catégories d’utilisateurs du système (4)
- les droits du propriétaire ou utilisateur que l’on note u comme user
- les droits du groupe auquel le propriétaire appartient noté g comme group
- les autres utilisateurs noté o comme other
- tous noté a comme all
Pour chaque type d’accès, il y existe 3 types de droits :
- droit d’exécution x (eXecute)
- droit d’écriture w (Write)
- droit de lecture r (Read)
Un droit attribué à une catégorie d’utilisateurs s’appelle un mode
Lorsqu’on crée un fichier, le système attribut des droits par défaut
selon le « masque de utilisateur » (le user mark, à l’origine de la commande umask) :
- Lecture, écriture et exécution pour le propriétaire
- Exécution et Lecture pour le groupe
- Exécution et Lecture pour les autres
Le système note les catégorie d’utilisateurs linéairement de gauche à droite : les droits de l’utilisateur propriétaire, puis ceux du groupe et enfin les droits des autres.
Idem pour les droits : r pour la lecture, w pour l’écriture puis x pour l’exécution
Ce qui donne :
rwxr-xr-x un_fichier.txt
Pour changer les droits sur un fichier, il y a 3 possibilités :
+ l’ajout de droits
- la suppression de droits
= la fixation de droits
Imaginons que vous avez créé un fichier texte que nous appellerons un_fichier.txt.
Vous êtes donc propriétaire de ce fichier et les droits par défaut s’appliquent.
Si vous souhaitez donner les droits en écriture à un collègue appartenant
au même groupe système. Rien de plus simple, la notation est la suivante :
chmod [ugoa] [+-=] [rwx] nom_du_fichier
Dans le cas présent, cela donne :
chmod g+w un_fichier.txt
Autre exemple, vous voulez fixer les droits en exécution uniquement à votre groupe ainsi qu’aux autres utilisateurs :
chmod ug=x un_fichier.txt
Il existe une autre notation pour attribuer ou changer les droits d’un fichier.
Il s’agit de la notation octale :
1 pour l’execution
2 pour l’écriture
4 pour la lecture
Ainsi, les 2 commandes suivantes sont équivalentes :
chmod 751 un_fichier.sh chmod u=wrx,g=rx o=x un_fichier.sh
Remarquez la « , » qui permet d’attribuer des droits à plusieurs catégories d’utilisateurs en une seule commande.
Le propriétaire actuel d’un fichier et le root peuvent changer l’utilisateur propriétaire du fichier avec la commande
chown nouvel_utilisateur nom_de_fichier
Pour appliquer les changements à tous les sous-fichiers et sous-répertoires, ajoutez l’option -R
chown -R nouvel_utilisateur nom_de_fichier
De même, chgrp permet de changer le groupe propriétaire
chgrp -R utilisateur nom_de_repertoire
On peut aussi changer à la fois l’utilisateur propriétaire et le groupe propriétaire
avec la commande chown suivie du nom d’utilisateur et du nom du groupe séparé par . ou :
chown -R utilisateur.groupe un_fichier.txt chown -R utilisateur:groupe un_fichier.txt
Si l’utilisateur et le groupe ont le même nom, comme pour le root appartenant au groupe root,
on joint le nom d’utilisateur et le nom de fichier par . ou :
chown utilisateur.un_fichier.txt chown utilisateur:un_fichier.txt
Reste les droits spéciaux ….
La commande passwd correspondant au fichier /usr/bin/passwd permet à un utilisateur de modifier son mot de passe.
Le fichier passwd du groupe bin doit pouvoir écrire dans le fichier /etc/passwd dans lequel seul root peut écrire.
A cet effet, on attribue un droit spécial appelé setuid au fichier /usr/bin/passwd.
chmod u+s fichier
/usr/bin/passwd est alors exécuté avec les droits de son propriétaire (pour le cas root), et non avec ceux de l’utilisateur qui le lance.
De la même façon, un exécutable peut être setgid, et s’exécuter avec les droits du groupe auquel il appartient.
Quand un répertoire est setgid, tous les fichiers créés dans ce répertoire appartiennent au groupe propriétaire du répertoire.
Quand plusieurs personnes travaillent sur un projet commun, un groupe système dédié au projet est créé.
Un répertoire est créé avec le droit setgid appartenant à ce groupe.
Les développeurs peuvent ainsi créer leurs fichiers dans ce répertoire avec les permissions 664: tout le groupe peut alors écrire n’importe quel fichier, vu que tous les fichiers appartiennent au groupe.
chmod g+s fichier_ou_repertoire
Seul le propriétaire et le root peuvent fixer le bit setuid et setgid. la notion de setuid ne s’applique pas aux répertoires.
Enfin, un exécutable peut être « sticky », cela signifie qu’il reste en mémoire même après la fin de son exécution, pour pouvoir être relancé plus rapidement.
Seul l’administrateur système peut positionner le sticky bit.
Un utilisateur qui a le droit d’écrire dans un répertoire peut effacer n’importe quel fichier de ce répertoire. Ca peut être très gênant par exemple pour le répertoire /tmp, dans lequel tout le monde a généralement le droit d’écrire. Pour y remédier, on positionne le sticky bit; ainsi, un utilisateur ne peut effacer que les fichier qui lui appartiennent :
chmod +t fichier_ou_repertoire
setuid, setgid et sticky bit se place juste avant les droits en lecture, écriture et exécution des catégories utilisateurs :
rwsr-sr-x vaut rwxr-xr-x avec setuid et setgid
En notation octale …
chmod 4777 - setuid, lecture, écriture et exécution pour tout le monde chmod 2777 - setgid, lecture, écriture et exécution pour tout le monde chmod 1777 - sticky, lecture, écriture et passthru pour tout le monde pour un répertoire chmod 6777 - setuid, setgid, lecture, écriture et exécution pour tout le mondeLes droits d'accès aux fichiers,




