script falhando com “chmod:… Operação não permitida”

5

Um script meu funciona bem quando eu o executo, mas falha quando executado por um usuário diferente, com um erro no formulário

chmod: changing permissions of '/A/B/C/D/E': Operation not permitted

(Aqui /A/B/C/D/E é um diretório. FWIW, o script reside em /A/B/C/D .)

Caso isso seja importante, a estrutura de permissões do diretório em questão e todos os seus ancestrais é a seguinte:

drwxrwsrwx kjo11 proj1 /A/B/C/D/E/
drwxrwsrwx cwr8  proj1 /A/B/C/D/
drwxrwsr-x root  proj1 /A/B/C/
drwxrwsr-x root  proj1 /A/B/
drwxr-xr-x root  root  /A/
drwxr-sr-x root  root  /

(Nesta listagem, kjo11 é o meu $USER nome. Por acaso, cwr8 é o nome $USER do usuário para o qual o script falha. Em qualquer caso, estamos ambos na proj1 group.)

A saída de uname é Linux .

Estou perplexo. O único detalhe que me chama a atenção é que o erro é Operation not permitted , ao contrário de Permission denied , mas não consigo tirar mais nada disso.

Quais condições podem causar tais erros na execução de chmod ?

    
por kjo 19.03.2013 / 15:30

1 resposta

8

Somente o proprietário de um arquivo ou o superusuário pode alterar as permissões em um arquivo. Isso é verdade, mesmo se o usuário for um membro do grupo que possui o arquivo e as permissões do diretório pai e do arquivo sugerirem que as permissões de configuração devem ser possíveis.

Você pode controlar as permissões de arquivos e diretórios no momento da criação, usando o recurso umask do seu shell:

$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x  2 dan   wheel    2 19 Mar 15:13 targetdir

Se você estiver fazendo isso em um script, provavelmente é uma boa ideia salvar o valor umask original para restaurá-lo após a criação bem-sucedida de seus diretórios.

    
por 19.03.2013 / 15:46