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.
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
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.
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
eta
(all) - des opérateurs d’ajout/suppression :
=
,+
et-
- des droits :
r
,w
et/oux
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