创建非特权LXC容器
对于特权容器来说,虽然创建过程比较方便,但存在进程权限的问题,隐形容器的安全性。
为了确保服务器用户的误操作不会导致服务器崩溃,经过实验,决定使用非特权容器来进行隔离。
非特权LXC
对于非特权的LXC容器来说,容器中实际执行的0号用户ID,并不对应服务器的0号用户ID,从而确保服务器上的内容不会出现问题。
LXC采用uid映射的方法,将容器中的UID映射到非特权服务器用户的UID空间。
因为服务器需要挂载一些设备,而只有服务器真实的特权用户可以对设备进行操作,容器内的用户是无法完成这一操作的。
检查现有的UID/GID映射表
通过检查 /etc/subuid 及 /etc/subgid ,得到映射范围。
默认的映射规则为,对于第一个用户
1 | uid:100000:65536 |
设定网卡上限
设置LXC的配置文件 /etc/lxc/lxc-usernet
添加类似于”user_name veth lxcbr0 XX”
的记录,即可将用户”user_name”通过网桥”lxcbr0”创建虚拟网卡的最大数量,限定为”XX”
修改LXC配置
以上工作完成后,需要进行配置文件的修改。
检查文件夹
如果目录 “/.config/lxc”和”/.local/share/lxc”如果不存在,执行下面两条命令,创建目录
1 | mkdir -p ~/.config/lxc |
其中,”/.local/share/lxc”即为创建好的容器存储位置,”/.config/lxc”是容器的配置文件存储位置。
设定配置文件
将LXC的默认配置文件 “/etc/lxc/default.conf” 复制到 “~/.config/lxc/default.conf”
并在最后添加两条配置
1 | lxc.id_map = u 0 100000 65536 |
需要注意的是,配置中的数字,均应和subuid及sungid对应起来,否则会出现错误。
重启或重新登陆
配置完以上内容后,建议重启,或者重新登陆,确保配置生效。
创建并配置容器
创建容器
对于非特权容器,默认类型必须是”download”
1 | lxc-create -t download -n XXXX -- --server mirrors6.tuna.tsinghua.edu.cn/lxc-images |
新创建的LXC容器名即为”XXXX”,通过清华大学的IPv6镜像服务器下载。
创建过程中,可以选择操作系统类型、版本、架构
配置容器
首先开启容器
1 | lxc-start -n XXXX -d |
-d表示以后台模式运行,”XXXX”即为创建的容器名
之后可以查看容器的状态
1 | lxc-info -n XXXX |
如果查看结果显示容器正在运行,说明配置及安装正确。
** 需要注意的是,非特权容器的用户密码并未设定 **
需要由宿主机进行设定
1 | lxc-attach -n XXXX |
即可以root身份登入到”XXXX”容器中
然后就可以给默认用户设置密码、更改用户权限,LXC容器内的用户即可执行sudo等权限。