LXC 1.0 最大的特性是非特权容器,通过巧妙的uidmap,将物理机的普通用户(uid和gid)映射成容器里的root(uid=0,gid=0),极大的提高了lxc的安全性。
LXC 1.0 对内核和python版本有要求,故下文以 ubuntu 14.04 为例,使用普通用户dell创建非特权的lxc容器。
(以下操作,非特别说明,均为root权限操作,命令提示符为#号)
1、安装lxc
1
|
apt-get
install
lxc uidmap
|
2、创建普通用户
1
2
3
|
useradd
-m dell
mkdir
-p
/home/dell/
.
local
/share/lxc
mkdir
-p
/home/dell
.config
/lxc
|
3、配置uidmap
lxc 1.0 之前的版本虚拟机里的root 和宿主机root 共享一个uid/gid 0,这样非常不安全。
为了解决uid/gid为0的问题,非特权虚拟机主要依赖uidmap实现。
由于0-65535已经分配给了系统,lxc虚拟机需要额外分配id,映射成0,这里选择100000-165535
(我的理解是,其它非uid/gid 为0的用户依然保持内外一致。)
这里使用一个普通用户dell
1
2
3
4
|
usermod
-
v
100000-165535 dell
usermod
-w 100000-165535 dell
echo
"lxc.id_map = u 0 100000 65536"
>>
/etc/lxc/default
.conf
echo
"lxc.id_map = g 0 100000 65536"
>>
/etc/lxc/default
.conf
|
u 0 100000 65536 表示 将uid 0映射成100000,共65536个
4、修改lxc配置
1
2
|
echo
"dell veth lxcbr0 10"
>>
/etc/lxc/lxc-usernet
cat
/etc/lxc/lxc-usernet
>
/home/dell/
.config
/lxc/default
.conf
|
dell veth lxcbr0 10 表示dell用户最多可创建10个veth 桥接网卡
5、修正权限
1
2
|
chmod
+x
/home/dell
chown
-R dell:dell
/home/dell
|
6、以dell身份登录,创建容器
非特权容器创建有点区别,它使用一个download模板,去下载指定的已打包好的完整系统,而非使用apt/yum
1
|
lxc-create -n my-ubuntu -t download
|
-n 意思是--name,容器的名字
-t 意思是 --template,指定使用哪个模板
接下来会出现文本对话,模板包含主流的发行版,centos/debian/ubuntu等,选择自己需要的发行版,版本号,CPU架构 。
ubuntu 对非特权容器支持很好,这里选择ubuntu trusty amd64
也可以使用下面的命令,跳过对话,直接安装ubuntu非特权容器
1
|
lxc-create -t download -n my-ubuntu -- -d ubuntu -r trusty -a amd64
|
ubuntu模板系统默认的用户和密码均是ubuntu,可以sudo 。
7、查看刚刚创建的非特权容器
1
|
lxc-
ls
|
8、启动非特权容器
1
|
lxc-start -n my-ubuntu
|
9、小技巧
a、让容器随系统启动
开机启动
$ echo "lxc.start.auto = 1" >>/home/dell/.local/share/lxc/my-ubuntu/config
开机延时启动
$ echo "lxc.start.delay = 5" >>/home/dell/.local/share/lxc/my-ubuntu/config
b、限制容器的资源
限CPU
$ echo "lxc.cgroup.cpu.shares = 256" >>/home/dell/.local/share/lxc/my-ubuntu/config
限内存
$ echo "lxc.cgroup.memory.limit_in_bytes = 1024M" >>/home/dell/.local/share/lxc/my-ubuntu/config
限磁盘IO
$ echo "lxc.cgroup.blkio.weight = 500" >>/home/dell/.local/share/lxc/my-ubuntu/config
c、lxc官方已经打包了多个Linux系统,centos/debian/ubuntu各个版本皆有,也可以去官网手动下载。
http://images.linuxcontainers.org/images/
参考文档
https://www.stgraber.org/2014/01/17/lxc-1-0-unprivileged-containers/