Eu tenho um script perl que altera sistematicamente as permissões. A primeira coisa que o script faz é remover todas as permissões. Isso é feito chamando chmod
(do perl). Eu fiz isso porque descobri que o bit guid set não seria limpo, a menos que eu o limpasse explicitamente:
system('find',
$topdir,
'-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);
Defino permissões diferentes para grupos e diretórios. Usando find
, eu chamo do perl da seguinte forma (neste caso para diretórios):
system(
'find',
$topdir,
'-type', 'd',
'-exec', 'chmod', 'g=rx', '{}', ';'
);
Agora, embora eu tenha definido apenas rx, quando verifico as permissões do arquivo após a conclusão da execução do script, os scripts parecem ter rwx. Há algo que devo procurar, já que não entendo bem por que isso está acontecendo; Eu não o defino explicitamente em lugar nenhum. Eu também defino ACLs, mas todas elas se comportam conforme o esperado. A única coisa digna de nota que vejo quando verifico com getfacl é mask::rwx
and default:mask::rwx
. Poderia ser isso que está causando o problema?
Responder1
Observe a saída do erro: você deve estar vendo find: `…' Permission denied
erros. A primeira coisa que você faz é remover todas as permissões de acesso do $topdir
, o que evita a recorrência adicional. Nenhum dos chmod
comandos que você espera é executado, exceto o primeiro.
Se você deseja remover a permissão de acesso a todos os diretórios de uma árvore, você precisa fazer isso de dentro para fora. Caso contrário, depois de se desligar do diretório pai, você não poderá mais recorrer a ele.
system('find',
$topdir,
'-depth',
'-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);
Como você está usando Perl, useFile::Find
em vez de chamar o programa externo find
. Use a finddepth
função para obter a ordem de passagem correta.
Parece inútil fazer duas travessias. Em vez disso, faça uma única travessia e defina diretamente as permissões do arquivo como você deseja, por exemplo, chmod 0750
ou o que deveria ser. O uso File::Find
lhe dará maior flexibilidade para, por exemplo, tratar diretórios e arquivos regulares de maneira diferente.