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?
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éponses:
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 dir
et dir/subdir
, ainsi que des autorisations file
pour 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/bar
mais pas sur /foo
, mais que votre répertoire actuel l'est /foo/bar
, vous pouvez accéder aux fichiers /foo/bar
via un chemin relatif, mais pas via un chemin absolu. Vous ne pouvez pas changer en /foo/bar
dans ce scénario; un processus plus privilégié a vraisemblablement été mis en place cd /foo/bar
avant 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 sym
s'agit d'un lien symbolique vers le répertoire dir
, vous devez disposer de l'autorisation d'exécution dir
pour 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 /home
sont pas autorisés dans le répertoire personnel de joe
( setfacl -m user:joe:0 / /home
) et /home/joe
is joe
, alors, joe
ils ne pourront pas accéder au reste du système (y compris l'exécution de scripts de shell avec /bin/sh
des 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.
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
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.
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