Usando o find no Linux para localizar arquivos com permissões de grupo / outro que correspondam

2

Eu tenho a necessidade de encontrar todos os arquivos em um diretório onde o grupo e outras permissões correspondam (por exemplo, aquelas em que a participação do grupo no arquivo não afeta o acesso).

Como há apenas 8 possibilidades para isso (x00, x11, x22 etc.), pensei em pesquisar apenas essas permissões, mas não consigo encontrar uma maneira de corresponder explicitamente alguns dos bits de permissão sem corresponder a todas as permissões. eles (por exemplo, correspondem a todos os milhares, 100, 200, 300, etc. para x00).

Eu criei uma declaração longa como:

find . \( \ -perm 000 -o -perm 011 -o -perm 022 -o -perm 033 [...] \ -perm 100 -o -perm 111 -o -perm 122 -o -perm 133 [...] \ [...] \) -ls

E funciona, mas parece muito deselegante (tem mais de 8 caracteres ... e isso antes de eu colocar quaisquer cláusulas de seleção de caminho que serão necessárias ...).

Existe uma maneira melhor?

Editar: ocorreu-me que isto ignora as permissões SUID / SGID. Adicioná-los tornará o comando ainda mais longo ... esperamos que haja uma maneira melhor!

    
por Mike Myers 29.01.2015 / 19:34

1 resposta

0

Bem, eu ainda não tenho certeza se entendi o problema (provavelmente não é sua culpa!), mas aqui estão algumas idéias:

1) Use a opção -print0 de find (e opções similares em grep , xargs , etc.) para lidar com caracteres especiais em nomes de arquivos.

2) Pode ser necessário algum script para juntar tudo, mas o stat retornará a string de permissão octal de um arquivo. Então, tudo que você precisa fazer é dividi-lo em três caracteres separados (por exemplo, 775 - > 7 7 5) (usando modificadores de parâmetro bash ou processamento de string no idioma / ferramenta de sua escolha) e se o segundo ou terceiro caractere corresponder o primeiro, então você tem permissões idênticas para o proprietário e grupo ou outro.

A melhoria aqui é que você está vendo todas as três permissões de uma só vez, em vez de enumerar todas as permutações. Eles são o mesmo trio ou não são. Vai demorar um pouco mais para manipular as strings de permissão com mais de 3 caracteres (para coisas como sticky bits, etc.), mas ainda é basicamente um teste igual ou não igual para encontrar os arquivos em questão.

Não tenho tempo para descobrir os detalhes, mas comecei vendo se poderia criar um script que:

1) Obtenha e divida as permissões usando stat e verifique se há correspondências de permissão. Se houver, imprima o nome do arquivo (possivelmente o caminho completo) e as permissões ou sinalizadores para o que precisa ser alterado. Caso contrário, descarte esse nome de arquivo.

2) canalize a saída de find para esse script ou acesse-a com a opção find -exec .

3) Então, você teria uma lista de apenas os arquivos que precisam ser modificados junto com o que cada um precisa    e isso pode ser tratado com scripts simples.

    
por 05.02.2015 / 01:03