Pour les systèmes d’exploitation multi-utilisateurs tel que Linux, il est primordial de mettre en place une politique de permissions contrôlant les actions autorisées sur les fichiers, répertoires et sur l’ensemble des ressources du système.
Sous Linux les droits s’appliquent sur les fichiers en fonction de 3 identités : le propriétaire du fichier, le groupe (qui contient un ou plusieurs utilisateurs) et les autres utilisateurs qui ne sont ni propriétaires, ni présents dans le groupe.
Les droits sont propres à chaque fichier et sont représentés par 3 séries de 3 lettres. Ces lettres peuvent prendre comme valeurs r, w, x ainsi que s et t qui peuvent parfois être en majuscule S, T.
propriétaire | groupe | autres utilisateurs | ||||||
Lecture | Écriture | Exécution | Lecture | Écriture | Exécution | Lecture | Écriture | Exécution |
r | w | x/s,S | r | w | x/s,S | r | w | x/t,T |
Les droits sous Linux
Visualisation
La commande ls -l
permet de lister le contenu d’un dossier et de fournir un certain nombre d’informations. Elle permet notamment de connaître quel est le propriétaire et le groupe propriétaire d’un fichier ainsi que leurs droits respectifs sans oublier les droits accordés aux autres utilisateurs. De plus, cette commande renseigne le type de fichier, identifié par une lettre ou un tiret en début de ligne.
Exemple : Listing du dossier /usr
1 | # ls -l /usr |
2 | drwxr-xr-x 75 root root 12288 sept. 1 04:00 lib |
3 | drwxrwsr-x 13 root staff 4096 sept. 1 13:04 local |
6 | -rw-rw-r-- 1 aline aline 0 sept. 4 10:47 testDroit01.txt |
Ici nous avons le dossier /local appartenant à root qui possède les droits rwx. Le groupe propriétaire de ce dossier est staff et possède quant à lui les droits rws. Tous les autres utilisateurs ont seulement les droits r-x, ici le tiret indique l’absence du droit w.
Signification des droits
Il est important de distinguer les dossiers (représentés par la lettre d) des autres fichiers car les droits n’ont pas la même signification.
Pour les fichiers
- r : Lecture - Permet de lire, ouvrir, visualiser (cas d’une image)
Exemple de commande permise :cat
- w : Écriture - Permet de modifier le fichier
Exemple de commandes permises : utilisation des sorties standards > ou >> pour écrire dans le fichier.
Il est possible d’écrire dans un fichier sans qu’il possède le droit de lecture comme le demande la plupart des éditeurs de texte.
- x : Exécution - Autorise l’utilisateur à exécuter le fichier
Programmes, scripts shell.
s : SetUID - Exécution avec les droits du propriétaire.
Exemples :/bin/mount
,/bin/ping
,/usr/bin/passwd
s’exécutent avec le droit setUID.
Ainsi un simple utilisateur pourra changer son mot de passe en lançant la commandepasswd
qui appartient à root et écrire dans le fichier/etc/sadow
qui appartient également à root.-rwsr-xr-x 1 root root 51096 mai 25 2012 /usr/bin/passwd
s : SetGID - Exécution avec les droits du groupe.
Exemples :/usr/bin/wall
,/usr/bin/crontab
s’exécutent avec le droit setGID-rwxr-sr-x 1 root crontab 35984 févr. 9 2013 /usr/bin/crontab
- t : sticky bit - Mise en zone de swap.
Exemples :/dev/ptya0
,/dev/mem
,/dev/port
,/dev/ram0
Le but est que le fichier puisse être stocké en mémoire pour pouvoir être relancé plus rapidement.crw-rw-rwT 1 root tty 2, 176 mai 6 05:03 /dev/ptya0
Pour les dossiers
- r : Lecture - Permet de lire le contenu du dossier (listage des fichiers, arborescence)
Exemple de commande permise :ls
- w : Écriture - Permet de modifier le contenu du dossier (créer, copier, renommer, supprimer)
Exemples de commandes permises :mkdir
,touch
,cp
,rm
- x : Exécution - Autorise l’utilisateur à traverser le dossier ou à accéder à un fichier dans le dossier
Exemple de commande permise :cd
- s : SetUID - N’est pas utilisé sous UNIX.
Il est cependant possible (avec chmod) de positionner ce droit mais reste sans effet.
- s : SetGID - Tout fichier créé dans ce dossier héritera du groupe du dossier parent. Les sous-dossiers créés hériteront quant à eux du droit setGID
Exemples :/usr/local
,/usr/local/bin
,/usr/local/lib
Utile lorsque plusieurs utilisateurs travaillent sur un projet commundrwxrwsr-x 13 root staff 4096 sept. 1 13:04 local
- t : sticky bit - Tout fichier créé ne pourra être supprimé que par son propriétaire et par root.
Exemple :/var/tmp
,/dev/sda
,/dev/port
,/var/spool/cron/crontabs
C’est aussi le principe utilisé par les wikis.drwxrwxrwt 2 root root 4096 sept. 11 08:45 tmp
Modifier les droits
La commande Change Mod (chmod)
La commande permettant de changer les permissions est chmod. Son utilisation est la suivante :
# chmod (-R) [u g o a] [+ - =] [r w x (X) s t] fichier(dossier) |
Les options u, g, o et a spécifient l’attribution des droits pour le propriétaire (u : user), le groupe (g : group), les autres utilisateurs (o : other). L’option a : all permet d’appliquer les droits à tous les utilisateurs. Les symboles +, -, = indiquent l’ajout d’un droit, le retrait et enfin l’égalité.
# chmod ugo=rwx fichier |
est équivalent à :
# chmod a=rwx fichier |
Le X majuscule permet, dans le cas d’une attribution récursive des droits (option -R), de spécifier uniquement le droit d’exécution sur les dossiers contenus dans un répertoire sans toucher aux autres fichiers.
# chmod -R g=rwX dossier/ |
Utilisations des valeurs octales
Il est possible avec la commande chmod
d’utiliser les valeurs octales correspondantes aux droits r, w, x, s et t.
Tableaux des équivalences des droits (binaire, octal, lettres) :
Lorsque les droits s et t sont activés ils viennent se positionner sur les droits d’exécutions :
Important : Lorsque les droits s ou t sont appliqués le droit x n’est plus visible.
- Si le droit x est absent alors les droits setUID, setGID, stickyBit seront en majuscule
- Si le droit x est présent alors les droits setUID, setGID, stickyBit seront en minuscule
Exemple de calcul de la valeur octale :
Vérification :
# chmod 2744 fichier1 & chmod 2754 fichier2 |
Exemples
Les commandes suivantes sont équivalentes :
# chmod 777 fichier |
Les commandes suivantes sont équivalentes :
# chmod 600 fichier |
Les commandes suivantes sont équivalentes :
# chmod 42 fichier |
Les commandes suivantes sont équivalentes :
# chmod 1337 fichier |
Les commandes suivantes sont équivalentes :
# chmod 2016 fichier |
Les commandes suivantes sont équivalentes :
# chmod 7000 fichier |
Il est parfois bien plus rapide d’utiliser les valeurs octales mais elles restent néanmoins plus difficiles à appréhender.
Conclusion
La gestion des droits sur Linux est simple et permet d’avoir une bonne maîtrise du système. Cependant cette simplicité ne permet pas toujours de couvrir l’ensemble des besoins en entreprise. Chaque fichier appartient en effet à un utilisateur et un groupe unique, ce qui peut être problématique et restrictif.
Pour permettre une gestion plus fine des permissions d’accès il existe les ACL (Acess Control List) qui accordent des privilèges à plusieurs utilisateurs ou plusieurs groupes pour un même fichier.