每周一贴:chroot 简介

发布时间:2016-06-30 10:57:05 点击次数:1594
0

chroot通过将软件置于一个“jail”(监牢)中,把它与系统其他文件隔离开来。当你要测试一个可能影响你系统或者不安全的软件时,这项技术尤为有用。 从根本上说,chroot是一个特殊的目录,在这个目录中运行的程序无法访问目录外的文件。而从许多方面看,chroot就像在你的系统上安装了另一个系统。技术上说来,chroot暂时地把根目录(通常是“/”)切换到chroot 目录(比如说“/v

chroot通过将软件置于一个“jail”(监牢)中,把它与系统其他文件隔离开来。当你要测试一个可能影响你系统或者不安全的软件时,这项技术尤为有用。

从根本上说,chroot是一个特殊的目录,在这个目录中运行的程序无法访问目录外的文件。而从许多方面看,chroot就像在你的系统上安装了另一个系 统。技术上说来,chroot暂时地把根目录(通常是“/”)切换到chroot 目录(比如说“/var/chroot")。由于根目录是文件系统的顶端,应用程序无法访问高于根目录的目录,所以应用程序与其他的系统文件隔离开了。

需要注意的是,从chroot目录外访问chroot内的文件是可能的。

一、chroot的作用
1. 隔离不安全和不稳定的程序。
2. 在64位系统上运行32位的程序。
3. 在把新包安装到系统前测试它。
4. 在新版的Ubuntu/Ubuntu Kylin上运行旧版本的软件。
5. 构建新包时,能仔细地控制相关依赖。

二、创建一个chroot
1. 安装 schroot 和 debootstrap包:
$ sudo apt-get install schroot debootstrap
2. 以管理员权限为chroot创建一个新目录(这里以 ”var/chroot“为例):
$ sudo mkdir /var/chroot
3. 以管理员权限打开并编辑 /etc/schroot/schroot.conf:
$ sudo gedit /etc/schroot/schroot.conf
然后在文档中加入以下内容:
[yakkety]
description=Ubuntu Yakkety
location=/var/chroot
priority=3
user=your_username
groups=sbuild
root-groups=root

注意,这里”yakkety"是以ubuntu 1610为例,你可以替换成你想要的版本。同时,将 your_username 替换成你的用户名
4. 将Ubuntu 16.10(Yakkety yak)安装到chroot:
$ sudo debootstrap --variant=buildd --arch amd64 yakkety /var/chroot/  
http://mirrors.aliyun.com/ubuntu/
这里的amd64是只下载64位的系统,如果要32位,将它替换成 i386。
5. 一个基本的chroot就创建好了,通过以下命令进入chroot:
$ sudo chroot /var/chroot

三、配置chroot
如果你在chroot环境中想配置DNS解析服务或者访问/proc,可以如下处理:
1. $ sudo cp /etc/resolv.conf  /var/chroot/etc/resolv.conf
2. $ sudo mount -o bind  /proc  /var/chroot/proc

在chroot中,只默认安装了很少的一部分包(甚至"sudo" 也没安装),使用 apt-get install package_name 来安装某个包。
更多详情请浏览:
https://help.ubuntu.com/community/DebootstrapChroot

四、在chroot中运行图形界面程序
1. 将图形界面显示到当前系统:
a) 在chroot shell 里执行:
$ export DISPLAY=:0.0
b) 然后在系统shell里执行:
$ xhost +       (这条命令允许其它用户能够访问系统的Xserver.)
c) 之后你就能在chroot shell里直接启动chroot中的图形程序了,或者在系统shell中通过以下方式启动:
$ sudo chroot  /var/chroot  firefox  -DISPLAY=:0.0
注意,由于缺少很多包,你现在可能无法成功启动这些程序,你可以通过错误信息一一去解决,或者先安装好整个桌面(sudo apt-get install ubuntu-desktop).

2. 创建自己独立的display:
a)  $ sudo apt-get install xserver-xephyr
b)  确保/proc已经挂载,DNS解析服务设置完成。
c)  在系统 shell 中打开Xephyr:
$  Xephyr  -ac  -screen 800x600 :1    (其中800x600为你要设置的窗口大小)
d)  打开另一个终端,进入chroot:
$  sudo chroot  /var/chroot
e)  在chroot shell 中设置display:
$  export DISPLAY=:1
f)  之后就可以通过上述 (四.1.c)中所说两种方式来运行chroot中的图形应用程序了。如果你喜欢,也可以在这个独立的xephyr窗口中启动整个桌面环境。
每周一贴:chroot 简介

五、退出
在chroot shell 中使用 exit 来退出chroot:
$  exit
它会自动移除绑定的目录。