Como posso chown um arquivo para um subuid sem sudo

4

Basicamente, o que está acontecendo aqui e o que não estou entendendo?

Eu tenho um conjunto de subuids para meu usuário. Eu quero chown um arquivo para subuid específico que faz parte da alocação deste usuário

administrator@host:/home/administrator$ cat /etc/subuid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001

administrator@host:/home/administrator$ cat /etc/subgid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001

Tentando chown este arquivo está falhando apesar deste subuid ser parte da alocação.

administrator@host:/home/administrator$ ls -lhat
...
-rw-rw-r-- 1 administrator administrator  229 Aug  2 13:00 file
drwxrwxr-x 7 administrator administrator 4.0K Aug  2 13:00 ..

administrator@host:/home/administrator$ chown 1500000:1500000 file
chown: changing ownership of 'file': Operation not permitted

administrator@host:/home/administrator$ stat file
  File: file
  Size: 229             Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 658357      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/administrator)   Gid: ( 1004/administrator)
Access: 2018-08-02 13:00:36.529197108 +0000
Modify: 2018-08-02 13:00:36.529197108 +0000
Change: 2018-08-02 13:00:36.529197108 +0000
 Birth: -
administrator@host:/home/administrator$

No entanto, eu posso remover o arquivo como usuário, se eu usar o sudo para chown-lo - mas mostra como um arquivo protegido contra gravação quando eu faço. Isso indica que eu tenho permissões para modificar arquivos com este subuid.

administrator@host:~$ touch file
administrator@host:~$ chown 1500000:1500000 file
chown: changing ownership of 'file': Operation not permitted

administrator@host:~$ sudo chown 1500000:1500000 file    
administrator@host:~$ rm file
rm: remove write-protected regular empty file 'testfile.txt'?
administrator@host:~$

Alguém pode explicar o funcionamento interno que está acontecendo aqui? Eu provavelmente entendi mal algo básico em algum lugar. Eu não posso marcar isso como subuid porque não o suficiente rep, então eu vou usar o uid.

Obrigado!

    
por TechnicalChaos 02.08.2018 / 15:59

3 respostas

1

Existe um programa lxc-usernsexec que vem junto com lxc . Isso permite que você remapeie os IDs dos usuários usando os mapas /etc/subuid e /etc/subgid .

Especificamente, você pode fazer o seguinte.

  1. lxc-usernsexec -- touch /tmp/test
  2. ls -l /tmp/test mostrará que o arquivo é proprietário: group o mesmo que o primeiro subuid: par de subgid em seu mapa.
  3. rm /tmp/test deve dar um erro, pois você não tem o uid / gid direito.
  4. lxc-usernsexec -- rm /tmp/test deve remover o arquivo.

Espero que isso ajude! O acima, provavelmente, requer várias configurações para o uso de contêiner LXC sem privilégios. Em particular, acho que /proc/sys/kernel/unprivileged_userns_clone deveria ser 1.

    
por 12.08.2018 / 16:35
8

Subuids não são destinados a funcionar da maneira que você espera que eles funcionem. Eles são projetados para mapear UIDs em um namespace de usuário para diferentes UIDs fora desse namespace, o que é útil (e na verdade foi projetado) para contêineres.

No entanto, um processo ainda pode ter apenas um conjunto UID (namespace de usuário) e os usuários não podem alterar a propriedade dos arquivos por motivos óbvios de segurança. Não importa, no que diz respeito ao processo em si, se o usuário é realmente alguém fora do namespace.

É por isso que o comando chown falha: não importa se você poderia ter algum outro UID, caso o namespace fosse diferente , nesse momento, você não tem esse UID e, portanto, não pode alterar a propriedade de nenhum arquivo (desde que você não seja root).

Por que você pode remover o arquivo: na verdade ele não tem nada a ver com subuidos, tudo depende de você ter a propriedade do diretório em que o arquivo reside. Como a exclusão de arquivo altera o diretório e não o arquivo Se você pode escrever o diretório, você pode remover qualquer arquivo (exceto diretórios "pegajosos").

    
por 08.08.2018 / 16:25
3

Seu problema não tem nada a ver com o subuid.

De acordo com o link

Non-privileged users (not root) cannot chown files to other user names. To use chown, a user must have the privileges of the target user. In other words, only root can give a file to another user.

    
por 06.08.2018 / 15:44