如何在 Ubuntu 14.04 里面配置 chroot 环境
创始人
2024-03-01 14:53:33
0

你可能会有很多理由想要把一个应用、一个用户或者一个环境与你的 linux 系统隔离开来。不同的操作系统有不同的实现方式,而在 linux 中,一个典型的方式就是 chroot 环境。

在这份教程中,我会一步一步指导你怎么使用 chroot 命令去配置一个与真实系统分离出来的独立环境。这个功能主要可以用于测试项目,以下这些步骤都在 Ubuntu 14.04 虚拟专用服务器(VPS)上执行。

学会快速搭建一个简单的 chroot 环境是一项非常实用的技能,绝大多数系统管理员都能从中受益。

Chroot 环境

一个 chroot 环境就是通过系统调用,将一个本地目录临时变成根目录。一般所说的系统根目录就是挂载点"/",然而使用 chroot 命令后,你可以使用其它目录作为根目录。

原则上,任何运行在 chroot 环境内的应用都不能访问系统中其他信息(LCTT译注:使用 chroot 把一个目录变成根目录,在里面运行的应用只能访问本目录内的文件,无法访问到目录外的文件。然而,运行在 chroot 环境的应用可以通过 sysfs 文件系统访问到环境外的信息,所以,这里有个“原则上”的修饰语)。

Chroot 环境的用处

  • 测试一个不稳定的应用服务不会影响到整个主机系统。
  • 就算使用 root 权限做了些不当的操作,把 chroot 环境搞得一塌糊涂,也不会影响到主机系统。
  • 可以在你的系统中运行另外一个操作系统。

举个例子,你可以在 chroot 环境中编译、安装、测试软件,而不去动真实的系统。你也可以在64位环境下使用 chroot 创建一个32位环境,然后运行一个32位的程序(LCTT泽注:如果你的真实环境是32位的,那就不能 chroot 一个64位的环境了)。

但是为了安全考虑,chroot 环境为非特权用户设立了非常严格的限制,而不是提供完整的安全策略。如果你需要的是有完善的安全策略的隔离方案,可以考虑下 LXC、Docker、vservers等等。

Debootstrap 和 Schroot

使用 chroot 环境需要安装 debootstrapschroot,这两个软件都在 Ubuntu 的镜像源中。其中 schroot 用于创建 chroot 环境。

Debootstrap 可以让你通过镜像源安装任何 Debian(或基于 Debian 的)系统,装好的系统会包含最基本的命令。

Schroot 命令允许用户使用相同的机制去创建 chroot 环境,但在访问 chroot 环境时会做些权限检查,并且会允许用户做些额外的自动设置,比如挂载一些文件系统。

在 Ubuntu 14.04 LTS 上,我们可以通过两步来实现这个功能:

1. 安装软件包

第一步,在Ubuntu 14.04 LTS 主机系统上安装 debootstrap 和 schroot:

$ sudo apt-get install debootstrap 
$ sudo apt-get install schroot

2. 配置 Schroot

现在我们有工具在手,需要指定一个目录作为我们的 chroot 环境。这里创建一个目录先:

sudo mkdir /linoxide

编辑 schroot 的配置文件:

sudo nano /etc/schroot/schroot.conf

再提醒一下,我们现在是在 Ubuntu 14.04 LTS 系统上。如果我们想测试一个软件包能不能在 Ubuntu 13.10(代号是“Saucy Salamander”) 上运行,就可以在配置文件中添加下面的内容:

[saucy]
description=Ubuntu Saucy
location=/linoxide
priority=3
users=arun
root-groups=root

根据你的系统要求,调整上面的配置信息。

3. 使用 debootstrap 安装32位 Ubuntu 系统

Debootstrap 命令会在你的 chroot 环境里面下载安装一个最小系统。只要你能访问镜像源,你就可以安装任何基于 Debian 的系统版本。

前面我们已经创建了 /linoxide 目录用于放置 chroot 环境,现在我们可以在这个目录里面运行 debootstrap 了:

cd /linoxide
sudo debootstrap --variant=buildd --arch amd64 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/
sudo chroot /linoxide /debootstrap/debootstrap --second-stage

你可以将 –arch 的参数换成 i386 或其他架构,只要存在这种架构的镜像源。你也可以把镜像源 http://archive.ubuntu.com/ubuntu/ 换成离你最近的镜像源,具体可参考 Ubuntu 官方镜像主页

注意:如果你是在64位系统中创建32位系统,你需要在上面第3行命令中加入 –foreign 选项,就像下面的命令:

sudo debootstrap --variant=buildd --foreign --arch i386 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/

下载需要一段时间,看你网络带宽性能。最小系统大概有500M。

4. 完成 chroot 环境

安装完系统后,我们需要做一些收尾工作,确保系统运行正常。首先,保证主机的 fstab 程序能意识到 chroot 环境的存在:

sudo nano /etc/fstab

在文件最后面添加下面的配置:

proc /linoxide/proc proc defaults 0 0
sysfs /linoxide/sys sysfs defaults 0 0

保存并关闭文件。

挂载一些文件系统到 chroot 环境:

$ sudo mount proc /linoxide/proc -t proc
$ sudo mount sysfs /linoxide/sys -t sysfs

复制 /etc/hosts 文件到 chroot 环境,这样 chroot 环境就可以使用网络了:

$ sudo cp /etc/hosts /linoxide/etc/hosts

最后使用 schroot -l 命令列出系统上所有的 chroot 环境:

$ schroot -l

使用下面的命令进入 chroot 环境:

$ sudo chroot /linoxide/ /bin/bash

测试安装的版本:

# lsb_release -a
# uname -a

为了在 chroot 环境中使用图形界面,你需要设置 DISPLAY 环境变量:

$ DISPLAY=:0.0 ./apps

目前为止,我已经成功地在 Ubuntu 14.04 LTS 上安装了 Ubuntu 13.10。

退出 chroot 环境:

# exit

清理一下,卸载文件系统:

$ sudo umount /test/proc
$ sudo umount /test/sys

via: http://linoxide.com/ubuntu-how-to/configure-chroot-environment-ubuntu-14-04/

作者:Arun Pyasi 译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

相关内容

如何在CentOS系统中使...
理解chroot的核心功能 在Linux系统中,(Change R...
2025-03-07 06:51:54
不小心重命名了libc.s...
在无法在救援模式下进行chroot的情况下,你可以尝试以下解决方法...
2025-01-10 10:00:47
编写脚本来进入chroot...
使用以下示例代码编写脚本:#!/bin/bashset -e在ch...
2024-12-05 11:01:04
Asp.netCoreRa...
如果你在Asp.net Core Razor Pages中使用Bo...
2024-09-18 05:00:38
如何通过 chroot 恢...
这篇速成指南诠释了一些步骤,它对于恢复一个 Arch Linux ...
2024-03-02 13:10:11
Atoms 是一个可以让你...
chroot 环境为你在 Linux 中进行测试提供了隔离。你无需...
2024-03-02 12:44:29

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...