Como posso encontrar arquivos com permissões maiores que xxx mas ignorar arquivos com SUID e SGID?

4

Estou tentando encontrar arquivos com permissões que excedam 755. Usando a solução de outro post aqui eu consegui obter principalmente o que eu quero:

find /bin -type f -perm -755 ! -perm 755

Isso ignora qualquer coisa em 755 ou menos, mas retorna arquivos com os bits SUID e SGID definidos. Eu gostaria de ignorar isso. É possível fazer isso em um comando? Eu tentei vários argumentos ! -perm com 2000 e 4000 , mas isso não fez nada.

Eu também usei 2755 e 4755 em comandos sequenciais, mas, novamente, eu preferiria cobrir ambos em um comando.

Eu estava pensando que o operador -o ajudaria, mas não tenho certeza de como fazer isso com um argumento que contém um padrão negado como o que estou usando. Eu tentei como

find . -type f \(-perm -2755 ! -perm 2755 -o -perm -4755 ! -perm 4755\)

mas isso apenas gerou o erro paths must precede expression .

    
por theillien 15.08.2015 / 04:43

2 respostas

5

A solução que funciona com qualquer pesquisa compatível com POSIX é a seguinte:

find DIR -type f -perm -0755 ! -perm 0755 ! -perm -04000 ! -perm -02000 -print

Como observado anteriormente, com o GNU find você pode recolher os testes setuid e setgid em ! -perm /06000 .

    
por 15.08.2015 / 10:47
3

Não sei se entendi o que você quer, mas, com base no meu melhor palpite,

find  (starting_directory)  -type f  -perm -755  ! -perm 755  ! -perm /6000

parece fazer isso. -perm /mode significa "Qualquer um dos bits de permissão modo está definido para o arquivo." Portanto, -perm /6000 deve corresponder apenas aos arquivos que são SUID ou SGID (ou ambos), e ! -perm /6000 deve excluir esses arquivos.

BTW, suponho que -type -f na sua pergunta seja um erro de digitação, desde que você acertou ( -type f , sem o segundo - ) no seu segundo exemplo.

P.S. Ainda não faz o que você quer, mas você pode ter o seu segundo exemplo para fazer alguma coisa (ou seja, liste alguns arquivos e não diga paths must precede expression ) simplesmente mudando para

find . -type f \( -perm -2755 ! -perm 2755 -o -perm -4755 ! -perm 4755 \)

isto é, separe os \( e \) dos argumentos adjacentes (com espaços).

    
por 15.08.2015 / 10:16

Tags