Les droits sur un fichier se font par rapport à 3 catégorie :
Les 3 catégories ensemble donnent
Pour chaque catégorie, on a les droits suivants :
Ceci permet d'avoir des autorisations du style :
Jean peut lire et modifier le fichier menu_de_la_semaine.txt, le groupe Amis de Jean peut seulement lire le même fichier, et le reste du monde ne peut ni lire , ni modifier ce fichier.
Par exemple, dans le cas du fichier menu_de_la_semaine.txt, on aura les droits suivants :
Imaginons maintenant que Jean ait réalise un programme bataille_navale.pl qu'il veut être le seul à exécuter, lire et modifier. Ce programme aura les droits suivants :
Une autre notation possible est la notation octale : un chiffre est attribué à chaque droit, on ajoute ces droits comme on veut et on attribu un chiffre à chaque catégorie d'utilisateur.
Les chiffres sont 4 pour la lecture, 2 pour l'écriture, 1 pour l'exécution.
En clair, ça donne :
Lorsqu'un fichier peut être exécuté par son propriétaire et les membres d'un groupe, on peut faire en sorte que lorsque les membres du groupe l'exécutent, il soit exécuté avec les droits du propriétaires : c'est ce qu'on appelle être setuid.
Un exemple classique est le binaire passwd. Ce binaire (qui permet à un utilisateur de changer son mot de passe) appartient à l'utilisateur root et est setuid. En effet, ce binaire écrit dans le fichier /etc/passwd ou /etc/shadow (suivant les distributions de Linux/Unix) qui n'est accessible en écriture qu'à l'utilisateur root.
Un binaire setuid se traduit par un remplacement de la lettre (x) par la lettre (s) pour les droits du propriétaire. Voilà un exemple pour un fichier en lecture et exécution (en setuid) pour tout le monde :
Un dossier ne peut pas être setuid.
De la même façon qu'avec le setuid on peut donner les droits du propriétaire pour exécuter un fichier : avec le setgid on peut donner les droits du groupe pour exécuter un fichier.
Un binaire setgid se traduit par un remplacement de la lettre (x) par la lettre (s) pour les droits du groupe. Voilà un exemple pour un fichier en lecture et exécution (en setgid) pour tout le monde :
Si un dossier est setgid, tous les fichiers créés dans ce dossier appartiendront au groupe auquel appartient le dossier.
Positionner le sticky bit d'un programme signifie qu'il va rester en mémoire à la fin de son exécution dans le but d'être relancé plus rapidement. Un programme avec le sticky bit et accessible en lecture et exécution pour tout le monde aura les droits suivants :
Dans le cas d'un dossier, le sticky bit empêche un utilisateur de supprimer des fichiers qui ne lui appartiennent pas dans le dossier.
Seul le propriétaire d'un fichier, ainsi que l'utilisateur root peuvent changer les droits d'un fichier, c'est à dire :
Pour changer le propriétaire d'un fichier :
chown nouveau_proprio fichier_ou_dossier_cible
Pour changer le groupe d'un fichier :
chgrp nouveau_groupe fichier_ou_dossier_cible
Pour changer le propriétaire et le groupe en une seule manipulation :
chown nouveau_proprio:nouveau_groupe fichier_ou_dossier_cible
Pour changer de façon récursive le propriétaire (utiliser de la même manière pour le groupe) :
chown -R nouveau_proprio fichier_ou_dossier_cible
Pour changer les droits d'un fichier :
chmod nouveaux_droits fichier_ou_dossier_cible
De manière récursive :
chmod -R nouveaux_droits fichier_ou_dossier_cible
La commande chmod accepte les droits avec les lettres ou les chiffres, de plus vous pouvez décrire les nouveaux droits relativement aux anciens. Par exemple, pour ajouter les droits d'écriture au groupe, ça donnera :
chmod g+w fichier_ou_dossier_cible (g = groupe, w = write, + pour ajouter)
Remplacez le plus par un moins si nécessaire, g par o,u ou a (propriétaire, reste des gens et tout le monde), et w par r ou x (lecture ou exécution) et le tour est joué.
Enfin, le X (x majuscule) peut également être utilisé : il signifie exécution seulement pour les dossiers, c'est extrêmement pratique dans le cas des commandes récursives car les dossiers nécessitent le droit d'exécution pour être traversés, tandis que les fichiers n'ont généralement pas besoin d'être exécutables.