
Como concedo a um usuário específico o direito de alterar a propriedade de usuários e grupos de arquivos e diretórios dentro de um diretório específico?
Fiz uma pesquisa no Google e vi que existe algo comosetfacl
, que permite conceder aos usuários direitos específicos para alterar permissões de arquivos e diretórios. Pelo que li, porém, este comando não permite conceder permissões de chown.
Então, digamos que um arquivo tenha
user1 user1 theFile1
user1 user1 theDirectory1
A emissão do comando a seguir falharia.
[user1@THEcomputer]$ chown user2 theFile
Eu tenho acesso root no computador. Existe uma maneira de permitir que um usuário emita chown
comandos dentro de um diretório?
ATUALIZAÇÃO: Como adicionar um usuário a um grupo.
Aqui está oartigoque eu costumava adicionar datamover
ao hts
grupo.
[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$
ATUALIZAÇÃO (endereço comentado por RuiFRibeiro):
Alterar a propriedade do diretório para o diretório não funciona, veja a captura de tela.
[datamover@Venus root]$ ls -la
total 311514624
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 .
drwxr-xr-x 4 root root 4096 Aug 20 16:52 ..
-rwxrwxrwx. 1 datamover datamover 674 Aug 31 16:47 create_files.zip
drwxrwxrwx 2 datamover datamover 4096 Oct 17 17:07 dudi
-rwxrwxrwx. 1 datamover datamover 318724299315 Oct 13 15:47 Jmr400.mov
-rwxrwxrwx. 1 datamover datamover 182693854 Aug 31 16:47 Jmr_Commercial_WithSubtitles.mov
-rwxrwxrwx. 1 datamover datamover 80607864 Aug 31 16:47 Jmr_DataMover_Final.mov
drwxrwxrwx. 2 datamover datamover 122880 Aug 23 11:54 ManyFiles
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 Receive
drwxrwxrwx 2 datamover datamover 4096 Oct 14 13:40 sarah
-rwxrwxrwx 1 datamover datamover 3184449 Oct 14 14:05 SourceGrid_4_40_bin.zip
[datamover@Venus root]$ cd ./Receive/
[datamover@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[datamover@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of './Jmr_Commercial_WithSubtitles.mov': Operation not permitted
Aqui está uma tentativa como proprietário do arquivo:
[hts@Venus Receive]$ chown datamover:datamover Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of 'Jmr_Commercial_WithSubtitles.mov': Operation not permitted
Então, como você pode ver, nenhuma das possibilidades funciona.
UPDATE (resposta do contramodo de endereço)
A propriedade do grupo pode ser alterada pelo proprietário do arquivo (e pelo root). No entanto, isso está restrito aos grupos aos quais o proprietário pertence.
Sim, é preciso sair primeiro. Aqui está o resultado da minha tentativa:
[hts@Venus ~]$ groups hts
hts : hts wireshark datamover
[hts@Venus ~]$ cd /mnt/DataMover/root/Receive/
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts hts 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown hts:datamover ./Jmr_Commercial_WithSubtitles.mov
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover 4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover 4096 Oct 14 14:05 ..
-rwxrwxrwx 1 hts datamover 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx 2 datamover datamover 122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of ‘./Jmr_Commercial_WithSubtitles.mov’: Operation not permitted
[hts@Venus Receive]$
Adicionar hts ao grupo datamover realmente me permite alterar a propriedade da parte do grupo, portanto, agora uma resposta parcial e validação para a instrução.
Responder1
Somente root tem permissão para alterar a propriedade dos arquivos. Versões razoavelmente modernas do Linux fornecem esse CAP_CHOWN
recurso; um usuário que possui 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 pelo root). No entanto, isso está 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, então U poderá alterar o grupo de qualquer arquivo que você possua para A, B ou C, mas não para D. Se você buscar alterações arbitrárias, então CAP_CHOWN
é o caminho a seguir.
CUIDADO CAP_CHOWN
tem graves implicações de segurança, um usuário com um shell com capacidade CAP_CHOWN
pode obter privilégios de root. (Por exemplo, chown
libc para você mesmo, corrija seus cavalos de Tróia, chown
recupere-o e espere que um processo root o pegue.)
Como você deseja restringir a capacidade de alterar a propriedade de determinados diretórios, nenhuma das ferramentas disponíveis o ajudará. Em vez disso, você pode escrever sua própria variante chown
que atenda às restrições pretendidas. Este programa precisa ter capacidade CAP_CHOWN
, por exemplo
setcap cap_chown+ep /usr/local/bin/my_chown
CUIDADO
Seu programa provavelmente irá imitar o genuíno chown
, por exemplomy_chown
user:group filename(s)
. Execute sua validação de entrada com muito cuidado. Verifique se cada arquivo atende às restrições pretendidas, principalmente, atente para links virtuais que apontam para fora dos limites.
Se quiser restringir o acesso ao seu programa a determinados usuários, você pode criar um grupo especial, definir a propriedade do grupo my_chown
para este grupo, definir permissões para 0750 e adicionar todos os usuários que têm permissão para este grupo. Alternativamente, você pode usar sudo
regras adequadas (neste caso, você também não precisa de magia de capacidade). Se precisar de ainda mais flexibilidade, você precisará codificar as regras que tem em mente em my_chown
.
Responder2
Me deparei com esse mesmo problema e já estou usando ACLs. Isso pode não se aplicar à sua situação, mas no meu caso, o usuário específico tem acesso de gravação à árvore de diretórios e todos os outros têm acesso de leitura, então minha tática é escrever um pequeno programa setuid para verificar o acesso de gravação do usuário chamador e permitir alterando o acesso de leitura para outros.
Uma pergunta discutindo isso está aqui:
Como fazer com que os usuários definam ACLs em diretórios que não possuem?