- u, l'utilisateur normal, son propriétaire, bien souvent son créateur, qui n'a pas pour autant tous les droits sur lui !
- g, son groupe, ensemble d'utilisateurs ayant parfois des "permissions" particulières.
- o, tous les (others) autres.
- Attention, l'utilisateur propriétaire et le groupe propriétaire du fichier peuvent être indépendants :
- le groupe propriétaire n'est pas forcément le groupe primaire de l'utilisateur propriétaire,
- et même, le propriétaire n'est pas forcément membre du groupe !
- Mais (heureusement) une règle générale simple s'applique à la création de tout nouveau fichier (ou rép)
- son propriétaire est l'utilisateur (humain ou système) qui l'a créé
- son groupe est le groupe primaire de ce même utilisateur
Droits d'accès des utilisateurs aux fichiers
Généralités
Linux permet de spécifier les droits d'action sur un fichier, que peuvent exercer les utilisateurs des 3 catégories précédentes, ou plutôt les permissions que leurs accordent les fichiers et les répertoires.Linux a repris les 3 protections d'UNIX sur les fichiers et les répertoires. Leur notation symbolique est :
- r, lecture
- w, écriture
- x, exécution
De façon générale, ces permissions sont consultables complètement par la commande : ls -l
Rappel : ll est un alias plus court, pour la commande ls -l
Par exemple :
[stagex@p0x stagex] ll *.html
-rw-r--r-- 1 stagex stagex 1200 oct 19 12 : 39 amoi.html
Description globale
On trouve de gauche à droite
- le 1er caractère indique la nature du fichier
- le système de droits est spécifié symboliquement par les 9 attributs suivants, correspondants aux 3 catégories d'utilisateurs du fichier.
- nombre de liens sur le fichier
1 signifie que le fichier n'a aucun lien qui pointe vers lui, 2 (ou plus) signifiant qu'il existe un lien (ou plus) vers lui. - le nom du propriétaire du fichier
- le nom du groupe propriétaire
- la date de dernière modification
- le nom complet du fichier
"-" fichier normal, "d" un fichier répertoire, "l" un lien.
...|...|...
u g o
La section u fixe les droits accordés au propriétaire du fichier.
La section g
fixe les droits accordés aux utilisateurs faisant partie du groupe auquel appartient le fichier.
La section o
fixe les droits des autres utilisateurs.
Permissions des fichiers normaux
Pour chaque fichier, les utilisateurs sont ainsi séparés en 3 catégories, le propriétaire, les membres du groupe et tous les autres.Les permissions accordées par le fichier à ces catégories sont complètement indépendantes mais leur signification est la même.
Vis à vis de chacune de ces 3 catégories, on trouve dans l'ordre :
- le droit de lecture , afficher son contenu --> "r" si permis , "-" si refusé
- le droit d'écriture , modifier son contenu --> "w" si permis , "-" si refusé
- le droit d'exécution , pour un fichier script ou binaire --> "x" si permis , "-" si refusé
- Le fichier de démarrage
/etc/rc.d/rc.sysinit
possède les droitsrwx r-x r-x
Tous les utilisateurs ont donc le droit de lire et d'exécuter ce fichier (ce qui est à éviter); seul root peut le modifier - La table de montage
/etc/fstab
:rw-r--r--
peut être lue par tous, modifiée uniquement par root
La commande stat permet d'obtenir une information plus poussée sur un fichier.
Exemple :
stat /etc/passwd
Permissions des répertoires
Pour les fichiers de type répertoire, la signification des attributs est différente de celle d'un fichier normal.Mais elle est toujours identique pour les 3 catégories d'utilisateurs du répertoire.
La présence d'un tiret "-" signifie toujours l'absence complète de droits
r
: lire le contenu, la liste des fichiers ( avec ls ou dir)w
: modifier le contenu : droits de créer et de supprimer des fichiers dans le répertoire (aveccp, mv, rm
)x
: permet d'accéder aux fichiers du répertoire et de s'y déplacer (aveccd
).Si on attribuew
, il faut attribuer aussix
sur le répertoire.
Exemples :
- Passer les commandes
- A qui appartienent-ils ? Un user quelconque peut-il y créer des sous-rép. ?
- Commenter les 2 cas particuliers
/root
et/tmp
cd /
puis ls -l
, pour lister les répertoires situés à la racine. Attention !
on voit que le droit w
est très étendu, et même dangereux quand il est accordé à un groupe, car un membre du groupe peut supprimer des fichiers dont il n'est pas propriétaire et sur lesquels il n'a même pas de droit d'écriture !
Remarque
Le droit x
sur un répertoire est un préalable indispensable pour qu'un utilisateur (de la catégorie correspondante au positionnement du x
), puisse exercer d'éventuels droits sur les fichiers contenus dans le répertoire.
Changements des droits
et le groupe auquel l'utilisateur appartient (au moment de la création) devient le groupe du fichier.
Remarques préalables
- Mais les droits accordés au propriétaire, au groupe et aux autres dépendent du processus qui a créé le fichier et du masque des droits.
- D'autre part l'administrateur peut être amené à effectuer des changement de propriété (par exemple pour permettre un travail en groupe) et des changements de droits sur des ensembles de fichiers et de répertoires , les étendre ou les restreindre.
- Et root n'est pas soumis à ces restrictions, il a le pouvoir absolu sur ... le système de fichiers. En contre-partie il peut être considéré comme responsable de tout dysfonctionnement !
Changer le propriétaire ou le groupe propriétaire
- Changer le propriétaire
chown [-R] nv-user fichiers
Commande réservée au propriétaire actuel des fichiers ou des répertoires (et àroot
)
L'option-R
(récursif) permet d'agir sur l'ensemble des sous-répertoires.
Exemple :chown -R stage4 /home/stage1
- Changer le groupe propriétaire
chgrp [-R] nv-groupe fichiers
Ceci doit être effectué parroot
ou le propriétaire, à condition que celui-ci soit membre du nouveau groupe.
Exemple :chgrp -R stage4 /home/stage1
- Changer les 2 en même temps
chown nv-user.nv-groupe fichiers
chown new-user.fichiers
Dans ce cas, en plus, le groupe propriétaire des fichiers est changé pour le groupe primaire du nouveau propriétaire.
Changer les permissions sur les fichiers
- Les droits d'accès peuvent être modifiés par le propriétaire des fichiers ou par root (ou équivalent, d'uid 0).
- La commande
chmod
(change mode, change le "mode" des fichiers) peut s'écrire de plusieurs façons équivalentes, sur le modèle :chmod droits fichiers
Le paramètre droits permet de calculer les nouveaux droits d'accès. - Ceux-ci peuvent s'obtenir de façon relative, par ajout (symbole +) ou retrait (-) par rapport aux droits existants, ou bien de façon absolue, en fixant les nouveaux droits qui remplacent les anciens (symbole =).
Ajout, retrait ou fixation des permissions
Pour chaque fichier, on désigne par :
u, g et o
les 3 catégories d'utilisateurs (user, group, other) et de plus para
(=all) tous les utilisateurs.r,w,x
les 3 attributs de chaque fichier, pour chaque catégorie d'utilisateur.+ - =
l'action d'ajouter, de retirer ou de fixer un droit, qui s'applique à chaque catégorie séparément.- les changements, sur le modèle "à quelle(s) catégorie(s), quelle action, quel(s) droit(s)" sont alors notés symboliquement :
[u g o a] [+ - =] [r w x] - par exemple chmod u+x fichier signifie "ajouter le droit d'exécution au propriétaire du fichier"
- on peut regrouper les catégories si on veut exercer la même action :
chmod ug+w fichier
"ajouter le droit d'exécution au propriétaire et au groupe"chmod go-rwx fichier
"enlever tous droits d'accès à tous les utilisateurs, sauf au propriétaire"
Notation relative (aux droits existants)
chmod [-R]
fichiers - L'option -R (récursif) permet de modifier les permissions de tous les sous-répertoires.
- exemple : chmod [-R] go-rwx /home/toto enlève tous les permissions d'accès des fichiers du rép. personnel de toto (et des sous-rép.), à tous sauf au propriétaire, c'est-à-dire
toto
.
Notation absolue
- Pour chaque groupe, elle permet de fixer les nouveaux droits qui remplacent les anciens. Si une catégorie n'est pas présente, ses anciens droits s'appliquent.
- chmod u=rwx,g=rw,o=r fichiers remplace les permissions précédentes des fichiers, en les fixant à
-rwxrw-r--
Attention : aucun espace dans la liste des droits, pas même autour des éventuelles virgules - chmod u=rwx,g=r fichiers fixe les permissions à
-rwxr--???
en ne changeant pas les permissions précédentes du groupe other - chmod u=rwx,g=r,o= fichiers fixe les permissions à
-rwxr-----
Remarque importante
Le "super-utilisateur" root n'est pas soumis aux restrictions des permissions. Une petite expérience :- Vérifier que
/etc/shadow
est inaccessible même en lecture aux utilisateurs - Vérifier que ses permissions sont
--------- ou 400
en octal, seul le propriétaire root peut lire - Root supprime ce droit de lecture :
chmod u-r /etc/shadow
Vérifier/etc/shadow
- Root peut le lire, le copier et le modifier, ce n'est bien sûr pas recommandé, mais root peut tout se permettre (raison de plus pour ne jamais se connecter
root
, sans nécessité !) - Mais bonne nouvelle, root peut donc retrouver de fichiers appartenant à des utilisateurs ayant perdu leurs droits d'accès !
[stagex@p00 stagex]$ cp ./bashrc ./bashrc1
[stagex@p00 stagex]$ chmod ugo= ./bashrc1 aucune permission sur le fichier !
[stagex@p00 stagex]$ cat ./bashrc1 bien sûr il est totalement protégé en lecture
[root@p00 stagex]# cat ./bashrc1 mais pas pour root !
Compléments .. indispensables
Notation octale des permissions
Il existe une autre facon d'indiquer les permissions de chaque catégorie, plus simple en utilisant la numération octale Voici la table de correspondance entre les 8 chiffres en numérotation octale (base 8) et les 8 valeurs de droits fichiers.
Par convention la présence d'un droit est noté 1, l'absence 0.
Binaire ----- Droit ----- Octal
000 -------- (---) ------- 0
001 -------- (--x) ------- 1
010 -------- (-w-) ------- 2
011 -------- (-wx) ------- 3
100 -------- (r--) ------- 4
101 -------- (r-x) ------- 5
110 -------- (rw-) ------- 6
111 -------- (rwx) ------- 7
Synthèse : notation globale pour les 3 catégories
propriétaire | groupe | autre | ||||||
---|---|---|---|---|---|---|---|---|
lecture | écriture | exécution | lecture | écriture | exécution | lecture | écriture | exécution |
400 | 200 | 100 | 40 | 20 | 10 | 4 | 2 | 1 |
Pour obtenir les permissions exprimées en octal, il suffit d'ajouter en octal les nombres de la table de correspondance ci-dessus, pour lesquels les droits sont positionnés.
Exemples
chmod 700 /home/rep-a-moi droits par défaut pour un rép. personnel.
ls -l /home/rep-a-moi
-->drwx------
Les 2 commandes suivantes sont équivalentes :
chmod 764 test
chmod u=rwx,g=rw,o=r testls -l test
-rwxrw-r--
Le masque de protection umask
- Rappelons les règles simples de propriété qui s'appliquent à la création d'un fichier ou d'un répertoire :
- son propriétaire est l'utilisateur qui l'a créé
- son groupe est le groupe primaire de ce même utilisateur
- Mais quelles sont les permissions attribuées par défaut à l'utilisateur propriétaire, au groupe propriétaire et à tous les autres ?
Les permissions maximales accordées par un fichier et un répertoire sont 666 (-rw-rw-rw-) et 777 (-rwxrwxrwx).
On peut restreindre ces permissions lors de sa création. C'est le rôle de la commandeumask
de fixer les permissions masquées, autrement dit les droits non accordés aux fichiers et répertoires lors de leur création. - Exemple de calcul de permissions effectives, affectées lors de la création d'un répertoire, par un utilisateur dont le masque de protection est
027
777 = 111 111 111 permissions maxi = rwx rwx rwx
- 027 = 000 010 111 masque de protection
= 750 = 111 101 000 permissions effectives = rwx r-x --- - La commande
umask
-
umask
affiche le masque de l'utilisateur actif
Quelles sont les valeurs des masques par défaut deroot
et des autres utilisateurs ? -
umask -S
affiche les permissions correspondantes au masque, sous forme symbolique. -
umask masque
fixe les permissions ultérieures de création des fichiers de l'utilisateur actif, conformément à masque, en notation octale.
Attention ! le changement ne s'applique qu'à la présente session.
- Pour la rendre permanente, on peut intervenir sur un fichier profile :
- Dans le fichier profil général
/etc/profile
, on peut modifier la règle habituelle :if [ $UID == 0 ] ; then umask 022 ; else umask 077 ; fi
- Pour agir au niveau des utilisateurs, ajouter la ligne
umask masque
dans le fichier de profil personnel$HOME/.bash_profile
- Dans le fichier profil général
-
Les droits étendus
Le droit SUID
- Sa présence permet à un fichier exécutable de s'exécuter sous l'identité et donc les droits de son propriétaire, à la place des droits de l'utilisateur actuel qui l'exécute.
- Il s'agit d'un dispositif de sécurité essentiel qui autorise un utilisateur quelconque (par rapport à la commande) à bénéficier de droits plus étendus que les siens (souvent ceux de root), pour exécuter la commande agir sur d'autres fichiers indispensables, juste le temps et sous le contrôle de l'exécution de la commande, SANS qu'il soit nécessaire d'attribuer ces droits en permanence sur les fichiers.
- Ce droit est noté symboliquement s et se positionne à la place du
x
du propriétaireu
(mais sans écraser le droitx
)
Sa valeur octale est4000
- Exemple significatif
Examiner les droits du fichier exécutable/usr/bin/passwd
, qui permet de (re)définir un mot de passe et le comparer à ceux du fichier/etc/shadow
qui contient les mots de passe cryptés.Observez :
Comme le droit
ll /etc/shadow
-r-------- root root shadow
ll -l /usr/bin/passwd
-r-sr-xr-x root bin passwdx
est accordé à tous, chacun peut donc exécuter la commandepasswd
, mais personne ne posséde pas lui-même le droit d'écriture dans le fichier/etc/shadow
qui doit le stocker.
Le positionnement du SUID permet d'agir en tant queroot
lors de la demande d'accès au fichier et comme root a tous les droits, il est alors possible de mettre à jour ce fichier des mots de passe. Manipulation
Comment connaitre les commandes comme passwd, qui offre cette permission SUID ? Voici plusieurs façonscd /usr/bin
# grep filtre les lignes produites par ls en utilisant
# l'expression rationnelle ^...s
ls -l | grep "^...s"
# pour afficher tous les fichiers possédant le SUID
cd /
ls -lR | grep "^...s"
# recherche parmi les fichiers ordinaires ceux qui ont au moins le droits
find / -type f -perm +4000
Le droit SGID
- Pour un fichier exécutable, il fonctionne de la même façon que le
SUID
, mais transposé aux membres du groupe.Exemple
- Examiner les droits symboliques de la commande d'impression
/usr/bin/lpr
- Quelle est sa valeur octale ?
- Si une imprimante a été installée, un répertoire
lp
a été créé dans/var/spool/lpd
. Or la commande lpr écrit dans ce répertoire. Comment un utilisateur quelconque peut-il alors y écrire le fichier d'impression ?
- Examiner les droits symboliques de la commande d'impression
- Positionné sur un répertoire, ce droit modifie le groupe propriétaire d'un fichier créé dans ce répertoire.
Un fichier créé dans un tel répertoire, verra son groupe propriétaire modifié :
Ce ne sera plus le groupe primaire du propriétaire qui l'a créé (règle habituelle), mais à la place, le groupe propriétaire du répertoire lui-même.
Autrement dit, ce droits
posé sur un répertoire, met en place un mécanisme d'héritage de groupe, de répertoire conteneur à fichiers contenus. - Notation symbolique
s
, mis à la place du x du groupe, valeur octale2000
Le "sticky bit"
- Ce droit spécial, traduit en "bit collant", a surtout un rôle important sur les répertoires.
Il réglemente le droitw
sur le répertoire, en interdisant à un utilisateur quelconque de supprimer un fichier dont il n'est pas le propriétaire
- Ce droit noté symboliquement t occupe par convention la place du droit
x
sur la catégorieother
de ce répertoire, mais bien entendu il ne supprime pas le droit d'accèsx
(s'il est accordé).
Justement, si ce droitx
n'est pas accordé à la catégorieother
, à la place de t c'est la lettre T qui apparaitra.
Sa valeur octale associée vaut 1000. - Pour positionner ce droit :
chmod +t rep
--> d ... ... ..t rep si le répertoire a le droit x pour tous
--> d ... ... ..T rep sinon - Exemple
Le sticky bit est présent sur le rép./tmp
Pour quelle raison ?ls -l /
........
drwxrwxrwt root root tmp/ - Exercice 4 : sécuriser le partage d'un répertoire.