myfreax

如何在ubuntu 20.04使用chroot创建独立系统环境

Chroot可以将你的应用从计算机将中隔离,通过把它们放在独立的环境中。如果您正在测试可能会更改重要系统文件或不安全的应用程序,使用chroot创建测试环境是一个非常好的选择

4 min read
By myfreax
如何在ubuntu 20.04使用chroot创建独立系统环境

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 -rfdd if=/dev/zero of=/dev/sda1