Je souhaite rechercher des fichiers qu'un utilisateur particulier ne pourra pas lire.
Supposons que le nom d'utilisateur est "user123" et qu'ils appartiennent à un groupe appelé "user123". Je veux trouver des fichiers qui, s'ils appartiennent à user123, ont u + r on; à défaut, si le fichier appartient au groupe user123, il devrait avoir g + r activé; à défaut, il peut avoir o + r allumé.
Puisque GNU find a "-readable", je pourrais faire ceci:
sudo -u user123 find /start ! -readable -ls
Cependant, le processus doit être exécuté par un utilisateur qui n'a pas accès à sudo. Par conséquent, j'ai essayé ceci: (il ne vérifie pas o + r mais ce n'est pas important à ce stade)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
mais il répertorie ce fichier:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
Ce fichier est le seul fichier sous /start
qui appartient à user123 avec g=r
off. C'est comme si find interprétait le -u=r
as -g=r
.
J'ai décidé d'essayer d'inverser la logique et de tester à la not ( truth )
place:
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
Ça marche!
Pourquoi l'original a- find
t-il échoué? Est-ce un bug dans find
(peu probable) ou la logique est-elle erronée?
Mise à jour: j'ai eu une mauvaise logique. Comme indiqué ci-dessous, depuis! (A || B || C) == (! A &&! B &&! C) ce sont les deux déclarations équivalentes:
find /start ! \( \( -user user123 -perm -u=r \) -o \( -group user123 -perm -g=r \) -o \( ! \( -user user123 -o -group user123 \) -perm -o=r \) \) -ls
find /start ! \( -user user123 -perm -u=r \) ! \( -group user123 -perm -g=r \) ! \( ! \( -user user123 -o -group user123 \) -perm -o=r \) -ls
Mon objectif n'était pas de devoir tester deux fois l'utilisateur / groupe. Ce dont j'ai vraiment besoin, c'est d'une structure if-then-else plus compliquée, qui ne serait probablement possible que s'il y avait un opérateur -xor. Je pourrais construire un xor à partir de et / ou / mais ce serait plus complexe que les deux solutions ci-dessus.
puppet
avoir accès à un fichier avec--wxrwxrwx puppet puppet
.