1 votes

Recherche automatique des problèmes de permission d'un répertoire

J'ai souvent le problème qu'un programme - par exemple apache - ne peut pas accéder à un certain fichier ou répertoire.

Pour résoudre le problème, il faut vérifier manuellement le fichier et chaque répertoire du chemin d'accès jusqu'à la racine, et voir si l'utilisateur ou le groupe du programme peut y accéder. Cette opération est fastidieuse.

Quel programme est capable de me dire automatiquement où se situe le problème ?


J'imagine que j'indique au programme le chemin d'accès, l'utilisateur et le groupe - et qu'il me montre où se trouve le problème dans l'arborescence. Notez que je suis conscient des problèmes tels que les liens symboliques par rapport à l'interface d'Apache -FollowSymLinks qui ne peut être détectée de cette manière.

4voto

Adam Zalcman Points 779

En supposant que vous disposiez des droits d'accès à la racine du système, vous pouvez utiliser la procédure suivante

sudo -u USER -g GROUP find ROOTDIR -exec test \! -r {} \; -ls

où USER et GROUP doivent être remplacés par le nom d'utilisateur et le nom de groupe dont l'accès doit être évalué et ROOTDIR est le répertoire principal de l'arborescence sous laquelle l'évaluation doit être effectuée.

Mises en garde

Il convient de noter que sudo doit être configuré de manière appropriée, ce qui signifie que root doit être autorisé à agir en tant qu'utilisateur et groupe.

Comment cela fonctionne-t-il ?

La commande fonctionne en exécutant la commande test pour tous les fichiers et répertoires sous ROOTDIR. Les options passées à l'utilitaire lui permettent de renvoyer un code de sortie de type succès (zéro) chaque fois qu'il peut pas accéder à un fichier ou à un répertoire donné. Ce code de sortie est ensuite utilisé par find pour déterminer s'il faut imprimer le nom du fichier ou du répertoire ( -ls ).

Sortie

La sortie est la liste des fichiers et des répertoires sur lesquels USER:GROUP agit pas ont accès à des informations supplémentaires sur chaque fichier et répertoire, similaires à celles fournies par le logiciel ls -l (c'est-à-dire avec les autorisations, la propriété, l'heure de modification, etc.)

Des choses utiles que vous pouvez modifier

Vous pouvez tester différents types d'autorisations en remplaçant -r avec une option différente, voir test de l'homme . Vous pouvez remplacer -ls con -print si vous ne voulez pas d'informations supplémentaires sur chaque fichier et répertoire, mais seulement leur nom. Notez que si la commande trouve des répertoires qu'elle ne peut pas parcourir, elle se plaindra également sur stderr. En fonction de ce que vous passez à test il peut s'agir d'un problème superficiel qui peut être résolu par une réorientation.

1voto

kubanczyk Points 13302

J'ai mis au point ce simple Shell[*] Shell. Fonctionne mieux lorsque l'on est root :

my_path=/home/me/Documents/a/b/c/file.txt               
while [[ "$my_path" != "/" ]] ; do 
   ls -lLd "$my_path"
   my_path="`dirname \"$my_path\"`" 
done

Cela nécessite encore un post-traitement humain, mais je ne connais pas de méthode élégante pour vérifier si un utilisateur spécifique dispose d'une autorisation x sur un répertoire (il faudrait soit su -c "test -x" ou l'analyse fastidieuse de stat -t ).

[*] fonctionne à la fois en bash et en ksh

0voto

Handyman5 Points 5087

La commande tree vous aidera dans cette tâche.

De man tree :

Tree est un programme d'énumération récursive de répertoires qui produit une liste de fichiers indentés en profondeur.

J'ai construit un exemple simple pour démontrer cette utilisation :

$ mkdir {a,b,c}/{1,2,3}
$ ls *
a:
1  2  3

b:
1  2  3

c:
1  2  3
$ 
$ tree
.
|-- a
|   |-- 1
|   |-- 2
|   `-- 3
|-- b
|   |-- 1
|   |-- 2
|   `-- 3
`-- c
    |-- 1
    |-- 2
    `-- 3

12 directories, 0 files
$ sudo chown root b && sudo chmod go-rwx b
$ tree
.
|-- a
|   |-- 1
|   |-- 2
|   `-- 3
|-- b [error opening dir]
`-- c
    |-- 1
    |-- 2
    `-- 3

9 directories, 0 files

Vous pouvez exécuter tree comme l'utilisateur en question pour voir où le problème commence. Pour utiliser cet outil de réparation, vous devez corriger le problème détecté et réexécuter le programme jusqu'à ce qu'il n'y ait plus d'erreurs. tree -if pour supprimer l'indentation et imprimer les chemins complets, vous pourriez créer un script qui exécute tree, recherche "error opening dir", accorde apache l'accès à ce répertoire et redémarre.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X