Não é possível anexar a contêineres LXC iniciados automaticamente no (Fedora) SELinux

4

Ambiente : Estou executando o Fedora 24 com contêineres LXC (2.0.6) dentro e o SELinux ativado.

Problema : Configurar contêineres do Linux e iniciá-los está tudo bem, e o mesmo vale para anexar a um contêiner via lxc-attach , exceto para os contêineres que foram iniciados pelo recurso de autoinicialização de LXC ( lxc.start.auto = 1 no seu arquivo de configuração).

Para qualquer contêiner de início automático ao qual não posso me associar, posso lxc-stop e lxc-start novamente, com o que posso diretamente lxc-attach para esse contêiner.

O que tentei : já verifiquei a solução proposta deste bug- relatório , que consiste em instalar as extensões container-selinux e adicionar o rótulo correto ( container_runtime_exec_t ) aos executáveis /usr/bin/lxc-* , o que inclui lxc-attach . Embora também seja proposta como possível solução, não adicionei um rótulo ao contexto da pasta base para meus sistemas de arquivos raiz de todos os contêineres ( chcon -Rt container_var_lib_t /var/lib/lxc ).

Saída : Com contêineres iniciados manualmente não tenho problemas para anexar ( lxc-attach -n name_of_container ), mas quando tento conectar a um contêiner que foi iniciado automaticamente na inicialização do sistema, recebo um mensagem no terminal como

lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell

enquanto no arquivo /var/log/audit/audit.log eu recebo uma mensagem como

type=AVC msg=audit(1484836169.882:2969): avc:  denied  { entrypoint } for  pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0

Se eu pesquisar os rótulos dos processos que executam meus contêineres ( ps -eZ | grep lxc ), obtenho

system_u:system_r:unconfined_service_t:s0 2794 ? 00:00:00 lxc-autostart

para contêineres iniciados automaticamente, em comparação com

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6399 ? 00:00:00 lxc-start

para contêineres iniciados manualmente.

Minha pergunta : sou um pouco novo demais para o SELinux, mas o que eu posso ver na saída acima é que o contexto no qual o contêiner é executado depois de ter sido iniciado na inicialização do sistema é bem diferente do contexto em que o meu lxc-attach é executado (o contexto anterior começa com scontext=system_u:... , enquanto o contexto atual seria tcontext=unconfined_u:... do arquivo audit.log acima).

É por isso que tenho que pedir a alguém que me explique: que tipo de incompatibilidade faz com que essa permissão seja negada? E: posso consertar isso?

    
por mruether 19.01.2017 / 16:27

1 resposta

0

Parece que, no momento desse evento, o seu /bin/dash estava associado a um contexto inválido ou sem selinux.

Aqui o lxc-attach reclama que falhou ao executar um shell:

lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell

O SELinux avc denial parece confirmar o seguinte:

type=AVC msg=audit(1484836169.882:2969): avc:  denied  { entrypoint } for  pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0

Alguns detalhes a serem observados no evento acima:

O arquivo de destino ( path="/bin/dash" ) acabou com um contexto especial ( tcontext=unconfined_u:object_r:unlabeled_t:s0 ) usado pelo SELinux para cenários de failover. No evento, /bin/dash localizado no inode 10289 no dispositivo sda3 estava associado a um contexto inválido ou nenhum contexto.

Tente restorecon -RvF do contexto de /bin/dash no inode 10289 no dispositivo sda3 . Depois de fazer isso, veja se o contexto foi redefinido para algo diferente de unconfined_u:object_r:unlabeled_t:s0 com ls -alZ

    
por 28.06.2017 / 12:39