web-dev-qa-db-fra.com

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

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

168
Ken Li

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

Ainsi, par exemple, pour accéder à dir/subdir/file, vous devez disposer d'une autorisation d'exécution sur dir et dir/subdir, plus les autorisations sur file pour le type d'accès souhaité. En entrant dans les cas d'angle, je ne sais pas si c'est universel que vous avez 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 disposez des autorisations d'exécution sur /foo/bar mais pas le /foo, mais votre répertoire actuel est /foo/bar, vous pouvez accéder aux fichiers dans /foo/bar par un chemin relatif mais pas par un chemin absolu. Vous ne pouvez pas passer à /foo/bar dans ce scénario; un processus plus privilégié a vraisemblablement fait cd /foo/bar avant de devenir sans privilège. Si un fichier possède plusieurs liens physiques, le chemin d'accès 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, si sym est un lien symbolique vers le répertoire dir, vous devez exécuter l'autorisation sur dir pour accéder à sym/foo. Les autorisations sur le lien symbolique lui-même peuvent ou non dépendre 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 limite effectivement un utilisateur à une partie de l'arborescence du répertoire (dans laquelle un processus plus privilégié doit se transformer). Cela nécessite que les listes de contrôle d'accès soient utiles. Par exemple, si / et /home sont interdits à joe (setfacl -m user:joe:0 / /home) et /home/joe est le répertoire personnel de joe, alors joe ne pourra pas accéder au reste du système (y compris l'exécution de scripts Shell avec /bin/sh ou des binaires liés dynamiquement qui doivent accéder à /lib, vous devez donc 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 la permission d'exécuter sans donner la permission de lecture est parfois utile: les noms des entrées servent de mots de passe pour y accéder. Je ne peux penser à aucune utilité pour donner une autorisation de lecture ou d'écriture à un répertoire sans autorisation d'exécution.

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
34
goovim

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 de 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.

4
Kemin Zhou

Vous pouvez créer le lien dur 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 ici est que vous devez créer la liaison matérielle avant de perdre votre privilège d'exécution sur le répertoire parent

$ ln foo/bar/test_privs privs_test_checking
1
Kamal