localiza todos os arquivos com permissões específicas

0

Eu tenho tentado por horas descobrir a sintaxe de comando para encontrar arquivos que atendem qualquer desses critérios, mas não consigo descobrir.

  • o usuário não leu
  • o usuário não tem gravação
  • o grupo não leu
  • o grupo não tem gravação
  • outro não leu
  • outro escreveu
  • outro executou

Comecei com isso, mas isso não encontrou todos os arquivos esperados. Por exemplo, ele não encontra arquivos em que outro leu, mas também executou.

find /path -type f \( ! -perm /u=rw,g=rw -or ! -perm /o=r \) -print
    
por IMTheNachoMan 27.07.2017 / 06:13

1 resposta

1

Resposta curta

 find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)

Resposta longa

Como parece mais fácil especificar o que queremos ( x tem y permissão) em find , vamos tentar conjugar a expressão : podemos ver que um arquivo que deve corresponder a não tem todas essas condições verificadas:

  • o usuário leu e escreveu
  • o grupo leu e escreveu
  • outro leu
  • outro não tem (escreva ou execute)

Então agora temos mais que antes (5 vs 2). Eu escrevi o comando que acha que os arquivos que você faz não querem:

find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx

Para entender isso, você deve se importar com o fato de que - significa todas as permissões e / significa qualquer uma das permissões .

Então eu juntei com ele! e parênteses para obter o comando no topo desta resposta.

Testes

Vamos criar arquivos que verificam apenas um de cada um desses critérios:

mkdir demo && cd demo
touch     a b c d e f g
chmod 777 a b c d e f g
chmod u-r a
chmod u-w   b
chmod g-r     c
chmod g-w       d
chmod o-r         e
chmod o-w a b c d e g
chmod o-x a b c d e f

Então vamos criar todos os arquivos que não devem corresponder: Nós temos liberdades em

  • direitos de execução do usuário
  • direitos de execução de grupo

Que dá exatamente 2 ^ 2 = 4 tipos de permissões completas que não devem corresponder. Vamos criar 4 arquivos com estes critérios:

touch     h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h   j

O comando fornecido deve corresponder aos arquivos a, mas não aos arquivos h a k. É claro que este teste não é completo porque existem 256 tipos de permissões para testar.

    
por 27.07.2017 / 14:29