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.