如何在 Ubuntu 14.04 里面配置 chroot 环境

你可能会有很多理由想要把一个应用、一个用户或者一个环境与你的 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 环境需要安装 debootstrap 和 schroot,这两个软件都在 Ubuntu 的镜像源中。其中 schroot 用于创建 chroot 环境。

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

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

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

1. 安装软件包

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

  1. $ sudo apt-get install debootstrap
  2. $ sudo apt-get install schroot

2. 配置 Schroot

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

  1. sudo mkdir /linoxide

编辑 schroot 的配置文件:

  1. sudo nano /etc/schroot/schroot.conf

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

  1. [saucy]
  2. description=Ubuntu Saucy
  3. location=/linoxide
  4. priority=3
  5. users=arun
  6. root-groups=root

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

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

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

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

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

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

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

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

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

4. 完成 chroot 环境

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

  1. sudo nano /etc/fstab

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

  1. proc /linoxide/proc proc defaults 0 0
  2. sysfs /linoxide/sys sysfs defaults 0 0

保存并关闭文件。

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

  1. $ sudo mount proc /linoxide/proc -t proc
  2. $ sudo mount sysfs /linoxide/sys -t sysfs

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

  1. $ sudo cp /etc/hosts /linoxide/etc/hosts

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

  1. $ schroot -l

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

  1. $ sudo chroot /linoxide/ /bin/bash

测试安装的版本:

  1. # lsb_release -a
  2. # uname -a

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

  1. $ DISPLAY=:0.0 ./apps

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

退出 chroot 环境:

  1. # exit

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

  1. $ sudo umount /test/proc
  2. $ sudo umount /test/sys
----------------------------------------------------------------------------------------------------------------------------
原文发布时间:2015-02-25
本文来自云栖合作伙伴“linux中国”

如何在 Ubuntu 14.04 里面配置 chroot 环境相关推荐

  1. 如何在Ubuntu 14.04中使用Samba共享文件

    Linux 下的文件共享利器 Samba 想必大家已经非常熟悉了,今天我们介绍下如何在Ubuntu 14.04中使用 Samba 共享网络文件.打印机和其它公共资源. 1.安装 Samba 和图形配置 ...

  2. 在 Ubuntu 14.04 中配置 PXE 服务器

    PXE(预启动执行环境Preboot Execution Environment)服务器允许用户从网络中启动 Linux 发行版并且可以不需要 Linux ISO 镜像就能同时在数百台 PC 中安装. ...

  3. 如何在Ubuntu 14.04上安装MySQL

    如何在Ubuntu 14.04上安装MySQL 介绍 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一 ...

  4. 关闭防火墙linux 16.04,如何在Ubuntu 16.04上配置和设置防火墙

    在本文中,我们将学习–如何在Ubuntu 16.04上配置和设置UFW(防火墙),UFW代表"不复杂的防火墙",它充当IPTABLES的接口,从而简化了防火墙的配置过程,对于防火墙 ...

  5. 如何在Ubuntu 14.04上使用NSD——一套仅权威DNS服务器

    提供:ZStack云计算 系列教程 本教程为DNS管理介绍系列七篇中的第七篇. 内容介绍 即使对于经验丰富的管理员而言,设置一套DNS服务器以支持域名仍是一项相当复杂的任务.DNS区管理极为重要,然而 ...

  6. 如何在Ubuntu 14.04上安装轻量级的Budgie桌面

    如何在Ubuntu 14.04上安装轻量级的Budgie桌面(v8) 热度 3  评论 115 www.BkJia.Com  网友分享于:   2015-05-05 11:05:11     浏览数4 ...

  7. linux 关掉蓝牙自动,如何在Ubuntu 14.04中默认关闭蓝牙,蓝牙

    如何在Ubuntu 14.04中默认关闭蓝牙,蓝牙 如何在Ubuntu 14.04中默认关闭蓝牙 我最近新买了一台Dell Inspiron 7437,我第一时间做的一些事情之一就是让预装的Windo ...

  8. linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

    Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: 64 ...

  9. 如何在Ubuntu 14.04上使用Percona XtraBackup创建MySQL数据库的热备份

    如何在Ubuntu 14.04上使用Percona XtraBackup创建MySQL数据库的热备份 介绍 使用活动数据库系统时遇到的一个非常常见的挑战是执行热备份,即在不停止数据库服务或将其设置为只 ...

最新文章

  1. C# Idioms: Safely方法
  2. 【Linux】 Samba 服务器安装配置实现与Windows系统的文件共享服务
  3. 华为M2 e服务器信息解析失败,关于华为:华为审核被拒检查HMS-Core更新失败
  4. hadoop namenode启动不了_Hadoop框架:HDFS高可用环境配置
  5. 【MSTR产品】获取当前登陆用户的login_id
  6. 深夜更新鸿蒙OS生态服务,华为频频深夜更新,HMS生态服务范围不断扩大,离替代谷歌不远了?...
  7. Java黑皮书课后题第4章:*4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为int型值时可能会造成精度损失的问题。读取的输入值是一个字符串,比如“11.56“
  8. mysql workbench入门_5分钟入门MySQL Workbench
  9. linux 先编译 再安装,Linux下编译安装FFmpeg
  10. warning:This application is modifying the autolayout engine from a background thread
  11. 信息学奥赛一本通 2042:【例5.10】稀疏矩阵
  12. 动态规划之0-1背包问题
  13. 存储网络与存储系统架构分析
  14. 实用js小汇总--获取服务器控件ID
  15. unity 模型销毁_Unity GameObject 销毁(Destroy)后的几种状态
  16. day05_日常SQL练习(一)
  17. 联想计算机怎么设置硬盘,bios设置修改硬盘模式|联想笔记本BIOS设置硬盘模式教程...
  18. 3GPP TS 29244-g30 中英文对照 | 5.2.6 Combined SGW/PGW Architecture
  19. 跑跑卡丁车,网络中断问题
  20. 使用freemarker引擎动态生成word文件

热门文章

  1. 二、网络编程中的常用类
  2. 用GitHub Copilot 生成的项目中,40%会引入漏洞
  3. 奇安信代码安全实验室帮助微软修复多个高危漏洞,获官方致谢
  4. IBM 开源处理加密数据的工具集
  5. 奇安信RSA观察|RSAC应用安全技术新风向
  6. 平时有没有使用xml和json
  7. Python 单元测试
  8. 代码重构之旅(一) 项目结构
  9. Python 操作 Azure Blob Storage
  10. 分享ISTQB培训体验