3. Permissions Linux

  • Propriété
  • Droits
  • Représentation symbolique et octale
  • Umask
  • Droits étendus
  • Modification des droits
  • Modification de l’utilisateur et du groupe propriétaire
  • SUID, GUID, Sticky bit
  • Commande stat
  • Révision de la commande ls

1. Propriété

Tout fichier UNIX possède un propriétaire. Au départ, le propriétaire est l’utilisateur (u) qui a créé le fichier mais "root" peut l’attribuer à un autre utilisateur. Seul le propriétaire du fichier et le super utilisateur (root) peuvent changer les droits.

Un fichier UNIX appartient aussi à un groupe (g). On définit ainsi les actions du groupe sur ce fichier. Ce groupe est souvent le groupe d'appartenance du propriétaire, mais ce n'est pas obligatoire.

On peut aussi définir ce que les autres (o) que le propriétaire ou groupe peuvent faire avec le fichier.

Rappelons que les dossiers sous UNIX sont aussi des fichiers. Les droits sur les dossiers (mais aussi les périphériques, etc.) fonctionnent exactement de la même façon que sur des fichiers ordinaires.

2. Commandes chown/chgrp

chown est un appel système et une commande UNIX nécessitant les droits de root pour changer le propriétaire d'un fichier ou dossier (de l'anglais change the owner).

Voici la syntaxe générale de la commande chown :

chown [-hHLPR] [utilisateur][:groupe] cible1 [cible2 ..]

chgrp permet de changer le groupe d'utilisateur possédant un fichier ou un dossier. Contrairement à chown, la commande n'est pas réservée au super-utilisateur : le propriétaire peut aussi effectuer un changement de groupe s'il fait partie du groupe de destination.

chgrp ''groupe'' ''cible1'' [''cible2'' ..]

3. Changer le propriétaire et groupe d’un fichier

Par exemple attribuer l’utilisateur milou et le groupe tintin au fichier monfichier.txt :

$ touch monfichier.txt
$ ls -l monfichier.txt
-rw-rw-r--. 1 francois francois 0 17 jan 12:37 monfichier.txt
$ sudo chown milou:tintin monfichier.txt
$ ls -l monfichier.txt
-rw-rw-r--. 1 milou tintin 0 17 jan 12:37 monfichier.txt

4. Droits

À chaque fichier est associée une liste de permissions qui déterminent ce que chaque utilisateur a le droit de faire du fichier.

  • La lecture (r) : on peut par exemple lire le fichier avec un logiciel. Lorsque ce droit est alloué à un dossier, il autorise l'affichage de son contenu (liste des fichiers présents à la racine de ce dossier).

  • L'écriture (w) : on peut modifier le fichier et le vider de son contenu. Lorsque ce droit est alloué à un dossier, il autorise la création, la suppression et le changement de nom des fichiers qu'il contient (quels que soient les droits d’accès). Le droit spécial sticky bit permet de modifier ce comportement.

  • L'exécution (x) : on peut exécuter le fichier s'il est prévu pour, c'est-à-dire si c'est un fichier exécutable. Lorsque ce droit est attribué à un dossier, il autorise l'accès (ou ouverture) au dossier.

On appelle parfois r, w et x des « flags » ou « drapeaux ». Sur un fichier donné, ces 3 « flags » doivent être définis pour son propriétaire, son groupe, mais aussi les autres utilisateurs (différents du propriétaire et n'appartenant pas au groupe).

5. Représentation symbolique

Cet ensemble de 3 droits sur 3 entités se représente généralement de la façon suivante :

On écrit côte à côte les droits r, w puis x respectivement pour le propriétaire (u), le groupe (g) et les autres utilisateurs (o). Les codes u, g et o (u comme user, g comme group et o comme others) sont utilisés par les commandes UNIX qui permettent d'attribuer les droits et l'appartenance des fichiers. Lorsqu'un flag est attribué à une entité, on écrit ce flag (r, w ou x), et lorsqu'il n'est pas attribué, on écrit un '-'.

L'exemple suivant signifie que le propriétaire peut lire, écrire et exécuter le fichier, mais que les utilisateurs du groupe attribué au fichier ne peuvent que le lire et l'exécuter, et enfin que les autres utilisateurs ne peuvent que lire le fichier.

6. Représentation octale

Les valeurs octales correspondent au tableau suivant de telle sorte que les valeurs possibles pour un fichier ou un dossier sont :

  • 7 rwx
  • 6 rw-
  • 5 r-x
  • 4 r--
  • 3 -wx
  • 2 -w-
  • 1 --x
Symbole Octal Binaire
r 4 100
w 2 010
x 1 001

7. Umask

Les permissions standards sont :

  • 666 pour les fichiers
  • 777 pour les dossiers

Umask est un masque de création de fichier qu’il faut soustraire des permissions standards pour obtenir les droits de tout nouveau fichier ou dossier créé par l’utilisateur.

Si 002 est la valeur umask par défaut :

$ umask
0002

Alors les fichiers nouvellement créés auront des droits :

 666
-  
 002
=
 664

et les dossiers auront des droits :

 777
-
 002
=
 775

8. chmod

chmod est la commande qui permet de changer les permissions des fichiers et des dossiers.

Voici sa syntaxe :

chmod [option] permission fichier

où les permissions peuvent être notées en octal :

$ chmod 777 fichier

ou en mode symbolique selon la syntaxe en utilisant :

  • les catégories d’utilisateur : u, g, o et a (all)
  • des opérateurs d’ajout/suppression : =, + et -
  • des droits : r, w et/ou x
$ chmod a+rwx fichier

Pour assurer la récursivité, on peut appliquer les permissions à un dossier et toute son arborescence avec l’option -R :

$ chmod -R u+rwx labs

9. Modification des droits

  • Créer un script rudimentaire "monscript.sh" :
$ cat monscript.sh
#!/bin/bash
echo "Voici mon premier script"
exit
$ ls -l monscript.sh
-rw-rw-r--. 1 francois francois 51 17 jan 05:02 monscript.sh
$ ./monscript.sh
-bash: ./monscript.sh: Permission non accordée
  • Rendre le script exécutable
$ chmod +x monscript.sh
$ ls -l monscript.sh
-rwxrwxr-x. 1 francois francois 51 17 jan 05:02 monscript.sh
$ ./monscript.sh
Voici mon premier script
  • N’accorder les droits qu’au seul propriétaire
$ chmod 700 monscript.sh

10. Droits étendus

Les droits étendus sont des variantes sur l’exécution :

  • SUID sur un exécutable, valeur octale : 4000, valeur symbolique : s
  • SGID sur un fichier ou un dossier, Valeur octale : 2000, valeur symbolique : s
  • Sticky bit, Valeur octale : 1000, valeur symbolique : t

11. SUID

  • Valeur octale : 4000, valeur symbolique : s
  • Quand le SUID est activé sur un exécutable, l’utilisateur qui exécute le fichier dispose des mêmes droits que le propriétaire.

Par exemple :

$ ls -l $(which passwd)
-rwsr-xr-x. 1 root root 27832 10 jun  2014 /usr/bin/passwd

Cet Exemple nous indique que cet exécutable à le SUID activé qui autorise un utilisateur d’écrire son mot de passe dans un fichier réservé à root (/etc/shadow).

Attention ce type de fichier appartenant à root pourrait rendre n’importe quelles actions privilégiée possible.

12. Commande stat

La commande stat donnera des informations précises sur un fichier :

$ stat $(which passwd)
  Fichier: «/usr/bin/passwd»
   Taille: 27832        Blocs: 56         Blocs d'E/S: 4096   fichier
Périphérique: fd00h/64768d  Inœud: 33859624    Liens: 1
Accès: (4755/-rwsr-xr-x)  UID: (    0/    root)   GID: (    0/    root)
Contexte: unconfined_u:object_r:passwd_exec_t:s0
 Accès: 2015-01-16 02:52:08.012260715 +0100
Modif.: 2014-06-10 08:27:56.000000000 +0200
Changt: 2014-12-08 20:37:41.265606127 +0100
  Créé: -

13. Opérations SUID

  • Créez un dossier et tenter de changer son propriétaire. La commande chown ne peut être utilisée que par root.
$ mkdir tmp
$ chown root tmp
chown: modification du propriétaire de «tmp»: Opération non permise
$ ls -l $(which chown)
-rwxr-xr-x. 1 root root 62792 10 jun  2014 /usr/bin/chown
Activer le SUID sur la commande.
$ sudo chmod +4000 $(which chown)
$ ls -l $(which chown)
-rwsr-xr-x. 1 root root 62792 10 jun  2014 /usr/bin/chown
  • On constate que l’utilisateur a pu changer le propriétaire du dossier.
$ chown root tmp
$ ls -ld tmp
drwxrwxr-x. 2 root francois 6  4 mar 23:10 tmp
  • Désactivation du SUID.
$ sudo chmod u-s $(which chown)

14. SGID

  • Valeur octale : 2000, valeur symbolique : s
  • Le SGID permet d’endosser les droits du groupe propriétaire.
  • Quand un utilisateur crée un fichier dans un dossier dont il est membre du groupe, le fichier prendra les permissions du groupe courant.
  • Quand le SGID est fixé sur un dossier, le fichier créé par l’utilisateur prendra les droits du groupe du dossier. En conséquence, tous les fichiers créés quel que soit l’utilisateur appartiendront au groupe du dossier.

15. Opérations SGID

  • Créer un dossier partagé avec l’utilisateur tintin avec le SGID activé :
$ mkdir share
$ chmod g+s share
$ ls -l
drwxrwsr-x. 2 francois francois       6 17 jan 11:53 share
$ groups tintin
$ sudo usermod -G francois tintin
$ groups tintin
$ cd share
  • Création d’un fichier partagé tintin.txt
$ su tintin
Mot de passe :
$ touch tintin.txt
$ ls -l
total 0
-rw-rw-r--. 1 tintin francois 0 17 jan 11:57 tintin.txt
$ exit
  • On retire le droit SGID et on crée un nouveau fichier tintin2.txt
$ chmod g-s share
$ cd share
$ su tintin
Mot de passe :
$ touch tintin2.txt
$ ls -l
total 0
-rw-rw-r--. 1 tintin tintin   0 17 jan 11:59 tintin2.txt
$ exit

16. Sticky bit

  • Valeur octale : 1000, valeur symbolique : t
  • Ce droit (traduction bit collant) est utilisé pour manier de façon plus subtile les droits d'écriture d'un dossier. En effet, le droit d'écriture signifie que l'on peut créer, modifier et supprimer les fichiers de ce dossier. Le sticky bit permet de faire la différence avec la suppression.
  • Lorsque ce droit est positionné sur un dossier, il interdit la suppression d'un fichier qu'il contient à tout utilisateur autre que le propriétaire du fichier.
  • C’est typiquement le cas du dossier /tmp :
$ ls -l /
drwxrwxrwt.  11 root root  340 17 jan 11:59 tmp

17. Exercice permissions

  • Créer avec un dossier appartenant au groupe “omega”.
  • Le dossier est partagé par deux utilisateurs “alfa” et “beta” appartenant au groupe secondaire “omega”.
  • Ce dossier partagé est leur dossier d’accueil et personnel.
  • Ces utilisateurs peuvent lire le contenu du dossier et ajouter ou modifier des fichiers. Fixer le “sticky bit” et le “SGID” sur ce dossier en démontrant leur utilité.
  • En options :
  • Retirer à ces utilisateurs les droits d’accès à une console graphique.
  • Désactiver le compte de “beta” (plusieurs solutions)
# mkdir /opt/share
# groupadd omega
# chgrp omega /opt/share
# useradd -d /opt/share -G omega -s /bin/bash alfa
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# useradd -d /opt/share -G omega -s /bin/bash beta
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# chmod 3770 /opt/share

Vérifications.

# ls -ld /opt/share
drwxrws--T. 2 root omega 6 Apr 11 16:10 /opt/share
# su - alfa
$ touch alfa.txt
$ exit
logout
# su - beta
$ touch beta.txt
$ ls -l
total 0
-rw-rw-r--. 1 alfa omega 0 Apr 11 16:11 alfa.txt
-rw-rw-r--. 1 beta omega 0 Apr 11 16:12 beta.txt
$ rm alfa.txt
rm: cannot remove ‘alfa.txt’: Operation not permitted
$ exit
logout

Commentaires