J'ai un peu de difficulté à comprendre ce que signifie l'autorisation d'exécution pour les répertoires. Dois-je bien comprendre que tout élément d'un répertoire pour lequel un utilisateur ne dispose pas de droits x est inaccessible même si les éléments du répertoire lui confèrent des droits spécifiques?
Ou bien l'utilisateur aura-t-il toujours un accès direct aux éléments du répertoire, mais ne pourra tout simplement pas répertorier ce qu'il contient?
(Ce que j'essaie vraiment de comprendre, c'est à quel point un répertoire est protégé des accès des autres utilisateurs s'ils ne disposent pas de l'autorisation x pour cela.)
x bit pour répertoire est également appelé bit de recherche. En fait, cela vous permet d'accéder aux inodes des fichiers listés dans le dossier. Donc, si vous voulez accéder à /home/user/foo/bar.txt, vous devez avoir un accès à la recherche sur chaque ancêtre de bar.txt
Citant de la page
Comme les répertoires ne sont pas utilisés de la même manière que les fichiers normaux, les autorisations fonctionnent légèrement (mais légèrement) différemment. Une tentative pour répertorier les fichiers dans un répertoire nécessite une autorisation de lecture pour le répertoire, mais pas sur les fichiers qu'il contient. Toute tentative d'ajouter un fichier à un répertoire, de supprimer un fichier d'un répertoire ou de renommer un fichier requiert une autorisation en écriture pour le répertoire, mais (peut-être de manière surprenante) pas pour les fichiers qu'il contient. L'autorisation d'exécution ne s'applique pas aux répertoires (un répertoire ne peut pas également être un programme). Mais ce bit d'autorisation est réutilisé pour les répertoires à d'autres fins.
Une autorisation d’exécution est nécessaire sur un répertoire pour pouvoir y être insérée (c’est-à-dire pour en faire un répertoire de travail courant).
L'exécution est nécessaire sur un répertoire pour accéder aux informations d'inode des fichiers qu'il contient. Vous en avez besoin pour rechercher un répertoire afin de lire les inodes des fichiers qu’il contient. Pour cette raison, l'autorisation d'exécution sur un répertoire est souvent appelée autorisation de recherche.
Une autorisation de recherche est requise dans de nombreuses situations courantes. Considérons la commande cat/home/user/foo. Cette commande nécessite clairement une autorisation de lecture pour le fichier foo. Mais à moins que vous n'ayez l'autorisation de recherche sur les répertoires /,/home et/home/user, cat ne peut pas localiser l'inode de foo et ne peut donc pas le lire! Vous devez disposer d'une autorisation de recherche sur chaque répertoire d'ancêtre pour accéder à l'inode de tout fichier (ou répertoire), et vous ne pouvez pas lire un fichier sans accéder à son inode.
Veuillez en lire plus à la section section du répertoire des autorisations de fichiers.
Mise à jour: Leo a posé une très bonne question. Si nous connaissons l'inode, pouvons-nous accéder à un fichier à partir d'un répertoire dont le bit x est non défini? Je crois que nous ne devrions pas pouvoir le faire. Je ne l'ai pas testé avec le programme c, mais plutôt avec des commandes pratiques bash pour le confirmer.
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775
Puisque vous demandez des annuaires:
lire signifie: lire le contenu, c'est-à-dire les lister avec ls.
écrire signifie: écrire dans le réalisateur. c'est-à-dire créer des fichiers ou des sous-répertoires.
exécuter signifie: entrer dans ce répertoire.
les autorisations de lecture et d'exécution peuvent être un peu délicates pour les répertoires.
Par exemple, si vous avez des autorisations en lecture mais que vous n'exécutez pas, vous pouvez lister le contenu du répertoire mais ne pas y accéder. En outre, vous ne pouvez pas répertorier des fichiers ou des répertoires spécifiques même si vous connaissez leurs noms.
Si vous avez l'autorisation d'exécuter mais que vous ne lisez pas, vous pouvez y accéder mais ne pouvez pas lister les fichiers directement. Mais si vous connaissez les noms des fichiers ou des répertoires, vous pouvez les lister.
L'autorisation d'exécution sur les répertoires signifie:
La possibilité de cd dans ce répertoire et d’accéder aux fichiers de ce répertoire.
Si vous n'avez pas le droit x
sur votre répertoire, vous ne pouvez pas:
cd
name__)Exemple:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ cd testdir
bash: cd: testdir: Permission denied
$ cat testdir/a
cat: testdir/a: Permission denied
$ chmod 700 testdir
$ cat testdir/a
Some text.
Lisez Confusion sur les autorisations de fichier Linux, point 2 pour une bonne introduction sur le sujet.
La seule chose que l'autorisation x
ne semble pas empêcher, est d'accéder aux noms des fichiers de ce répertoire.
Exemple:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a b