Como verificar se existem outras permissões nos diretórios home

2

Neste momento, tenho um script que roda diariamente o chmod dos diretórios base, removendo todas as "outras" permissões dos diretórios e a permissão de gravação "group". Veja abaixo.

#Removing all other permissions on all home directories and write from group

ls /home | sed 's/ //g' |
while read i; do
  chmod -R o-rwx /home/$i
  chmod -R g-w /home/$i
done

Isso funciona muito bem; no entanto, eu preferiria que o script verificasse se havia arquivos que precisassem ser alterados e, em seguida, agisse de acordo com eles, em vez de apenas fazê-lo sempre, independentemente de precisar dele.

Eu suponho que eu poderia colocar essa coisa toda em uma subfunção dentro de uma instrução if , mas não sei qual teste eu executaria dentro da instrução if .

Como posso testar se os diretórios precisariam ser alterados?

    
por TrevorKS 06.08.2018 / 19:40

1 resposta

3

Use a localização:

find /home/* -type d -maxdepth 0 -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +

Se você quiser fazer isso de forma recursiva, ao usar -R em seus exemplos, use este

find /home/* -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +

Editar:

Breve explicação das opções de busca, para detalhes, veja man find :

O -perm junto com /mode significa que qualquer um dos bits está definido.

A sintaxe clássica -exec é -exec command '{}' ';' . Os caracteres {} são substituídos pelo nome do arquivo, as aspas estão lá para protegê-los do shell, na maioria dos shells isso não é necessário, mas não faz mal. O ';' é o final do comando, aqui a cotação é necessária para a maioria dos shells, mas uma forma alternativa é \; . A desvantagem é que há uma chamada para chmod por arquivo alterado. Isso é evitado com a forma alternativa em que o comando é finalizado com + . Este formulário chama exec com muitos nomes e é, na verdade, semelhante a xargs , e até economiza a sobrecarga de chamar xargs .

    
por 06.08.2018 / 19:46