Les droits sous Linux

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étairegroupeautres utilisateurs
LectureÉcritureExécutionLectureÉcritureExécutionLectureÉcritureExécution
rwx/s,Srwx/s,Srwx/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 commande passwd 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
    crw-rw-rwT 1 root tty 2, 176 mai 6 05:03 /dev/ptya0
    Le but est que le fichier puisse être stocké en mémoire pour pouvoir être relancé plus rapidement.

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
    drwxrwsr-x 13 root staff 4096 sept. 1 13:04 local
    Utile lorsque plusieurs utilisateurs travaillent sur un projet commun
  • 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
    drwxrwxrwt 2 root root 4096 sept. 11 08:45 tmp
    C’est aussi le principe utilisé par les wikis.

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

ls -l fichier
# -rwxr-Sr-- 1 aline aline 0 sept. 23 16:58 fichier1
# -rwxr-sr-- 1 aline aline 0 sept. 23 16:58 fichier2

Exemples

Les commandes suivantes sont équivalentes :

# chmod 777 fichier
# chmod ugo=rwx fichier

# ls -l fichier
# -rwxrwxrwx 1 user group 0 sept. 8 09:54 fichier

Les commandes suivantes sont équivalentes :

# chmod 600 fichier
# chmod u=rw fichier & chmod go=- fichier

# ls -l fichier
-rw------- 1 user group 0 sept. 8 09:56 fichier

Les commandes suivantes sont équivalentes :

# chmod 42 fichier
# chmod u=- fichier & chmod g=r fichier & chmod o=w fichier

# ls -l fichier
----r---w- 1 user group 0 sept. 8 09:59 fichier

Les commandes suivantes sont équivalentes :

# chmod 1337 fichier
# chmod ug=wx fichier & chmod o=rwxt fichier

# ls -l :
--wx-wxrwt 1 user group 0 sept. 8 10:01 fichier

Les commandes suivantes sont équivalentes :

# chmod 2016 fichier
# chmod g=xs fichier & chmod o=rw fichier

# ls -l :
------srw- 1 user group 0 sept. 8 10:03 fichier

Les commandes suivantes sont équivalentes :

# chmod 7000 fichier
# chmod ugo=st

# ls -l :
---S--S--T 1 user group 0 sept. 8 10:05 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.

> Partager <