你可能会有很多理由想要把一个应用、一个用户或者一个环境与你的 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=UbuntuSaucy 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 00 2.sysfs /linoxide/sys sysfs defaults 00

保存并关闭文件。

挂载一些文件系统到 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

更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-02/113975.htm

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2015-02/113975.htm

如何在 Ubuntu 14.04 里面配置 chroot 环境的更多相关文章

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

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

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

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

  3. 【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机

    介绍 转自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD% ...

  4. 如何在Ubuntu 14.04中安装最新版Eclipse

    想必很多开发人员都知道,Ubuntu 软件源中提供的并不是最新版本的 Eclipse,本教程就教大家如何在 Ubuntu 14.04 中快速安装 Eclipse 官方发布的最新版本. 到目前为止,Ec ...

  5. Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

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

  6. 转:如何在Ubuntu 14.04中安装最新版Eclipse

    想必很多开发人员都知道,Ubuntu 软件源中提供的并不是最新版本的 Eclipse,本教程就教大家如何在 Ubuntu 14.04 中快速安装 Eclipse 官方发布的最新版本. 到目前为止,Ec ...

  7. Ubuntu 14.04 虚拟机配置固定ip地址

    Ubuntu 14.04 虚拟机配置固定ip地址: 虚拟机用的NAT方式配置: 1.虚拟机: 虚拟机→设置→网络适配器→NAT模式: 2.虚拟机:编辑→虚拟网络编辑器→更改设置→选择NAT→填入子网I ...

  8. Ubuntu 14.04下java开发环境的搭建--3--Tomcat及MySQL的安装

    前面两篇文章,已经说明了JDK和Eclipse 的安装方法,下面简单说一下,Tomcat及MySQL的安装方法. Tomcat的安装. 在合适的地方解压apache-tomcat-6.0.39.tar ...

  9. [eShopOnContainers 学习系列] - 03 - 在远程 Ubuntu 16.04 上配置开发环境

    直接把 md 粘出来了,博客园的富文本编辑器换成 markdown,没啥效果呀 ,先凑合吧.实在不行换地方   # 在远程 Ubuntu 16.04 上配置开发环境 ## 零.因 为什么要用这么麻烦的 ...

随机推荐

  1. iOS app上传错误集锦(转载)

    1.工程里增加了版本自动更新. 2.未增加判断网络状态的类Reachability. 3.问题:error itms -90049 This bundel is invalid. The bundle ...

  2. Spring 集成 RMI

    Maven <dependency> <groupId>org.springframework</groupId> <artifactId>spring ...

  3. Linux Linux共享库

    so文件在linux中为共享库,与windows下的dll类似. so文件中的函数可供多个进程调用,最大可能的提供二进制代码复用. 共享库可以使代码的维护工作大大简化,当修正了一些错误或者添加了新特性 ...

  4. 前端开发工程师:网易web前端课程,价值1499元【无水印版】

    这套网上的朋友购买分享给我的,特此分享~ 让大家都受益 早日成为强大的web前端开发工程师!!赶紧回复下载吧 下载地址:http://fu83.cn/thread-172-1-1.html

  5. iOS: 使用CGContextRef,CGPath和UIBezierPath来绘画

    这三种东西:CGContextRef,CGPath和UIBezierPath.本质上都是一样的,都是使用Quartz来绘画.只不过把绘图操作暴露在不同的API层面上,在具体实现上,当然也会有一些细小的 ...

  6. 我给出的一份Java服务器端面试题-适合电话面试

    这部分内容,参考了<面试官的七种武器>一文. 电面与face2face的面试还是有区别的,很多考察方式无法使用. 从简历聊起,逐渐进入正题. Java语法 重载与重写的区别? java如何 ...

  7. Android中图片大小和屏幕密度的关系讲解

    Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi.drawable-mdpi.drawabl ...

  8. 第十四课:js操作节点的插入,复制,移除

    节点插入 appendChild方法,insertBefore方法是常用的两个节点插入方法,具体实现,请看js高级程序设计,或者自行百度. 这里提一下面试时经常会问到的问题,插入多个节点时,你是怎么插 ...

  9. AngularJS开发指南5:AngularJS表达式详解

    AngularJS表达式类似Javascript的代码片段,通常在数据绑定中用到,写在双大括号中,如:{{表达式}}.表达式是用$parse方法来处理的. 下面是一些合法的AngularJS表达式 1 ...

  10. IOS 遍历未知对象的属性和方法

    /* 注意:要先导入ObjectC运行时头文件,以便调用runtime中的方法*/ #import <objc/runtime.h> @implementation NSObject (P ...