Chroot可以将你的应用从计算机将中隔离,通过把它们放在独立的环境中。如果您正在测试可能会更改重要系统文件或不安全的应用程序,使用chroot创建测试环境是一个非常好的选择,不过对于现在的技术来说最好的方式应该是Docker。
在此教程中解释了有关使用chroot的基本概念,并提供了启动和运行基本chroot的说明
在查看本教程时你必须具备管理员的权限以及如何使用sudo和其它一些常用基本命令
基本概念
chroot
基本上是计算机上的一个特殊目录,它阻止应用程序(如果从该目录内部运行)访问目录外的文件,chroot
就像在现有操作系统中安装另一个操作系统
从技术上讲,chroot
会暂时将根目录(通常为/)更改为chroot
目录(例如/var/chroot
)。由于根目录是文件系统层次结构的顶层,因此应用程序无法访问根目录以外目录,使得应用程序与系统的其余部分隔离,这可以防止chroot
中的应用程序干扰计算机上其他位置的文件。
chroot外部的软件可以访问chroot内的文件
使用chroots
以下是肯能会使用chroot的情景:
- 隔离不安全和不稳定的应用程序
- 在64位系统上运行32位应用程序
- 在生产系统上安装新软件包之前测试它们
- 在更现代的Ubuntu版本上运行旧版本的应用程序
- 构建新的包,允许仔细控制已安装的依赖包
创建一个chroot
安装schroot和debootstrap包
sudo apt-get install schroot debootstrap -y
为chroot创建一个新目录。在此过程中,将使用目录/var/chroot这个目录作为新的根目录,请在命令行中键入
sudo mkdir /var/chroot
在文本编辑器中打开/etc/schroot/schroot.conf
cd /etc/schroot
vim schroot.conf
将以下行添加到schroot.conf中,然后:wq保存并关闭配置文件,将your_username替换为您的用户名,这里使用的myfreax。
[lucid]
description=Ubuntu Lucid
location=/var/chroot
priority=3
users=myfreax
groups=sbuild
root-groups=root
查看当前发行版的名称
lsb_release -a
上面的命令将会输出一下信息
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
然后执行debootstrap,安装一些依赖包
sudo debootstrap --variant=buildd --arch x64 xenial /var/chroot/ http://mirror.url.com/ubuntu/
这将在chroot中创建Ubuntu 16.04 xenial的基本“安装”,可能需要一段时间才能下载软件包
您可以使用您选择的Ubuntu版本替换xenial
您必须使用本地有效归档镜像的URL 更改上述mirror.url.com
现在应该已经创建了一个基本的chroot。执行下面的命令以更改为chroot内的shell
sudo chroot /var/chroot
设置chroot
配置chroot的环境以提供DNS解析和访问/proc等功能。
注意:以下的命令chroot之外的shell中输入这些命令,即在原宿主机内
挂载/proc文件系统到chroot环境,该目录存储着进程所需文件,比如pid文件等
sudo mount -o bind /proc /var/chroot/proc
复制DNS配置文件到chroot内部,让chroot环境也可以进行DNS解析
sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf
默认情况下,chroot中安装的软件包很少,甚至没有sudo,可以使用一下命令安装
sudo apt-get install package_name
至此,你已经完成了一个基本chroot
环境配置,然后你可以在chroot
环境内愉快的执行所有命令包括rm -rf
,dd if=/dev/zero of=/dev/sda1