chroot

维基百科,自由的百科全书
跳转至: 导航搜索

chroot是在unix系统的一个操作,用于对当前的程序和它的子进程改变真实的磁盘根目录。一个被改变根目录的程序不可以访问和命名在被改变根目录外的文件,那个根目录叫做“chroot监狱(chroot jail,chroot prison)”,chroot这一特殊表达可能指chroot(2)系统调用或chroot(8)前端程序。

历史[编辑]

chroot系统调用在1979年开发Version 7 Unix时出现,在1982年3月18日被Bill Joy加入BSD,那是在4.2BSD发布前17个月,被用于测试安装和构建系统。

应用[编辑]

一个chroot环境可用于创建并运行一个隔离的虚拟软件系统拷贝。对于以下应用是十分有用的:

测试和开发
在chroot测试环境下,测试那些可能对生产系统带来危害的程序。
依赖控制
可以在chroot环境下,设置一个仅有所希望的软件依赖,用于构建和测试。这样可以避免一些对开发者构造带有不同软件库设置所带来的链接(目标文件的链接)问题。
兼容性
早期遗留软件或使用不同ABI的软件必须在chroot环境下运行,因为它们提供的库有可能和宿主机的库起名称或链接冲突。
修复
当一个系统不能启动时,从代替系统(比如Live CD式安装盘),重新写入那些损坏的软件。
特权分离
一个被允许打开文件实例(如文件、链接、网络连接)的软件被放入chroot中,这是对不必要留下在chroot目录工作文件的简单设计。同时也是一个简单的沙盘,也可以防御安全漏洞。注意!有root特权的程序,chroot是没有防御力的。

侷限[编辑]

chroot机制不是为了抵御特权(root)用户的蓄意篡改。在大多数的系统,chroot的情况下并没有正确堆栈并有足够的权限chroot的程序可能会引起第二chroot来逃出。为了减轻这种安全漏洞所带来的风险,使用chroot方案的程序应在使用chroot后尽快放弃root权限,或其他机制如FreeBSD Jails。请注意,某些系统,如FreeBSD,采取预防措施以防止二次进攻的chroot.[1].

  • 在支持设备节点的文件系统中,一个在chroot中的root用户仍然可以创建设备节点和挂载在chroot根目录的文件系统;尽管,chroot机制不是被打算用来阻止低特权用户级访问系统设备。
  • 在启动时,程序都期望能在某些预设位置找到scratch space,配置文件,设备节点共享库。对于一个成功启动的被chroot的程序,在chroot目录必须最低限度配备的这些文件设置。这使得chroot很困难作为一般的沙箱来使用。
  • 只有root用户可以执行chroot。这是为了防止用户把一个setuid的程序放入一个特制的chroot监牢(例如一个有着假的/etc/passwd/etc/shadow文件的chroot监牢)由于引起提权攻击。
  • 在chroot的机制本身也不是为限制资源的使用而设计,如I/O,带宽,磁盘空间或CPU时间。大多数Unix系统都没有以完全文件系统为导向,以即给可能通过网络和过程控制,通过系统调用接口来提供一个破坏chroot的程序。

一些Unix系统提供扩展的chroot机制,—一般称为系统机虚拟化—至少解决其中的一些限制。包括:

在chroot中使用图形界面[编辑]

在chroot环境中使用图形界面是可能的,一下几个方案:

  • xhost
  • 使用内置像Xnest这样的X服务,或现代一点的Xephyr(或者在监牢中启动真正的X服务)
  • 通过开启X11转发(X11 forwarding)的 SSH连接到chroot中(ssh -X)
  • 当一个X服务启动是设置为不监听tcp端口或没有可用的SSH服务器时,使用openroot
  • 通过一个X11 VNC服务,链接到在外环境的VNC客户端

参见[编辑]

参考[编辑]

外部链接[编辑]