Les autorisations du répertoire parent importent-elles lors de l'accès à un sous-répertoire?

160

Si j'ai un dossier racine avec une autorisation restrictive, disons 600, et si les dossiers / fichiers enfants ont une autorisation 777, tout le monde pourra-t-il lire / écrire / exécuter le fichier enfant même si le dossier racine en a 600?

Ken Li
la source
12
Notez que le fait de modifier un répertoire à 600 le rend inaccessible, même au propriétaire, car vous avez besoin de l'autorisation d'exécution pour y
accéder

Réponses:

183

La règle précise est la suivante: vous pouvez parcourir un répertoire si et seulement si vous disposez d'une autorisation d'exécution.

Ainsi, par exemple, pour pouvoir accéder dir/subdir/file, vous devez disposer des autorisations d’exécution sur diret dir/subdir, ainsi que des autorisations filepour le type d’accès souhaité. Pour entrer dans les cas critiques, je ne sais pas s'il est universel que vous ayez besoin d'une autorisation d'exécution sur le répertoire actuel pour accéder à un fichier via un chemin relatif (vous le faites sous Linux).

La façon dont vous accédez à un fichier est importante. Par exemple, si vous avez des autorisations d'exécution sur /foo/barmais pas sur /foo, mais que votre répertoire actuel l'est /foo/bar, vous pouvez accéder aux fichiers /foo/barvia un chemin relatif, mais pas via un chemin absolu. Vous ne pouvez pas changer en /foo/bardans ce scénario; un processus plus privilégié a vraisemblablement été mis en place cd /foo/baravant d’aller sans privilège. Si un fichier contient plusieurs liens physiques, le chemin que vous utilisez pour y accéder détermine vos contraintes d'accès.

Les liens symboliques ne changent rien. Le noyau utilise les droits d'accès du processus appelant pour les parcourir. Par exemple, s'il syms'agit d'un lien symbolique vers le répertoire dir, vous devez disposer de l'autorisation d'exécution dirpour y accéder sym/foo. Les autorisations sur le lien symbolique lui-même peuvent ou non avoir de l'importance en fonction du système d'exploitation et du système de fichiers (certains les respectent, d'autres les ignorent).

La suppression de l'autorisation d'exécution du répertoire racine restreint de fait un utilisateur à une partie de l'arborescence de répertoires (processus qu'un processus plus privilégié doit transformer). Cela nécessite que les listes de contrôle d'accès soient utiles. Par exemple, si /et ne /homesont pas autorisés dans le répertoire personnel de joe( setfacl -m user:joe:0 / /home) et /home/joeis joe, alors, joeils ne pourront pas accéder au reste du système (y compris l'exécution de scripts de shell avec /bin/shdes binaires ou des binaires liés dynamiquement qui doivent y accéder) /lib. d besoin d'aller plus loin pour une utilisation pratique, par exemple setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib).

L'autorisation de lecture sur un répertoire donne le droit d'énumérer les entrées. Donner une autorisation d'exécution sans donner une permission de lecture est parfois utile: les noms des entrées servent de mots de passe pour y accéder. Je ne vois aucune utilité à donner une autorisation de lecture ou d'écriture à un répertoire sans une autorisation d'exécution.

Gilles
la source
32

Non. L'autorisation du dossier racine limite l'autorisation des fichiers enfants. Tu peux l'essayer.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

J'ai compris:

$ cat: ./rootfolder/childfile: permission denied
goovim
la source
4

Vous pouvez rendre le répertoire enfant accessible en écriture, même si le répertoire parent ne l’est pas. Je fais ça pour les groupes.

Par exemple: le répertoire parent appartient au codeur du groupe

drwxr-sr-x

répertoire enfant

drwxrwsr-x

Vous (tout membre du groupe de codeurs) pouvez toujours écrire dans le répertoire enfant mais pas dans le répertoire parent.

Kemin Zhou
la source
1

Vous pouvez créer le lien physique pour accéder au fichier même si vous ne disposez pas d'un privilège d'exécution sur le répertoire parent. Mais le problème est que vous devez créer le lien dur avant de perdre votre privilège d'exécution sur le répertoire parent.

$ ln foo/bar/test_privs privs_test_checking
Kamal
la source