Permissions Linux

Dans ce chapitre sur les permissions Linux on évoquera les sujets suivants :

  • Propriété
  • Droits
  • Représentation symbolique et octale
  • Umask
  • Droits étendus
  • Modification des droits
  • Modification de l’utilisateur et du groupe propriétaire
  • SUID, SGID, 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

Exercice

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 trois “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 trois droits sur trois 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.

Représentation symbolique des permissions Linux

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

Illustration

SymboleOctalBinaire
r4100
w2010
x1001

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.

Exercice

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

Illustration

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

chmod 777 fichier

Illustration

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

Récursivité

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

Exercice

Créer un script rudimentaire “monscript.sh” :

cat << EOF > monscript.sh
#!/bin/bash
echo "Voici mon premier script"
exit
EOF

Vérifier les permissions

Vérifier les permissions sur le fichier :

ls -l monscript.sh
-rw-rw-r--. 1 francois francois 51 17 jan 05:02 monscript.sh

Executer le script

Executer le script :

./monscript.sh
-bash: ./monscript.sh: Permission non accordée

Rendre le script exécutable

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

Résultat

On obtient alors le résultat voulu :

./monscript.sh
Voici mon premier script

N’accorder les droits qu’au seul propriétaire

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.

Exercice

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.

Exercice

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

Exercice

Créer 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

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

Validation

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

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

Exercice

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

Exercice

Création d’un fichier partagé tintin.txt

su tintin
touch tintin.txt
ls -l
total 0
-rw-rw-r--. 1 tintin francois 0 17 jan 11:57 tintin.txt
exit

Retrait du SGID

On retire le droit SGID et on crée un nouveau fichier tintin2.txt

chmod g-s share

Vérification

Vérification :

cd share
su tintin
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 -ld /tmp
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)

Solution

mkdir /opt/share
groupadd omega
chgrp omega /opt/share
useradd -d /opt/share -G omega -s /bin/bash alfa
useradd -d /opt/share -G omega -s /bin/bash beta
chmod 3770 /opt/share

Vérifications

Vérifications :

ls -ld /opt/share
drwxrws--T. 2 root omega 6 Apr 11 16:10 /opt/share
su - alfa
touch alfa.txt
exit
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