Voglio trovare file che un determinato utente non sarà in grado di leggere.
Supponiamo che il nome utente sia "user123" e siano in un gruppo chiamato "user123". Voglio trovare file che, se sono di proprietà di user123, hanno u + r attivo; in caso contrario, se il file è il gruppo user123 dovrebbe avere g + r acceso; in mancanza di ciò può avere o + r acceso.
Dato che GNU find ha "-readable", potrei farlo:
sudo -u user123 find /start ! -readable -ls
Tuttavia, il processo deve essere eseguito da un utente che non ha accesso sudo. Quindi ho provato questo: (non controlla o + r ma non è importante a questo punto)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
ma elenca questo file:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
Questo file è l'unico sotto /start
quello di proprietà dell'utente123 con g=r
off. È come se find stia interpretando l' -u=r
as -g=r
.
Ho deciso di provare a invertire la logica e invece testare not ( truth )
invece:
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
Che funzioni!
Perché l'originale find
non è riuscito? È un bug in find
(improbabile) o la logica è sbagliata?
Aggiornamento: ho avuto la logica sbagliata. Come indicato di seguito, da allora! (A || B || C) == (! A &&! B &&! C) queste sono le due affermazioni equivalenti:
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
Il mio obiettivo non era di testare due volte utente / gruppo. Ciò di cui ho davvero bisogno è una struttura if-then-else più complicata, che probabilmente sarebbe possibile solo se esistesse un operatore -xor. Potrei costruire un xor da e / o / no ma sarebbe più complesso delle due soluzioni sopra.
puppet
ha accesso a un file con--wxrwxrwx puppet puppet
.