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, chmodgeralmente 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 chmodpara 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 chmoddeve 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.