Somente o root tem permissão para alterar a propriedade dos arquivos. Versões razoavelmente modernas do Linux fornecem o recurso CAP_CHOWN
; um usuário com esse recurso também pode alterar a propriedade de arquivos arbitrários. CAP_CHOWN
é global, uma vez concedido, aplica-se a qualquer arquivo em um sistema de arquivos local.
A propriedade do grupo pode ser alterada pelo proprietário do arquivo (e raiz). No entanto, isso é restrito aos grupos aos quais o proprietário pertence. Portanto, se o usuário U pertencer aos grupos A, B e C, mas não a D, U poderá alterar o grupo de qualquer arquivo que U possua para A, B ou C, mas não para D. Se você procurar por alterações arbitrárias, então CAP_CHOWN
é o caminho a percorrer.
CUIDADO CAP_CHOWN
tem graves implicações de segurança, um usuário com um shell com capacidade CAP_CHOWN
poderia obter privilégios de root. (Por exemplo, chown
libc para você, remova seus cavalos de Tróia, chown
e espere que um processo root o capte.)
Como você deseja restringir a capacidade de alterar a propriedade para determinados diretórios, nenhuma das ferramentas prontamente disponíveis o ajudará. Em vez disso, você pode escrever sua própria variante de chown
que cuida das restrições pretendidas. Este programa precisa ter o recurso CAP_CHOWN
, por exemplo,
setcap cap_chown+ep /usr/local/bin/my_chown
CUIDADO
Seu programa provavelmente imitará o genuíno chown
, por exemplo my_chown
user:group filename(s)
. Realize sua validação de entrada com muito cuidado. Verifique se cada arquivo satisfaz as restrições pretendidas, particularmente, atente para links que apontam para fora dos limites.
Se você quiser restringir o acesso do seu programa a determinados usuários, crie um grupo especial, defina a propriedade do grupo my_chown
para esse grupo, defina as permissões para 0750 e adicione todos os usuários permitidos a esse grupo. Alternativamente, você pode usar sudo
com regras adequadas (nesse caso, você também não precisa de capacidade mágica). Se você precisa de ainda mais flexibilidade, então você precisa codificar as regras que você tem em mente em my_chown
.