Quero encontrar arquivos que um usuário em particular não possa ler.
Suponha que o nome de usuário seja "user123" e eles estejam em um grupo chamado "user123". Quero encontrar arquivos que, se pertencem ao user123, têm u + r; falhando que, se o arquivo for do grupo user123, ele deve ter g + r ativado; falhando que ele pode ter o + r ligado.
Como o GNU find tem "-readable", eu poderia fazer isso:
sudo -u user123 find /start ! -readable -ls
No entanto, o processo precisa ser executado por um usuário que não possui acesso ao sudo. Portanto, eu tentei o seguinte: (não verifica o + r, mas isso não é importante neste momento)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
mas lista este arquivo:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
Este arquivo é o único arquivo /start
pertencente ao user123 com g=r
desativado. É como se find estivesse interpretando o -u=r
as -g=r
.
Decidi tentar reverter a lógica e, em not ( truth )
vez disso, testar :
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
Isso funciona!
Por que o original find
falhou? É um erro find
(improvável) ou a lógica está errada?
Atualização: eu estava com a lógica errada. Como apontado abaixo, desde! (A || B || C) == (! A &&! B &&! C) estas são as duas instruções 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
Meu objetivo não era ter que testar usuário / grupo duas vezes. O que eu realmente preciso é de uma estrutura se-então-mais mais complicada, que provavelmente só seria possível se houvesse um operador -xor. Eu poderia criar um xor a partir e / ou não, mas seria mais complexo do que as duas soluções acima.
puppet
tem acesso a um arquivo com--wxrwxrwx puppet puppet
.