1. lxcbr0
当/etc/default/lxc中的USE_LXC_BRIDGE="true"的时候,桥lxcbr0会在lxc启动的时候自动创建,并且被赋予10.0.3.1的ip地址,使用这个桥的lxc实例可以从10.0.3.0/24中分配ip。一个dnsmasq实例在后台运行用来监听lxcbr0,用来实现dns和dhcp的功能。
2. 使用隔离的文件系统作为lxc实例的存储
lxc实例的配置信息以及根文件系统都存放在/var/lib/lxc目录下,另外,没创建一个实例也会将其cache到/var/lib/lxc目录下。如果你想使用除/var之外的其他文件系统的话,也可以通过以下两种方式来实现:
- sudo mkdir /srv/lxclib /srv/lxccache
- sudo rm -rf /var/lib/lxc /var/cache/lxc
- sudo ln -s /srv/lxclib /var/lib/lxc
- sudo ln -s /srv/lxccache /var/cache/lxc
- sudo mkdir /srv/lxclib /srv/lxccache
- sudo sed -i '$a \
- /srv/lxclib /var/lib/lxc none defaults,bind 0 0 \
- /srv/lxccache /var/cache/lxc none defaults,bind 0 0' /etc/fstab
- sudo mount -a
AppArmor 是一个类似于selinux 的东东,主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。
默认情况下AppArmor已安装并载入。它使用每个程序的profiles来确定这个程序需要什么文件和权限。有些包会安装它们自己的profiles,额外的profiles可以在apparmor-profiles包里找到。
下面简单介绍下AppArmor的使用:
(1)apparmor_status是用来查看AppArmor配置文件的当前状态的
- sudo apparmor_status
- sudo aa-complain /path/to/bin //可执行程序的路径
- sudo aa-enforce /path/to/bin //可执行程序的路径
(4)要将所有配置文件置入complain模式,输入:
- sudo aa-complain /etc/apparmor.d/*
(5)要将所有配置文件置入enforce模式:
- sudo aa-enforce /etc/apparmor.d/*
- cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
- cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r
- sudo /etc/init.d/apparmor reload
- sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
- sudo apparmor_parser -R /etc/apparmor.d/profile.name
- sudo rm /etc/apparmor.d/disable/profile.name
- cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
- sudo /etc/init.d/apparmor stop
- sudo update-rc.d -f apparmor remove
- sudo /etc/init.d/apparmor start
- sudo update-rc.d apparmor defaults
言归正传,重新回到lxc中的AppArmor上来。
LXC利用AppArmor配置文件来保护主机不受容器内实例的恶意行为,比如:容器内的实例对/proc/sysrq-tigger以及/sys目录下的绝大部分文件不具有写权限。另外,usr.bin.lxc-start配置文件用来防止lxc-start挂载除了容器根目录下列出的其他文件。在执行容器实例的init进程之前,还回去
/etc/apparmor.d/lxc/lxc-default进行权限的检查,禁止init访问一些危险的资源。
在接下来的文章中将会重点介绍cgroup机制相关的内容!