Permitir que um usuário do contêiner LXC grave como um usuário externo em um diretório montado

6

Desculpas pelo título, a configuração é bem simples. Eu tenho um host com um usuário chamado oli e um diretório chamado /media/steve/incoming que oli pode ler-escrever-executar dentro Dentro de que eu tenho um contêiner LXC privilegiada em execução no root. /media/steve/incoming está montado no contêiner como /incoming/ com:

lxc.mount.entry = /media/steve/incoming incoming none bind 0 0

Dentro do contêiner, eu tenho um servidor web rodando como www-data . Ele precisa ser capaz de gravar em /incoming/ .

Quais são minhas opções aqui? Posso pensar em algumas ideias, mas elas têm desvantagens bastante sérias ou não sei como implementá-las:

  • Eu poderia mudar meu daemon para rodar como root dentro do container, mas prefiro que não. Raiz escrever arquivos estranhamente no diretório (eles saem como root:oli -owned no host).

  • Posso mapear container- www-data para ter host- oli privs no sistema de arquivos? Isso lhes daria acesso ao host? oli não é uma conta não-representada. Pode causar danos reais.

  • Posso apenas ligá-lo de tal forma que qualquer um no contêiner possa escrever para / incoming e o acesso pareça vir do host- oli ?

  • ACL alguma ajuda aqui?

por Oli 03.12.2015 / 14:19

1 resposta

3

ACL pode ser bem-sucedido porque faz com que os arquivos sejam compartilhados para vários usuários com base no username em vez do número userid .

Ele é convertido em número de ID do usuário dentro do atributo do arquivo.

Posso mapear container-www-data para ter host-oli privs no sistema de arquivos? Isso lhes daria acesso ao host? oli não é uma conta não-representada. Pode causar danos reais.

Você pode executar o seguinte comando no host para que o usuário lxc container www-data possa gravar a pasta /incoming .

$ sudo chown oli /media/steve/incoming
$ sudo setfacl -m u:www-data:rwx /media/steve/incoming

/media/steve/incoming é vinculado a% por /incoming do contêiner lxc .

O proprietário de /media/steve/incoming já é de propriedade de oli .

Portanto, o oli do host pode escrevê-lo diretamente e o usuário% dowww-data do contêiner também pode escrevê-lo diretamente.

E se o comando setfacl não existir no host, você poderá instalá-lo com o seguinte comando.

$ sudo apt-get install acl

www-data do host e www-data do container podem usar a diferença número do usuário , assim você pode compartilhar / media / steve / incoming para o ID do usuário www-data do Container como segue.

Primeiro, obtenha número de ID do usuário de www-data no contêiner.

$ cat /etc/passwd | grep "^www-data:" | awk -F ":" '{print $3}'

Em seguida, ele mostrará um número se o contêiner tiver um usuário chamado www-data , userid of www-data . No segundo, defina o atributo file com acl da seguinte maneira no host.

$ sudo setfacl -m u:<got_number_above>:rwx /media/steve/incoming

Em seguida, funcionará para o contêiner.

Você pode obter mais ajuda para a ACL em FilePermissionsACLs

    
por xiaodongjie 14.12.2015 / 09:57