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

4

Como eu 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?

Eu fiz uma pesquisa no Google e vi que existe algo como setfacl , que permite conceder aos usuários direitos específicos para alterar permissões para arquivos e diretórios . Pelo que li, no entanto, este comando não permite a concessão de permissões chown.

Então, digamos que um arquivo tenha

user1 user1 theFile1
user1 user1 theDirectory1

Emitir o seguinte comando falharia.

[user1@THEcomputer]$ chown user2 theFile

Eu tenho acesso root no computador. Existe uma maneira de conceder a um usuário a emissão de comandos chown dentro de um diretório?

UPDATE: como adicionar um usuário a um grupo.

Aqui está o artigo que eu usei para adicionar datamover ao grupo hts .

[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$ 

UPDATE (comentário de endereço do RuiFRibeiro):

Alterar a propriedade do diretório para o diretório não funciona, consulte 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 o 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 possibilidade funciona.

UPDATE (resposta do contra-método de endereço)

Group ownership may be changed by the file owner (and root). However, this is restricted to the groups the owner belongs to.

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 de dados sobre o arquivo de fato me permite alterar a propriedade da parte do grupo, portanto, agora, uma resposta parcial e validação para a declaração.

    
por Sarah Weinberger 24.10.2016 / 22:41

2 respostas

6

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 .

    
por 24.10.2016 / 22:52
0

Eu me deparei com esse mesmo problema e já estou usando as 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 acessam de modo que 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 os outros.

Uma questão discutindo isso está aqui:

Como obter usuários configuram ACLs em diretórios que não possuem?

    
por 07.05.2017 / 21:40