For faster navigation, this Iframe is preloading the Wikiwand page for chroot.

chroot

此条目翻译品质不佳。 (2021年1月22日)翻译者可能不熟悉中文或原文语言,也可能使用了机器翻译。请协助翻译本条目或重新编写,并注意避免翻译腔的问题。明显拙劣的翻译请改挂((d|G13))提交删除。

chroot是起源于Unix系统的一个操作,作用于正在运行的进程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由chroot设定根目录的程序,它不能够对这个指定根目录之外的文件进行存取动作,不能读取,也不能更改它的内容。chroot这一特殊表达可以指chroot(2)系统调用或chroot(8)应用程式。

由chroot创造出的那个根目录,叫做“chroot监牢”(chroot jail,或chroot prison)。

历史

1979年,在开发Version 7 Unix时,chroot系统调用首次问世。1982年3月18日,在4.2BSD发布前17个月,比尔·乔伊(Bill Joy)将chroot机制移植到BSD系统上,主要用于测试安装和构建系统。

1991年,威廉·齐斯韦克(William Cheswick)开发出第一个蜜罐程序,来监视入侵骇客的行动。他使用了chroot来进行实作,这是chroot最早被用于开发程序的先例,也因此,chroot创造出的根目录空间,之后被人称为软件监牢(chroot jail)。

2000年,FreeBSD团队,将原本chroot机制,导入虚拟化技术的概念,开发了新的jail系统命令,伴随着FreeBSD 4.0版一同发布。

2004年,因为骇客开发出许多可以破解chroot机制的方法,出现了jailbreak这个术语。

2005年,Sun微系统Solaris系统上开发出Solaris Containers,称它是吃了类固醇的chroot(chroot on steroids)。

2006年,Linux内核中开发出cgroups。2007年,被加到Linux 2.6.24版内核中。2008年,基于cgroups,开发出LXC,以及Docker。2013年被加入Linux 3.8版中。

应用

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

测试和开发
可以经由chroot建立一个测试环境,用来测试软件。这可以减少将软件直接布署到整个生产系统中可能造成的风险。
依赖控制
可以在chroot建立的环境下,进行软件开发,组建以及测试,只保留这个程序需要的软件依赖。这可以避免在系统中预先安装的各种软件库,影响到开发,造成软件开发者在构建软件时,可能遇到一些链接冲突。
兼容性
早期遗留软件或使用不同应用二进制接口(ABI)的软件,因为它们提供的软件库和宿主机的库之间,可能发生名称或链接冲突,可以在chroot环境下运行,以保持系统安全。
修复
当一个系统不能启动时,可以使用chroot,先从另一个根文件系统(比如从安装媒体,或是Live CD)下开机,之后再回到受损的环境中,重新修正系统。
特权分离
将允许开启文件描述符(例如文件,流水线或是网络连接)的程序放到chroot下执行,不用特地将工作所需的文件,放到chroot路径底下,这可以简化软件监牢的设计。chroot简化了安全设计,可以创造出一个沙盒环境,来执行一个有潜在危险的特权程序,以预先防御可能的安全漏洞。但值得注意的是,chroot没有足够能力去防御一个拥有特权的路径造成危害。

限制

chroot机制的设计中,并不包括抵抗特权用户(root)的蓄意篡改。在大多数的系统中,chroot环境没有设计出适当的堆叠,所以一个在chroot下执行的程序,可能会通过第二次chroot来获得足够权限,逃出chroot的限制。为了减轻这种安全漏洞所带来的风险,在使用chroot后,在chroot下执行的程序,应该尽快放弃root权限,或是改用其他机制来替代,例如FreeBSD jail。在某些操作系统中,例如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客户端

参见

参考

  1. ^ 存档副本. [2011-01-25]. (原始内容存档于2019-09-24). 

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
chroot
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?