Quando o chmod falha?

8

Em que circunstâncias o chmod falhará?

Eu olhei para a página do manual, mas ela só especifica o uso e não entra em detalhes sobre em quais circunstâncias ela não funcionará.

Eu diria que chmod funcionará se:

  • você é root
  • você possui o arquivo de destino (e está definindo um bit de modo mundano, ou seja, não é um bit pegajoso, outros)

Os usuários podem usar chmod para alterar as permissões em um arquivo para o qual têm acesso de grupo? Está relacionado ao acesso de leitura / gravação?

    
por Wug 22.10.2012 / 03:26

4 respostas

3

Somente o proprietário do arquivo, ou o usuário root, pode alterar as permissões de um arquivo. As permissões atuais no arquivo ou em seu diretório pai são irrelevantes¹. Isso é especificado em POSIX :

The application shall ensure that the effective user ID of the process matches the owner of the file or the process has appropriate privileges in order to do this.

Na maioria dos unices, “privilégios apropriados” significa correr como root. Se essas condições não forem atendidas, chmod geralmente falhará com EPERM , embora outros comportamentos, como abortar o programa devido a uma violação de segurança, sejam permitidos.

Além disso, algumas variantes unix possuem formas específicas de autorizar ou proibir chmod . Por exemplo, o Linux tem um recurso ( CAP_FOWNER ) que permite que os processos alterem as permissões de um arquivo e outros metadados, independentemente de seu proprietário.

Existem outros motivos para que chmod falhe, mesmo que o arquivo exista, esteja acessível e tenha o proprietário apropriado. Os mais comuns incluem um sistema de arquivos somente para leitura ou um sistema de arquivos que não suporta permissões como FAT. Os menos comuns incluem restrições específicas do sistema, como o atributo imutável no sistema de arquivos e sucessores ext2 do Linux.

¹ Exceto na medida em que o processo em execução chmod deve poder acessar o arquivo, ele deve ter permissão de execução no diretório que contém o arquivo e em qualquer outro diretório que ele percorra para fazer isso.

    
por 23.10.2012 / 02:07
2

Os detalhes que você quer estão na página de manual para a chamada do sistema chmod (). Em vez de man chmod use man 2 chmod . man chattr e man 2 setxattr também lhe interessarão; os atributos de arquivo que o conjunto chattr / setxattr () aumentam o comportamento das permissões tradicionais do Unix definidas por chmod.

    
por 22.10.2012 / 06:37
1

De acordo com o padrão UNIX, "O ID do usuário efetivo do processo deve corresponder ao proprietário do arquivo ou o processo deve ter privilégios apropriados para fazer isso."

O pouco sobre os privilégios apropriados precisa de alguma explicação. Nos sistemas tradicionais, o chmod é permitido em todos os arquivos quando o UID efetivo (no Linux, o UID do sistema de arquivos, mas veja abaixo) do processo é 0 [isto é, raiz].

O Linux possui um sistema chamado recursos , e o CAP_FOWNER bit controla a capacidade de usar chmod em todos os arquivos. Por padrão, todos os recursos são concedidos quando uma chamada execve() cria um processo raiz (executando um binário setuid ou quando o UID real é 0) ou quando o UID efetivo é definido como 0 (e removido quando é definido como um valor diferente de zero) e um conjunto de recursos que incluem CAP_FOWNER são habilitados quando o UID do sistema de arquivos é definido como 0 (e desabilitado quando é definido como um valor diferente de zero). Leia a manpage para mais detalhes.

Você mencionou o bit adesivo, mas omitiu o fato de que os usuários também podem não definir o bit setgid em um arquivo quando não estão no grupo atribuído ao arquivo. O bit setuid ou setgid também pode ser ignorado em circunstâncias adicionais definidas pela implementação.

    
por 22.10.2012 / 19:15
0

Can users use chmod to change permissions on a file they have group access for?

Por que você não tenta ver?

$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw----  1 root  staff  0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted
    
por 22.10.2012 / 03:36