Por que um usuário normal não pode chover um arquivo?

65

Por que o comando chown é o único raiz? Por que os usuários não-root não podem usar o chown para distribuir arquivos de sua propriedade?

    
por phleg 21.12.2011 / 21:37

3 respostas

88

A maioria dos sistemas unix previne que os usuários forneçam arquivos, ou seja, os usuários podem executar somente chown se tiverem os privilégios de usuário e grupo de destino. Como usar chown requer a propriedade do arquivo ou ser root (os usuários nunca podem se apropriar dos arquivos de outros usuários), somente root pode executar chown para alterar o proprietário de um arquivo para outro usuário.

O motivo dessa restrição é que distribuir um arquivo para outro usuário pode permitir que coisas ruins aconteçam em situações incomuns, mas ainda assim importantes. Por exemplo:

  • Se um sistema tiver cotas de disco habilitadas, Alice poderia criar um arquivo gravável do mundo em um diretório acessível somente por ela (para que ninguém mais pudesse acessar esse arquivo gravável) e executar chown para criar esse arquivo possuído por outro usuário Bill. O arquivo, então, contaria na cota de disco de Bill, embora apenas Alice possa usar o arquivo.
  • Se Alice distribuir um arquivo para Bill, não há nenhum rastro de que Bill não tenha criado esse arquivo. Isso pode ser um problema se o arquivo contiver dados ilegais ou comprometedores.
  • Alguns programas exigem que o arquivo de entrada pertença a um usuário específico para autenticar uma solicitação (por exemplo, o arquivo contém algumas instruções que o programa executará em nome desse usuário). Isso geralmente não é um projeto seguro, porque mesmo que Bill tenha criado um arquivo contendo instruções sintaticamente corretas, ele pode não ter planejado executá-las nesse momento específico. No entanto, permitir que Alice crie um arquivo com conteúdo arbitrário e tome como entrada de Bill só pode piorar as coisas.
por 22.12.2011 / 01:53
14

No Linux, você precisa do recurso CAP_CHOWN para chown. root é concedido tal. Referir-se: link para explicações. Se você pretende fornecer o recurso CAP_CHOWN, construa seu código com libcap-ng ou libcap, conforme demonstrado por: link onde você tem que simplesmente substituir CAP_AUDIT_WRITE por CAP_CHOWN.

Espero que isso possa ajudar você.

    
por 11.05.2013 / 22:00
0

Você pode iniciar o comando, mas não funcionará se você não for root. É fácil: imagine um usuário que pode mudar um software para usuário root. Pode adicionar o bit setuid e, voilà, o cara é root! Assim, o uso pode adicionar o bit com chmod, mas sem chance de alterar o proprietário dos arquivos.

    
por 21.12.2011 / 22:00