2 votes

Utilisation de find sous Linux pour trouver des fichiers dont les permissions de groupe ou autres correspondent.

J'ai besoin de trouver tous les fichiers d'un répertoire dont le groupe et les autres permissions correspondent (par exemple, ceux dont l'appartenance au groupe du fichier n'affecte pas réellement l'accès).

Puisqu'il n'y a que 8 possibilités pour cela (x00, x11, x22, etc.), je pensais pouvoir effectuer une recherche sur ces permissions mais je ne trouve pas de moyen de faire correspondre explicitement certains bits de permission sans les faire correspondre tous (par exemple, faire correspondre tous les 000, 100, 200, 300, etc. pour x00).

J'ai construit une longue déclaration de recherche comme :

find . \( \ -perm 000 -o -perm 011 -o -perm 022 -o -perm 033 [...] \ -perm 100 -o -perm 111 -o -perm 122 -o -perm 133 [...] \ [...] \) -ls

Et ça marche mais ça semble très inélégant (il y a plus de 8 caractères...et c'est avant que j'ai mis toutes les clauses de sélection de chemin qui seront nécessaires...).

Y a-t-il un meilleur moyen ?

Edit : je viens de me rendre compte que cela ignore les permissions SUID/SGID. Si on les ajoute, la commande sera encore plus longue... j'espère qu'il y a une meilleure solution !

0voto

Eigir Points 471

Eh bien, je ne suis toujours pas sûr de comprendre le problème (ce n'est probablement pas de votre faute !), mais voici quelques idées :

1) Utilisez le -print0 option de find (et des options similaires dans grep , xargs etc.) pour traiter les caractères spéciaux dans les noms de fichiers.

2) Il faudra peut-être un peu de script foo pour tout mettre en place, mais les stat renvoie la chaîne de permission octale d'un fichier. Ensuite, tout ce que vous avez à faire est de la décomposer en trois caractères distincts (par exemple 775 -> 7 7 5) (en utilisant les modificateurs de paramètres de bash ou le traitement des chaînes dans le langage/outil de votre choix) et si le deuxième ou le troisième caractère correspond au premier, alors vous avez des permissions identiques pour le propriétaire et le groupe ou autre.

L'amélioration ici est que vous regardez les trois permissions en même temps au lieu de devoir énumérer toutes les permutations. Soit il s'agit du même triplet, soit ce n'est pas le cas. Il faudra un peu plus de manipulations pour gérer les chaînes de permission de plus de 3 caractères (pour des choses comme les sticky bits, etc.), mais il s'agit toujours d'un test égal ou non égal pour trouver les fichiers en question.

Je n'ai pas le temps de m'occuper des détails, mais je commencerais par voir si je peux créer un script qui le ferait :

1) Obtenez et décomposez les autorisations en utilisant stat puis vérifier s'il y a des correspondances de permission. S'il y en a, imprimez le nom du fichier (éventuellement le chemin d'accès complet) et les autorisations ou les drapeaux pour ce qui doit être modifié. Sinon, il suffit d'ignorer ce nom de fichier.

2) Soit vous pipez la sortie de find dans ce script ou d'y accéder avec la commande find -exec option.

3) Ensuite, vous aurez une liste des fichiers qui doivent être modifiés et de ce dont chacun a besoin. et cela peut être géré avec un simple script.

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