chmod permitindo gravação quando não estou configurando

chmod permitindo gravação quando não estou configurando

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::rwxand default:mask::rwx. Poderia ser isso que está causando o problema?

Responder1

Observe a saída do erro: você deve estar vendo find: `…' Permission deniederros. A primeira coisa que você faz é remover todas as permissões de acesso do $topdir, o que evita a recorrência adicional. Nenhum dos chmodcomandos 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::Findem vez de chamar o programa externo find. Use a finddepthfunçã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 0750ou o que deveria ser. O uso File::Findlhe dará maior flexibilidade para, por exemplo, tratar diretórios e arquivos regulares de maneira diferente.

informação relacionada