Droits d`accès (suid,guid,sticky)

Transcription

Droits d`accès (suid,guid,sticky)
Table des matières
1
SUID, SGID, STICKY BIT ........................................................................................ 2
1.1 Fichiers et Inodes ................................................................................................. 2
1.2 Permissions........................................................................................................... 5
1.3 Permission sur un fichier ordinaire ...................................................................... 5
1.4 Permission sur un répertoire ................................................................................. 6
1.5 Changement des permissions ............................................................................... 6
1.6 Permissions par défaut ......................................................................................... 8
1.7 Visualisation des permissions .............................................................................. 8
1.8 Recherche à partir des permissions ...................................................................... 8
_____________________________________________________________________
 2011 Hakim Benameurlaine
1
1 SUID, SGID, STICKY BIT
1.1
Fichiers et Inodes
Un système de fichiers UNIX peut contenir plusieurs types de fichiers :

des fichiers ordinaires (-)

des répertoires (d)

des fichiers d’entrée/sortie caractère par caractère (c)

des fichiers d’entrée/sortie bloc par bloc (b)

des liens symboliques (l)

des pipelines (p)

des sockets (s)
Au niveau du système d’exploitation, chaque fichier est caractérisé par une structure
interne nommée inode.
 Les inodes sont identifiés par un numéro unique pour un système de fichier
donné.
 Les inodes contiennent toute l’information permettant de décrire un fichier (type,
propriétaire, groupe, permissions, taille, temps du dernier accès, temps de dernière
modification).
 Les inodes ne contiennent aucune donnée; par contre, ils sont associés à des blocs
de données dans lesquels est stocké le contenu d’un fichier.
 Les inodes et les blocs de données sont deux entités distinctes; il faut leur réserver
des zones fixes et distinctes sur une partition.
[root@localhost root]#
touch f1
[root@localhost root]# stat f1
File: "f1"
Size: 0
Blocks: 0
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290042
Access: (0644/-rw-r--r--) Uid: (
root)
Access: Tue Apr 20 22:13:15 2004
Modify: Tue Apr 20 22:13:15 2004
Change: Tue Apr 20 22:13:15 2004
[root@localhost root]#
IO Block: 0/
Links: 1
root)
Gid: (
0/
more f1
[root@localhost root]# stat f1
File: "f1"
Size: 0
Blocks: 0
4611692065741336576 Regular File
IO Block: -
_____________________________________________________________________
 2011 Hakim Benameurlaine
2
Device:
Access:
root)
Access:
Modify:
Change:
802h/2050d
Inode: 290042
(0644/-rw-r--r--) Uid: (
0/
Links: 1
root)
Gid: (
0/
Tue Apr 20 22:13:24 2004
Tue Apr 20 22:13:15 2004
Tue Apr 20 22:13:15 2004
[root@localhost root]#
echo date >> f1
[root@localhost root]# stat f1
File: "f1"
Size: 5
Blocks: 8
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290042
Access: (0644/-rw-r--r--) Uid: (
root)
Access: Tue Apr 20 22:13:24 2004
Modify: Tue Apr 20 22:13:41 2004
Change: Tue Apr 20 22:13:41 2004
[root@localhost root]#
IO Block: 0/
Links: 1
root)
Gid: (
0/
touch f1
[root@localhost root]# stat f1
File: "f1"
Size: 5
Blocks: 8
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290042
Access: (0644/-rw-r--r--) Uid: (
root)
Access: Tue Apr 20 22:15:00 2004
Modify: Tue Apr 20 22:15:00 2004
Change: Tue Apr 20 22:15:00 2004
[root@localhost root]# ls -li
total 320
289426 -rwxr--r-1 root
mbackup
290019 -rw-r--r-1 root
mbackup1.tar
.
.
.
root
root
IO Block: 0/
Links: 1
root)
Gid: (
69 Sep
8
0/
2003
10240 Mar 11 12:21
_____________________________________________________________________
 2011 Hakim Benameurlaine
3
[root@localhost root]#
touch aaa
[root@localhost root]# stat aaa
File: "aaa"
Size: 0
Blocks: 0
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290041
Access: (0644/-rw-r--r--) Uid: (
root)
Access: Tue Apr 20 23:31:44 2004
Modify: Tue Apr 20 23:31:44 2004
Change: Tue Apr 20 23:31:44 2004
[root@localhost root]#
0/
Links: 1
root)
Gid: (
0/
chmod 777 aaa
[root@localhost root]# stat aaa
File: "aaa"
Size: 0
Blocks: 0
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290041
Access: (0777/-rwxrwxrwx) Uid: (
root)
Access: Tue Apr 20 23:31:44 2004
Modify: Tue Apr 20 23:31:44 2004
Change: Tue Apr 20 23:32:17 2004
[root@localhost root]#
IO Block: -
IO Block: 0/
Links: 1
root)
Gid: (
0/
mv aaa bbb
[root@localhost root]# stat bbb
File: "bbb"
Size: 0
Blocks: 0
4611692065741336576 Regular File
Device: 802h/2050d
Inode: 290041
Access: (0777/-rwxrwxrwx) Uid: (
root)
Access: Tue Apr 20 23:31:44 2004
Modify: Tue Apr 20 23:31:44 2004
Change: Tue Apr 20 23:32:30 2004
IO Block: 0/
Links: 1
root)
Gid: (
0/
_____________________________________________________________________
 2011 Hakim Benameurlaine
4
1.2
Permissions
Tout fichier (au sens large) possède des permissions stockées sur 12 bits dans son
inode.
Ces 12 bits définissent :
 Le comportement spécial des exécutables et des répertoires (SetUID,
SetGID et sticky bit)
 Les restrictions d’accès pour l’utilisation (lecture, écriture et exécution).
 Les restrictions d’accès pour le groupe (lecture, écriture et exécution).
 Les restrictions d’accès pour les autres (lecture, écriture et exécution).
SetUID
s
SetGID
s
Sticky
t
Lecture
r
Ecriture
w
Exécution
x
Les différents niveaux d’accès (utilisateur, groupe et autres) sont exclusifs. Ainsi, les
privilèges du propriétaire d’un fichier seront définis par la catégorie utilisateur, peu
importe les autres catégories.
utilisateur
u
groupe
g
autres
o
Un utilisateur peut, par exemple, n’avoir aucune permission sur un de ses fichiers,
alors que le groupe et les autres ont toutes les permissions !
1.3
Permission sur un fichier ordinaire
Sur un fichier ordinaire, les bits de lecture, écriture et exécution signifient
respectivement qu’on peut consulter le contenu du fichier, modifier son contenu et
exécuter son contenu (script Shell ou exécutable binaire).
Les bits SetUID, SetGID et sticky n’ont de signification que sur les
exécutables :
 Lorsqu’un utilisateur exécute un programme dont le bit SetUID est
positionné, alors le processus aura les privilèges du propriétaire du
programme (et non pas ceux de l’utilisateur).
 Lorsqu’un utilisateur exécute un programme dont le bit SetGID est
positionné, alors le processus aura les privilèges du groupe du programme (et
non pas de celui de l’utilisateur).
 Il est recommandé de ne jamais mettre les bits SetUID et SetGID sur des
scripts shell.
 Lorsqu’on exécute un programme dont le sticky bit est positionné, alors le
programme restera en mémoire après son exécution, pour accélérer les accès
subséquents.
Cette fonctionnalité est ignorée par tous les noyaux récents.
_____________________________________________________________________
 2011 Hakim Benameurlaine
5
1.4
Permission sur un répertoire
Pour bien comprendre les permissions sur un répertoire, il faut voir celui-ci comme
un catalogue, ou une table, contenant des noms de fichiers et les inodes
correspondants.
Sur un répertoire, les bits de lecture, écriture et exécution signifient respectivement
qu’on peut lister le contenu du répertoire, ajouter/renommer/supprimer des fichiers à
l’intérieur, et accéder à l’inode des fichiers à l’intérieur.
Les bits de lecture et exécution sont indispensables si on veut pouvoir utiliser ls –l
pour lister le contenu du répertoire. Ne mettre que le bit d’exécution permet de
donner accès au répertoire uniquement à ceux qui en connaissent le contenu.
Le bit d’écriture est très dangereux. S’il est positionné pour le groupe et/ou les autres,
alors ceux-ci pourront ajouter/renommer/supprimer des fichiers quelles que soient les
permissions sur les fichiers eux-mêmes !
Le SetUID n’a aucune signification.
Le SetGID fait en sorte que tout fichier créé à l’intérieur du répertoire aura le même
groupe que le répertoire (et non pas nécessairement le même groupe que son
créateur).
Le sticky bit permet de restreindre les dangers du bit d’écriture. Il fait en sorte
que tout fichier ne pourra être supprimé que par son propriétaire (et non pas par
n’importe qui d’autre).
1.5
Changement des permissions
Les permissions peuvent être changées par le propriétaire du fichier et par root à
l’aide de la commande chmod.
On peut utiliser la syntaxe avec des lettres ou la syntaxe octale :
chmod u=rwx, g=rx, o= fichier
chmod 750 fichier
Le bit SetUID peut être ajouté avec des lettres (u+s) ou en octal (valeur 4000)
Le bit SetGID peut être ajouté avec des lettre (g+s) ou en valeur octal (valeur
2000).
Le sticky bit peut être ajouté avec des lettres (o+t) ou en octal (valeur 1000).
_____________________________________________________________________
 2011 Hakim Benameurlaine
6
Lorsqu’on travaille en octal, et qu’on ne donne des valeurs que sur 3 chiffres
(exemple 750), alors le premier chiffre est considéré comme étant nul (750 équivaut à
0750)
[root@localhost root]#
chmod u+s f1
[root@localhost root]#
-rwSr--r-1 root
ls -l f1
[root@localhost root]#
chmod u+x f1
[root@localhost root]#
-rwsr--r-1 root
ls -l f1
[root@localhost root]#
chmod g+s f1
[root@localhost root]#
-rwsr-Sr-1 root
ls -l f1
[root@localhost root]#
chmod g+x f1
[root@localhost root]#
-rwsr-sr-1 root
ls -l f1
[root@localhost root]#
chmod o+t f1
[root@localhost root]#
-rwsr-sr-T
1 root
ls -l f1
[root@localhost root]#
chmod o+x f1
[root@localhost root]#
-rwsr-sr-t
1 root
ls -l f1
root
root
root
root
root
root
5 Apr 20 22:15 f1
5 Apr 20 22:15 f1
5 Apr 20 22:15
f1
5 Apr 20 22:15
f1
5 Apr 20 22:15
f1
5 Apr 20 22:15
f1
_____________________________________________________________________
 2011 Hakim Benameurlaine
7
1.6
Permissions par défaut
Des permissions par défaut sont attribuées lors de la création de fichiers suivant la
valeur du umask.
Ce masque est une valeur octale sur 3 chiffres.




Les permissions des fichiers ordinaires correspondent à la valeur du masque
sur laquelle est fait un ou exclusif (XOR) avec la valeur 666.
Les permissions des répertoires correspondent à la valeur du masque sur
laquelle est fait un OU exclusif (XOR) avec la valeur 777.
Le plus simple est de considérer un répertoire dont les permissions sont
rwxrwxrwx et de déterminer quelles sont celles qu’on veut enlever par
défaut. On code ces permissions en octal et on obtient la valeur du umask.
Par exemple des répertoires dont les permissions par défaut sont rwxr-x-correspond à ne rien enlever à l’utilisateur (0), à enlever l’écriture au groupe
(2) et à tout enlever aux autres (7). Le umask est donc 027.
[root@localhost root]#
0022
1.7
umask
Visualisation des permissions
Les permissions sont listées avec la commande ls –l
Cette commande ne montre les attributs que sur 9 bits, même s’il y en a 12 en réalité :




1.8
Si le SetUID est positionné, alors le x de l’utilisateur sera remplacé par un
s. Par exemple rwsr-xr-x
Si le bit SetGID est positionné, alors le x du groupe sera remplacé par un s.
Par exemple rwxr-sr-x
Si le sticky bit est positionné, alors le x des autres sera remplacé par un
t. Par exemple rwxrwxrwt
Lorsque ces bits sont positionnés alors que le bit d’exécution correspondant ne
l’est pas, ils figurent en majuscules. Par exemple rw-r- -r-T
Recherche à partir des permissions
La commande find permet de rechercher avec la directive –perm les fichiers ayant
certaines permissions. La syntaxe est :
find répertoire –perm permission
-print
_____________________________________________________________________
 2011 Hakim Benameurlaine
8
La permission doit être exprimée en octal. Elle peut être précédée d’un signe (-) ou
d’un signe (+) pour préciser respectivement que tous ou certains bits doivent être
positionnés, mais qu’il peut y en avoir d’autres.
Par exemple, les deux commandes suivantes permettent de localiser à travers tout le
système de fichiers les fichiers qui ont le SetUID ou SetGID positionnés :
find
/ -perm +6000 -print
find /
-perm -4000 -o -perm -2000 -print
[root@localhost root]#
mkdir /home/reptest3
[root@localhost root]# cd /home/reptest3
[root@localhost reptest3]# touch f1 f2 f3 f4 f5 f6 f7 f8
[root@localhost
[root@localhost
[root@localhost
[root@localhost
[root@localhost
[root@localhost
[root@localhost
[root@localhost
reptest3]#
reptest3]#
reptest3]#
reptest3]#
reptest3]#
reptest3]#
reptest3]#
reptest3]#
chmod
chmod
chmod
chmod
chmod
chmod
chmod
chmod
[root@localhost
-rwx-----1
----rwx--1
-------rwx
1
---x-----1
------x--1
---------x
1
-rwxrwxrwx
1
---------1
reptest3]# ls -l
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
700
070
007
100
010
001
777
000
f1
f2
f3
f4
f5
f6
f7
f8
0
0
0
0
0
0
0
0
Apr
Apr
Apr
Apr
Apr
Apr
Apr
Apr
21
21
21
21
21
21
21
21
08:51
08:51
08:51
08:51
08:51
08:51
08:51
08:51
f1
f2
f3
f4
f5
f6
f7
f8
[root@localhost reptest3]# find . -perm 010 -print
./f5
[root@localhost reptest3]# find . -perm -010 -print
./f2
./f5
./f7
[root@localhost reptest3]# find . -perm +010 -print
.
./f2
./f5
./f7
[root@localhost reptest3]# find . -perm 777 -print
./f7
_____________________________________________________________________
 2011 Hakim Benameurlaine
9
[root@localhost reptest3]# find . -perm -777 -print
./f7
[root@localhost reptest3]# find . -perm +777 -print
./f1
./f2
./f3
./f4
./f5
./f6
./f7
[root@localhost reptest3]# find -perm 000 -print
./f8
[root@localhost reptest3]# find -perm +000 -print
[root@localhost reptest3]# find -perm -000 -print
./f1
./f2
./f3
./f4
./f5
./f6
./f7
./f8
[root@localhost reptest3]# find -perm +700 -print
./f1
./f4
./f7
[root@localhost reptest3]# find -perm -700 -print
./f1
./f7
[root@localhost reptest3]# find -perm +070 -print
./f2
./f5
./f7
[root@localhost reptest3]# find . -perm -070 -print
./f2
./f7
[root@localhost reptest3]# find -perm -246
./f7
[root@localhost reptest3]# find -perm +246
./f1
./f2
./f3
./f7
_____________________________________________________________________
 2011 Hakim Benameurlaine
10