金钱(警告)
状态: 被贬值
如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已於 2017 年 4 月 28 日到達終止期 (EOL) 並不再收到安全性修補或更新。
相反,请参阅: 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本编写的指南。
介绍
有许多情况下,你可能希望在Linux系统中隔离某些应用程序,用户或环境,不同的操作系统有不同的方法来实现隔离,而在Linux中,一个经典的方式是通过一个chroot
环境。
在本指南中,我们将讨论如何使用chroot设置一个孤立的环境,以便在您的常规操作系统和包含的环境之间创建屏障,这主要是用于测试目的。
大多数系统管理员将受益于知道如何实现快速和轻松的切割环境,这是一个有价值的技能。
问:什么是CHROOT环境?
chroot 环境是一个操作系统调用,将根位置暂时更改为新文件夹. 通常,操作系统对根目录的概念是位于/
的实际根。
任何从chroot
内部运行的应用程序将无法在原则上看到操作系统的其余部分,类似地,被限制在chroot
环境中的非 root 用户将无法进一步提升目录等级。
什么时候使用 Chroot 环境
例如,它允许您在与正常操作系统分离的环境中构建、安装和测试软件,也可以用作在 64 位环境中运行 32 位应用程序的方法。
一般来说,你应该把chroot
看作是从你的文件系统子集中暂时重建操作系统环境的一种方式,这可能意味着将你的正常实用程序关闭为实验版本,它可以让你看到应用程序在未受污染的环境中如何行为,它可以帮助你进行恢复操作,启动系统,或为潜在的攻击者创造一个额外的障碍。
什么时候不使用Chroot环境
虽然它们可以用作障碍,但它们并不足够孤立,以作为一个合法的守护者来使攻击者远离更大的系统。
虽然chroot环境肯定会为非特权用户做额外的工作,但它们应该被视为一个硬化功能而不是安全功能,这意味着它们试图减少攻击引擎的数量,而不是创建一个完整的解决方案。
设置工具
为了充分利用我们的 root 环境,我们将使用一些工具,帮助我们将一些基本的分发文件安装到我们的新环境中,这使过程更快,有助于确保我们有库和基本的基础包。
一个工具,称为dchroot
或schroot
,用于管理不同的chroot环境,这可以用来轻松地在chroot环境中执行命令。
另一个工具被称为debootstrap
,它将在另一个系统的子目录中创建一个基础操作系统,这使我们能够快速脱离地面并运行,因为一个root环境需要环境中的某些工具和库才能正常运作。
我们将安装dchroot
,因为它实际上会拉入schroot
,并给我们使用的灵活性:
1sudo apt-get update
2sudo apt-get install dchroot debootstrap
现在我们有相应的工具,我们只需要指定一个目录,我们想要用作我们的环境根. 我们将在我们的根目录中创建一个名为测试
的目录:
1sudo mkdir /test
正如我们之前所述,现代系统中的dchroot
命令实际上是围绕更有能力的schroot
命令的包装,因此,我们将用我们的信息修改schroot
配置文件。
现在让我们用行政权限打开文件:
1sudo nano /etc/schroot/schroot.conf
内部,我们需要创建与我们想要创建的系统相匹配的配置选项,对于Ubuntu系统,我们将想要指定版本等。
我们目前正在使用Ubuntu 12.04系统,但让我们假设我们想测试Ubuntu 13.10上可用的某些软件包,代码名为Saucy Salamander
。
1[saucy]
2description=Ubuntu Saucy
3location=/test
4priority=3
5users=demouser
6groups=sbuild
7root-groups=root
保存并关闭文件。
用骨骼操作系统人口 Chroot 环境
现在,我们需要做的就是在我们的chroot目标下安装一个系统:
1sudo debootstrap --variant=buildd --arch amd64 saucy /test/ http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
在上面的命令中,--variant
标志指明你想要构建的chroot类型。buildd
选项指明它还应该安装包含在build-essential
包内的Build工具,以便允许它在软件创建框中使用。
1man debootstrap
寻找--变量
的解释。
「--arch」指明了客户端系统的架构。如果架构不同于主架构,你也应该通过「--foreign」旗帜!之后,你需要第二次拨打「debootstrap」命令来完成安装,使用一些类似的:
1sudo chroot /test /debootstrap/debootstrap --second-stage
这将完成实际安装,而第一个命令只在架构差异时下载包,如果架构不匹配,请不要忘记最初的debootstrap
的外星
旗帜。
命令中的saucy
应该匹配您在schroot.conf
文件中选择的配置标题。/test/
指定目标,URL是包含您想要的文件的存储库的URL。
完成后,您可以通过检查目标目录查看已下载和安装的所有文件:
1ls /test
1bin dev home lib64 mnt proc run srv tmp var
2boot etc lib media opt root sbin sys usr
正如你所看到的,这看起来就像一个普通的文件系统. 它刚刚在一个非传统的目录中创建。
最终配置和更改到新环境中
系统安装后,我们需要做一些最终的配置,以确保系统正常工作。
首先,我们要确保我们的主机fstab
知道我们的客人中的某些伪系统。
1sudo nano /etc/fstab
1proc /test/proc proc defaults 0 0
2sysfs /test/sys sysfs defaults 0 0
保存并关闭文件。
现在,我们将需要在我们的客人内部安装这些文件系统:
1sudo mount proc /test/proc -t proc
2sudo mount sysfs /test/sys -t sysfs
我们还希望复制我们的 /etc/hosts
文件,以便我们可以访问正确的网络信息:
1cp /etc/hosts /test/etc/hosts
最后,我们可以通过这样的命令进入chroot环境:
1sudo chroot /test/ /bin/bash
您将被带入新的chroot环境,您可以通过移动到 root 目录,然后键入:
1cd /
2ls -di
如果你拿回任何数字,但)。
走出一个子
要退出一个 root 环境,您只需要扭转您之前配置的一些步骤。
首先,你像你离开任何其他壳环境一样退出root环境:
1exit
之后,我们需要卸载我们的proc和sys文件系统:
1sudo umount /test/proc
2sudo umount /test/sys
您也可以从您的 /etc/fstab
文件中删除额外的行,如果您不打算定期使用此文件。
如果你已经完全完成了这个环境,请放心删除所有东西存储的目录:
1rm -rf /test/
结论
虽然有可能有其他技术,如Docker提供更完整的隔离,但这些基层环境很容易创建和管理,并可从主机操作系统中获得,这有时是有利的。
记住,在使用chroot时,使用chroot是不合适的,而试图避免这些情况时,chroot环境非常适合测试和构建不同架构的软件,而无需完全独立的系统。