LXC,其名称来自Linux软件容器(LinuxContainers)的缩写,一种操作系统层虚拟化(Operatingsystem–levelvirtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要引导任何虚拟机。
LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker被用来管理LXC的环境。
操作系统层虚拟化(英语:Operatingsystem–levelvirtualization),一种虚拟化技术,这种技术将操作系统内核虚拟化,可以允许使用者空间软件物件(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一物件运行。这个软件物件,也被称为是一个容器(containers),虚拟引擎(Virtualizationengine),虚拟专用服务器(virtualprivateservers)或是jails。对每个行程的拥有者与使用者来说,他们使用的服务器程式,看起来就像是自己专用的。
操作系统层虚拟化之后,可以实现软件的即时迁移(Livemigration),使一个软件容器中的物件,即时移动到另一个操作系统下,再重新执行起来。但是在这种技术下,软件即时迁移,只能在同样的操作系统下进行。
在类Unix操作系统中,这个技术最早起源于标准的chroot机制,再进一步演化而成。除了将软件独立化的机制之外,内核通常也提供资源管理功能,使得单一软件容器在运作时,对于其他软件容器的造成的交互影响最小化。
因此,LXC通常被认为介于“加强版”的chroot和完全成熟的虚拟机之间的技术。LXC的目标是创建一个尽可能与标准安装的Linux相同但又不需要分离内核的环境。
ProxmoxVE是一个开源的服务器虚拟化环境Linux发行版。基于Debian,使用基于Ubuntu的定制内核。
lxclxc相关软件libcgroup资源管理,限制bridge-utils管理桥接网卡
lxc启动容器时,推荐使用ubuntu/centos6系统,centos7系统使用会有问题。
设置容器的模板.LXC1.0以上版本增加了download模版,支持下载定义好的系统镜像。
可以通过LXC读和操纵cgroup文件系统的一些部分。要管理每个容器对cpu的使用,则可以通过读取和调整容器的cpu.shares来进行:
暴露在互联网上的系统要将坏人隔离在外是一个很大的挑战,而且一直更新最新的安全补丁也不太容易。因此,一些聪明的管理员们尝试采用系统的方法来限制可能发生的入侵,这其中一个绝佳的方法就是使用chroot监狱(jail)。
chroot监狱极大地限制了应用程序可查看的文件系统范围,拥有更少的系统权限,这些都是为了限制应用程序误操作或者被坏人利用从而对系统造成损害。
本文简述一下chroot是如何工作的,并着重讨论一下开发者和管理员能够用到的一些最佳实践来让系统更加安全。
将SSH用户会话限制访问到特定的目录内,特别是在web服务器上,这样做有多个原因,但最显而易见的是为了系统安全。为了锁定SSH用户在某个目录,我们可以使用chroot机制。
在诸如Linux之类的类Unix系统中更改root(chroot)是将特定用户操作与其他Linux系统分离的一种手段;使用称为chrooted监狱的新根目录更改当前运行的用户进程及其子进程的明显根目录。
chroot系统调用将当前进程及其子进程的root目录修改到一个特定的路径,通常是在文件系统真正的root目录下的一些受限的子目录中。进程认为新的路径就是系统的“/”,因此我们将这个受限制的环境称为“监狱”。除非一些特殊手段,要从监狱里面逃出来是根本不可能的。
chroot系统调用存在于所有已知的UNIX版本中,它能够为运行的进程创建一个临时根目录,这种方法将一个受限制的文件系统(比如,/chroot/named)作为进程可见的最上层目录。
2、根据sshd_config手册找到所需的文件,ChrootDirectory选项指定在身份验证后要chroot到的目录的路径名。该目录必须包含支持用户会话所必需的文件和目录。
对于交互式会话,这需要至少一个shell,通常为sh和基本的/dev节点,例如null、zero、stdin、stdout、stderr和tty设备
3、使用mknod命令创建/dev下的文件。在下面的命令中,-m标志用来指定文件权限位,c意思是字符文件,两个数字分别是文件指向的主要号和次要号。
4、在chroot监狱中设置合适的权限。注意chroot监狱和它的子目录以及子文件必须被root用户所有,并且对普通用户或用户组不可写
2、创建chroot监狱通用配置目录/opt/etc并复制已更新的账号文件(/etc/passwd和/etc/group)到这个目录中
注意:每次向系统添加更多SSH用户时,都需要将更新的帐户文件复制到/opt/clsn/etc/目录中。
从上面可以看出SSH用户被锁定在了chroot监狱中,并且不能使用任何外部命令如(ls、date等等)。
1、从前面的测试中,我们可以看到用户被锁定在了根目录,我们可以为SSH用户创建一个主目录(为所有将来的用户可以这么做)
[1][2]/wiki/LXC[3]/linux/l-lxc-containers/[4]/restrict-ssh-user-to-directory-using-chrooted-jail/[5][6]/napolunyishi/article/details/21078799