chroot监狱

仔细观察会发现,usermod/groupmod,passwd/gpasswd命令都会有一个chroot参数。

chroot在Linux中是一种特殊的用法,行为是修改新的运行环境的根目录(/,注意不是工作目录)。 类似于ftp服务器的顶级目录(ftp登录用户最高只能到达ftp的/目录,无法再向上进入系统目录)。 在此目录下工作的程序会以新的/为运行环境,好像开辟了一块隔离空间一样,几乎不会对系统环境造成影响。 所以chroot通常被称为“监狱”(jail)。

容器级虚拟化技术就借鉴了类似于chroot的技术,当然要更高级一些,比如docker就基于LXC技术。

chroot简单演示:

比如我要将/mnt/目录作为一个新程序的隔离运行环境(沙箱):

cp -a --parents /etc/ /bin/ /sbin/ /lib* /mnt/  # 将一些系统运行必备的程序和依赖运行库拷贝至/mnt/
chroot /mnt/

此时尽管实际在/mnt/下运行各种命令,但是pwd等程序显示的将会是/, 在程序看来它就好像真的在/目录下运行一样,并且觉察不到真实/的存在,不会破坏真正的系统环境。

某些服务(比如DNS的bind9服务)甚至推荐在chroot环境下运行以获得更高的安全性和隔离性。

chroot在LiveCD中维护原硬盘上已有的系统很有用。比如原硬盘上的系统已经损坏无法启动, 可以通过LiveCD进入一个可用的系统,直接chroot到原来系统的/目录下就可以对原系统进行维护了。 类似于WinPE这样的工具对系统的维护过程。

有关chroot更多介绍与用法参考IBM的文章: 理解chroot