jon*_*ipp 8 linux chroot container lxc
我将在这个项目中使用 Ubuntu Linux。
为了在会议上培训特定应用程序,我需要:
对于#1,我们希望使用单个用户帐户,这样我们就不必为每个学生创建一个帐户并分发用户名和密码。
有谁知道我如何才能实现这些目标?哪种技术(例如 LXC、Chroot 等)最适合这种情况?我一直在考虑使用 .bash_profile 和 .bash_logout 来处理这些环境的创建和破坏,但不确定哪种技术能够创建我需要的环境。
使用Docker,您可以非常轻松地做到这一点。
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
Run Code Online (Sandbox Code Playgroud)
每当testuser
登录时,他们都会被放置在一个隔离的容器中,在那里他们看不到外面的任何东西,甚至看不到其他用户的容器。
当他们注销时,容器将被自动删除。
docker pull ubuntu
Run Code Online (Sandbox Code Playgroud)
在这里,我们获取将要使用的基本图像。Docker 提供了标准镜像,ubuntu 就是其中之一。
docker run -t -i ubuntu /bin/bash
# make your changes and then log out
Run Code Online (Sandbox Code Playgroud)
在这里,我们从 ubuntu 映像启动一个 shell。您所做的任何更改都将为您的用户保留。
您也可以使用Dockerfile来构建映像,但有一次,我认为这更简单。
docker commit $(docker ps -a -q | head -n 1) sandbox
Run Code Online (Sandbox Code Playgroud)
在这里,我们将运行的最后一个容器转换为名为sandbox
.
cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF
Run Code Online (Sandbox Code Playgroud)
这将是一个伪造的 shell,用户在登录时被迫运行。该脚本会将它们启动到 docker 容器中,一旦它们注销,该容器就会自动清理。
chmod a+x /usr/local/bin/sandbox
Run Code Online (Sandbox Code Playgroud)
我希望这很明显:-)
echo /usr/local/bin/sandbox >> /etc/shells
Run Code Online (Sandbox Code Playgroud)
这在您的系统上可能不需要,但在我的系统上,除非它存在于/etc/shells
.
useradd testuser -g docker -s /usr/local/bin/sandbox
Run Code Online (Sandbox Code Playgroud)
我们创建一个新用户,将其 shell 设置为我们将创建的脚本。该脚本将强制它们启动到沙盒容器中。他们是docker
组的成员,因此用户可以启动新容器。
将用户放入 docker 组的另一种方法是授予他们对单个命令的 sudo 权限。
passwd testuser
Run Code Online (Sandbox Code Playgroud)
我希望这也是显而易见的。