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 no POSIX :
O aplicativo deve garantir que o ID do usuário efetivo do processo corresponda ao proprietário do arquivo ou que o processo tenha privilégios apropriados para fazer isso.
Na maioria das unidades, "privilégios apropriados" significa executar como root. Se essas condições não forem atendidas, chmod
geralmente falhará EPERM
, embora outros comportamentos, como interromper o programa devido a uma violação de segurança, sejam permitidos.
Além disso, algumas variantes do unix têm maneiras específicas de sistema de autorizar ou proibir chmod
. Por exemplo, o Linux possui um recurso ( CAP_FOWNER
) que permite que os processos alterem as permissões de um arquivo e outros metadados, independentemente de seu proprietário.
Há outros motivos chmod
para falhar, mesmo que o arquivo exista, esteja acessível e possua o proprietário apropriado. Os mais comuns incluem um sistema de arquivos somente leitura ou um sistema de arquivos que não suporta permissões como o FAT. As menos comuns incluem restrições específicas do sistema, como o atributo imutável no sistema de arquivos ext2 e sucessores do Linux.
¹ Exceto na medida em que o processo em execução chmod
deve poder acessar o arquivo, portanto, ele deve ter permissão de execução no diretório que contém o arquivo e em qualquer outro diretório que ele percorrer para fazê-lo.