Quiero encontrar archivos que un usuario en particular no podrá leer.
Suponga que el nombre de usuario es "user123" y están en un grupo llamado "user123". Quiero encontrar archivos que, si son propiedad del usuario123, tienen activado u + r; en caso de que, si el archivo es el usuario del grupo 123, debería tener activado g + r; si no puede tener o + r encendido.
Como GNU find tiene "legible", podría hacer esto:
sudo -u user123 find /start ! -readable -ls
Sin embargo, el proceso debe ser ejecutado por un usuario que no tiene acceso a sudo. Por lo tanto, intenté esto: (no marca o + r pero eso no es importante en este punto)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
pero enumera este archivo:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
Este archivo es el único archivo /startque pertenece al usuario123 con g=rdesactivado. Es como si find está interpretando el -u=ras -g=r.
Decidí intentar invertir la lógica y probar not ( truth )en su lugar:
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
¡Eso funciona!
¿Por qué findfalló el original ? ¿Es un error en find(poco probable) o la lógica es incorrecta?
Actualización: me equivoqué de lógica. Como se señala a continuación, ya que! (A || B || C) == (! A &&! B &&! C) estas son las dos declaraciones equivalentes:
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
Mi objetivo no era tener que probar el usuario / grupo dos veces. Lo que realmente necesito es una estructura if-then-else más complicada, que probablemente solo sería posible si hubiera un operador -xor. Podría construir un xor a partir de y / o / no, pero sería más complejo que las dos soluciones anteriores.
puppettiene acceso a un archivo con--wxrwxrwx puppet puppet.