Sob que circunstâncias chmod
falhará?
Eu olhei para a página de manual, mas ela apenas especifica o uso e não entra em detalhes sobre em que circunstâncias não funcionará.
Eu diria que chmod
funcionará se:
- você é raiz
- você é o proprietário do arquivo de destino (e está definindo um bit de modo mundano, ou seja, não é pegajoso, outros)
Os usuários podem usar chmod
para alterar as permissões em um arquivo ao qual têm acesso de grupo? Está relacionado ao acesso de leitura / gravação?
Respostas:
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 :
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.fonte
Os detalhes que você deseja estão na página de manual da chamada de sistema chmod (). Em vez de
man chmod
usarman 2 chmod
.man chattr
eman 2 setxattr
lhe interessará também; os atributos de arquivo configurados por chattr / setxattr () aumentam o comportamento das permissões tradicionais do Unix definidas pelo chmod.fonte
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".
A parte sobre 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 [ou seja, root].
O Linux possui um sistema chamado capacidades , e o
CAP_FOWNER
bit controla a capacidade de usarchmod
em todos os arquivos. Por padrão, todos os recursos são concedidos quando umaexecve()
chamada 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 com um valor diferente de zero) , e um conjunto de recursos, inclusive,CAP_FOWNER
é ativado quando o UID do sistema de arquivos é definido como 0 (e desativado quando é definido como um valor diferente de zero). Leia a página de manual para mais detalhes.Você mencionou o bit fixado, mas omitiu o fato de que os usuários também não podem definir o bit setgid em um arquivo quando não estão no grupo designado ao arquivo. O bit setuid ou setgid também pode ser ignorado em circunstâncias adicionais definidas pela implementação.
fonte
Por que você simplesmente não tenta ver?
fonte
chmod
e, em seguida, verificar as permissões nele. Se você estiver se sentindo paranóico, faça umfsync
antes de verificar.