Posso permitir que os usuários chmodem um arquivo que não pertence a eles?

17

Gostaria de permitir que os usuários chmodem um arquivo pertencente à raiz ou algum usuário que não seja ele próprio. Eu chmod'ed o arquivo para 777 e recebo "operação não permitida". Eu adicionei o usuário ao grupo do arquivo e obtive o mesmo. Por que um usuário não pode chmod um arquivo ao qual tem acesso de gravação?

ashleysmithgpu
fonte
1
Por essa lógica, por que não apenas executar tudo como root? Se qualquer usuário pode alterar qualquer modo, você basicamente destruir todo o modelo de permissões Unix ...
Chris Baixo
1
O que você quer fazer? talvez você deva dar uma olhada em sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h 15/13
O arquivo tem permissões 777, um usuário pode "arquivo mv file.old; cat file.old> file" e agora eles são os donos do arquivo e podem chmod. Por que eles não podem "chmod 777 file"?
Ashleysmithgpu
5
Não, eles só podem fazer isso se tiverem permissão de gravação no diretório. Se o usuário tiver o direito de alterar as permissões de um arquivo que não possui, configurando o modo 04777 e copiando / usr / bin / env para ele, ele poderá executar qualquer comando como esse usuário.
Stéphane Chazelas
@StephaneChazelas Esse é um argumento estranho, porque o kernel pode facilmente decidir (e aceita!) Permitir a não-proprietários essas alterações sem ficar vinculado por essa decisão de permitir-lhes todos os tipos de alterações. Afinal, o SUID é redefinido mesmo quando um não proprietário grava o arquivo.
Hauke ​​Laging

Respostas:

8

Por que um usuário não pode chmod um arquivo ao qual tem acesso de gravação?

Para os direitos normais de acesso, essa é uma decisão de design. Você precisa de richacls : WRITE_ACLe talvez WRITE_OWNER.

Hauke ​​Laging
fonte
1
E você deve avisar que os richacls geralmente não estão disponíveis.
sendmoreinfo
@sendmoreinfo O artigo da Wikipedia diz isso e, obviamente, deve ser lido, pois minha resposta não explica o que os richacls são e como são usados. É ridículo considerar uma resposta correta "não útil" devido a isso. Especialmente porque não há alternativa equivalente. Da próxima vez, faça uma edição se achar que essas informações são necessárias.
Hauke ​​Laging
Eu vejo, é uma decisão de design, obrigado
ashleysmithgpu
2
Você obviamente usou o recurso, então explique você mesmo, com suas próprias palavras.
sendmoreinfo
10

As permissões Unix são projetadas para serem simples. Você precisa da permissão de leitura para ler um arquivo, da permissão de gravação para gravar em um arquivo e da permissão de execução para executar um arquivo. Você precisa possuir um arquivo para modificar seus metadados¹.

Permitir que um usuário que possa ler um arquivo conceda permissão de leitura a outros, ou permita que um usuário que possa gravar um arquivo conceda permissão de gravação a outros, não alteraria muito o modelo de segurança. Isso ocorre porque as permissões unix são discricionárias: um usuário que pode ler um arquivo pode expor seu conteúdo a outros usuários, mesmo que esses outros usuários não possam ler o arquivo (e da mesma forma para escrever, o usuário poderia atuar como proxy e escrever em nome de outras pessoas).

Por outro lado, permitir que um usuário conceda permissão que não possui violaria completamente o sistema de permissão: o usuário poderia conceder todas as permissões a si próprio.

É muito raro precisar alterar as permissões de um arquivo que você não possui. Normalmente, você deve providenciar para que o arquivo tenha as permissões corretas assim que for criado. Se você realmente precisar disso, poderá conceder ao usuário sudo chmoddireitos para um modo específico e um arquivo específico (por exemplo joe: ALL = (ALL) chmod g+r /path/to/file).

¹ Exceto pelos tempos de acesso e modificação, que são específicos porque a leitura ou gravação no arquivo também os define.

Gilles 'SO- parar de ser mau'
fonte
No meu caso de uso, existe um processo da web (por www-data) e um processo cli (por mim), que deseja definir permissões em um arquivo. Eu me adicionei ao grupo www-data, mas isso não é suficiente.
Donquixote
Mesmo mudando de proprietário / grupo para mim: www-data não ajuda. (Eu não ter projetado o mecanismo que tenta definir as permissões, não tenho controle sobre ele)
Donquixote