Com o Docker , você pode fazer isso com muita facilidade.
docker pull ubuntu
docker run -t -i ubuntu /bin/bash
# make your changes and then log out
docker commit $(docker ps -a -q | head -n 1) sandbox
cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF
chmod a+x /usr/local/bin/sandbox
echo /usr/local/bin/sandbox >> /etc/shells
useradd testuser -g docker -s /usr/local/bin/sandbox
passwd testuser
Sempre que testuser
fizerem login, eles serão colocados em um contêiner isolado, onde não poderão ver nada fora dele, nem mesmo os contêineres de outros usuários.
O contêiner será removido automaticamente quando fizer o logout.
Explicação:
docker pull ubuntu
Aqui buscamos a imagem base com a qual vamos trabalhar. O Docker fornece imagens padrão e o ubuntu é um deles.
docker run -t -i ubuntu /bin/bash
# make your changes and then log out
Aqui lançamos um shell a partir da imagem do Ubuntu. Quaisquer alterações feitas serão preservadas para seus usuários.
Você também pode usar um Dockerfile para construir a imagem, mas por um tempo, acho que isso é mais simples. br>
docker commit $(docker ps -a -q | head -n 1) sandbox
Aqui, convertemos o último contêiner que foi executado em uma nova imagem chamada sandbox
.
cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF
Este será um shell falso que o usuário é forçado a executar no login. O script os lançará em um contêiner docker, que será automaticamente limpo assim que eles fizerem logoff.
chmod a+x /usr/local/bin/sandbox
Espero que isso seja óbvio :-)
echo /usr/local/bin/sandbox >> /etc/shells
Isso pode não ser necessário em seu sistema, mas no meu caso, um shell não pode ser um shell de login, a menos que exista em /etc/shells
.
useradd testuser -g docker -s /usr/local/bin/sandbox
Criamos um novo usuário que, com o shell, é definido como um script que criaremos. O script irá forçá-los a entrar no contêiner do sandbox. Eles são membros do grupo docker
para que o usuário possa iniciar um novo contêiner.
Uma alternativa para colocar o usuário no grupo de encaixe seria conceder permissões de sudo a um único comando.
passwd testuser
Espero que isso também seja óbvio.