Les autorisations des utilisateurs * nix sont très simples, mais les choses peuvent devenir désordonnées lorsque vous devez prendre en compte tous les accès au répertoire parent avant d’atteindre un fichier donné. Comment puis-je vérifier si l'utilisateur a suffisamment de privilèges? Si non, alors quel répertoire refuse l'accès?
Par exemple, supposons un utilisateur joe
et le fichier /long/path/to/file.txt
. Même si a file.txt
été chmodé à 777, joe doit toujours pouvoir accéder /long/
, et alors /long/path/
et puis /long/path/to/
avant. Ce dont j'ai besoin, c'est d'un moyen de vérifier automatiquement cela. Si joe
n'a pas accès, je voudrais aussi savoir où il a été refusé. Peut-être qu'il peut accéder /long/
, mais pas /long/path/
.
la source
namei <path> || exit 1
vous permet de détecter très facilement un problème d’autorisation dans un script.Vous pouvez utiliser bash pour faire cela.
Pour vérifier cela pour un utilisateur spécifique, vous pouvez utiliser
sudo
.la source
path
pour être vide? ou/
?path
est défini sur/long
la première fois autour de la boucle, ce qui est correct. Devrais-je réglerpath
sur rien explicitement (path=
)? Merci également de simplifier mon utilisation detr
.Comme je l’ai compris dans votre question, vous devriez le vérifier pour différents utilisateurs (pas seulement joe), alors dans ce cas, le moyen le plus simple est de le vérifier de manière récursive via sudo comme ceci:
usage:
la source
0755
,0700
et0777
). J'ai publié./script.sh /root/test/test.txt joe
et cela a fait échooriginal file /root/test/test.txt is readable for joe
. Aussi, en essayant cela, j'ai mal saisi le test dir:,./script.sh /root/tst/test.txt joe
et il a fait échooriginal file /root/tst/test.txt is readable for joe
. Ai-je raté quelque chose?-r $FILE
, non?Voici ma tentative de fournir cette fonctionnalité. J'ai choisi d'utiliser
stat
, unewhile
boucle etdirname
.J'ai créé ce script,
walkdir.bash
:Vous le lancez comme ça:
la source