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 ?
Réponse acceptée :
La règle précise est la suivante :vous pouvez parcourir un répertoire si et seulement si vous avez l'autorisation d'exécution dessus.
Ainsi par exemple pour accéder à dir/subdir/file
, vous avez besoin d'une autorisation d'exécution sur dir
et dir/subdir
, plus les permissions sur file
pour le type d'accès que vous souhaitez. Dans les cas particuliers, je ne sais pas s'il est universel que vous ayez besoin d'une autorisation d'exécution sur le répertoire en cours 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/bar
mais pas sur /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 probablement fait cd /foo/bar
avant de passer sans privilège. Si un fichier a 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, si sym
est un lien symbolique vers le répertoire dir
, vous avez besoin d'une autorisation d'exécution sur dir
pour accéder à sym/foo
. Les autorisations sur le lien symbolique lui-même peuvent ou non avoir de l'importance selon le système d'exploitation et le système de fichiers (certains les respectent, d'autres les ignorent).
La suppression de l'autorisation d'exécution du répertoire racine restreint effectivement un utilisateur à une partie de l'arborescence des répertoires (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 joe
le répertoire personnel de, puis 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 devrez donc aller plus loin pour une utilisation pratique, par ex. 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écution 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 vois aucune utilité à donner une autorisation de lecture ou d'écriture à un répertoire sans autorisation d'exécution.