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