Como conceder direitos de usuário para alterar a propriedade de arquivos/diretórios em um diretório

Como conceder direitos de usuário para alterar a propriedade de arquivos/diretórios em um diretório

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 chowncomandos dentro de um diretório?

ATUALIZAÇÃO: Como adicionar um usuário a um grupo.

Aqui está oartigoque eu costumava adicionar datamoverao htsgrupo.

[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_CHOWNrecurso; 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_CHOWNtem graves implicações de segurança, um usuário com um shell com capacidade CAP_CHOWNpode obter privilégios de root. (Por exemplo, chownlibc para você mesmo, corrija seus cavalos de Tróia, chownrecupere-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 chownque 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_chownuser: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_chownpara 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 sudoregras 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?

informação relacionada