chmod permitindo escrever quando não estou configurando

2

Eu tenho um script perl que sistematicamente muda as permissões. A primeira coisa que o script faz é remover todas as permissões. Isso é feito chamando chmod (do perl). Eu fiz isso, pois achei que o conjunto guid bocado não ficaria claro a menos que eu explicitamente esclarecesse:

system('find',
        $topdir,
        '-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);

Eu defini permissões diferentes para grupos e diretórios. Usando find , eu chamo de perl da seguinte forma (neste caso para diretórios):

system(
    'find',
    $topdir,
    '-type', 'd',
    '-exec', 'chmod', 'g=rx', '{}', ';'
  );

Agora, mesmo que eu apenas defina rx, quando eu verificar as permissões de arquivo depois que o script terminar de ser executado, os scripts parecerão ter o rwx. Há algo que eu deva procurar, já que não entendo por que isso está acontecendo? Eu não o defino explicitamente em lugar algum. Eu também configuro as ACLs, mas todas elas se comportam como esperado. A única coisa que notei quando eu verifico com getfacl é mask::rwx e default:mask::rwx . Isso pode estar causando o problema?

    
por penguin 26.04.2013 / 20:24

1 resposta

4

Veja 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 de $topdir , o que evita a repetição da mesma. Nenhum dos comandos chmod que você espera são executados, exceto o primeiro.

Se você deseja remover a permissão para acessar todos os diretórios em uma árvore, você precisa fazê-lo de dentro para fora. Caso contrário, quando você se desconectar do diretório pai, não poderá mais recorrer a ele.

system('find',
        $topdir,
        '-depth',
        '-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);

Como você está usando o Perl, use File::Find em vez de chamar o programa externo find . Use a função finddepth para obter a ordem correta de passagem.

Parece inútil fazer duas travessias. Em vez disso, faça um único percurso e defina diretamente as permissões de arquivo para o que você deseja, por exemplo, chmod 0750 ou seja o que for. Usar File::Find proporcionará maior flexibilidade para, por exemplo trate diretórios e arquivos regulares de maneira diferente.

    
por 27.04.2013 / 03:49