Como iniciar automaticamente contêineres lxc não privilegiados?

8

No Ubuntu 14.04, criei um contêiner sem privilégios que posso iniciar e parar manualmente.

Mas eu gostaria que isso começasse e parasse junto com o sistema.

Eu adicionei o seguinte à configuração do contêiner: lxc.start.auto = 1 lxc.start.delay = 5

No entanto, os scripts do sistema não parecem escolher contêineres sem privilégios.

Existe um tópico relacionado a isso no linuxcontainers.org, mas a solução parece estar restrita a root user.

Existe uma maneira limpa de fazer isso para um usuário não-root (com o consentimento do usuário root)?

    
por HRJ 15.08.2014 / 16:17

7 respostas

6

Eu recomendaria usar o conveniente% alias @reboot no cron do Ubuntu para execute lxc-autostart .

Como o usuário que possui o contêiner sem privilégios, execute crontab -e e adicione a seguinte linha:

@reboot lxc-autostart

    
por 29.01.2015 / 18:53
2

No caso de alguém se deparar com este q & a pela resposta ao início automático de contêineres LXC não privilegiados (eu certamente volto aqui muito), aqui está uma solução que funciona bem e que segui para que funcione no meu servidor:

link por Nicholas J Ingrassellino.

Em suma, envolve a criação de dois scripts e eles trabalham juntos na inicialização para permitir que o LXC inicie os contêineres não privilegiados de cada usuário listado sem ter que realmente efetuar login na conta do usuário; em outras palavras, executar o comando como o usuário com toda a mágica do CGroups intacta. De acordo com as melhores práticas do SO, vou citar os ossos dele aqui, mas vale a pena ler o artigo original dele.

Allow our user account to use the bridge…

echo "$USER veth lxcbr0 1024" | sudo tee -a /etc/lxc/lxc-usernet

Create Upstart script… In /etc/init/lxc-unprivileged.conf add…

description "LXC Unprivileged Containers"
author "Mike Bernson <[email protected]>"

start on started lxc

script
    USERS="[user]"

    for u in $USERS; do
        cgm create all lxc$u
        cgm chown all lxc$u $(id -u $u) $(id -g $u)
        lxc-autostart -L -P /home/$u/.local/share/lxc | while read line;
        do
            set -- $line
            /usr/local/bin/startunprivlxc lxc$u $u $1
            sleep $2
        done
    done
end script

Make sure to replace [user] with your user account.

Create the container start script… In /usr/local/bin/startunprivlxc add…

#!/bin/sh

cgm movepid all $1 $$
sudo -iH -u $2 -- lxc-start -n $3 -d

…and make it executable…

sudo chmod +x /usr/local/bin/startunprivlxc

Gostaria apenas de enfatizar que parece funcionar de forma segura, correta e não requer a raiz do SSH nas outras contas de usuário.

Há também mais sobre o assunto (tocando sobre dicas relacionadas) aqui: link que pode ser útil para entender por que é assim que é.

    
por 15.10.2015 / 00:37
1

Eu escrevi um pequeno script para contornar o problema, basta seguir as instruções comentadas.

    
por 27.04.2015 / 22:43
0

DESCULPE: respondeu cedo demais. Não funcionou mesmo que lxc-ls mostre "AUTOSTART" como "YES".

Aqui está um link com muito mais informações úteis, e talvez alguém possa fazer uso dele: link

Aterrissei nesta página porque tive o mesmo problema. Depois de ler este tópico, Eu percebi que o lxc-create não pode gravar no diretório "/ var / lib / lxc /" usual se ele não for executado com o sudo.

Eu olhei em volta e localizei os rootfs para o meu contêiner sem privilégios em "~ / .local / share / lxc", e colocando as duas linhas da questão em config naquele diretório.

Eu olhei para o modelo que eu usei, "lxc-download" para a pista, mas eu acho que o caminho foi passado quando "lxc-download" é invocado. Eu não olhei como o sistema procura por contêineres desprivilegiados durante a inicialização.

    
por 25.07.2015 / 05:01
0

Estou executando cada contêiner sem privilégios com o mesmo usuário nomeado para melhor isolamento e é assim que eu faço:

#!/bin/bash

LXC_CONTAINERS="container1 container2"

for LXC_CONTAINER in $LXC_CONTAINERS; do
 su - $LXC_CONTAINER -c "lxc-start -n $LXC_CONTAINER --logfile /home/$LXC_CONTAINER/.local/share/lxc/lxc-$LXC_CONTAINER.log --logpriority DEBUG"
done
    
por 07.02.2018 / 05:37
-1

Assumindo (que é a mãe de todas as maneiras de estragar tudo), você está logando como o usuário que "possui" o container lxc não privilegiado, então o seguinte comando deve endereçar o que você está procurando ...

$ echo "lxc-start -n LXC-CONTAINER-NAME -d" >> .bashrc

Isso simplesmente executará o comando acima quando você efetuar login via bash. Isto também está assumindo que bash é o shell de login. Por favor, substitua o nome: LXC-CONTAINER-NAME pelo nome do seu contêiner LXC que você gostaria de iniciar.

    
por 14.10.2014 / 13:28
-1

Eu usei uma abordagem diferente e está funcionando

1º Adicione as seguintes entradas no arquivo de configuração do container

CONFIGURAÇÃO DE INÍCIO AUTOMÁTICO

lxc.start.auto = 1 lxc.start.delay = 5

2º Crie uma relação de confiança entre o usuário contêiner e ele mesmo no mesmo servidor

userlxc @ GEST-4: ~ $ ssh-keygen -t rsa Gerando pares de chaves rsa pública / privada. Digite o arquivo no qual salvar a chave (/home/userlxc/.ssh/id_rsa): Digite a frase secreta (vazia para nenhuma frase secreta): Digite a mesma senha novamente: Sua identificação foi salva em /home/userlxc/.ssh/id_rsa. Sua chave pública foi salva em /home/userlxc/.ssh/id_rsa.pub. A impressão digital chave é: c9: b4: e1: f3: bf: a3: 25: cc: f8: bc: ser: b6: 80: 39: 59: 98 userlxc @ GEST-AMENCIA-4 A imagem randomart da chave é: + - [RSA 2048] ---- + | | | | | o | | * + | | E S | | = * | | = o =. | | . +. | | oO = oo | + ----------------- +

userlxc @ GEST-4: ~ $ cat .ssh / id_rsa.pub > > .ssh / authorized_keys userlxc @ GEST-4: ~ $ ls -lrt .ssh / authorized_keys -rw-rw-r-- 1 userlxc userlxc 404 19 de novembro 17:23 .ssh / authorized_keys

Verifique a conexão ssh, você tem que ser capaz de usá-lo sem senha Detalhes userlxc @ GEST-4: ~ $ ssh userlxc @ localhost "lxc-ls - fantasia"

NOME DO ESTADO IPV4 IPV6 AUTOSTART

EXTLXCCONT01 PARADO - - SIM
UBUSER1404USERCONT01-test STOPPED - - NÃO
UBUSER1404USERLXCCONT01 PARADO - - NÃO

3º Crie uma entrada crontab no proprietário do contêiner

@reboot ssh userlxc @ localhost "lxc-autostart"

    
por 19.11.2015 / 17:40