介绍
有很多情况下,您可能希望在Linux系统中隔离某些应用程序,用户或环境。 不同的操作系统有实现隔离的不同的方法,并在Linux中,一个典型的方法是通过一个chroot
环境。
在本指南中,我们将讨论如何使用chroot设置隔离环境,以便在常规操作系统和包含的环境之间创建屏障。 这主要用于测试目的。 我们将讨论何时可能希望利用此技术,以及何时使用另一种解决方案更好的主意。 我们将在Ubuntu 12.04 x86_64 VPS实例上讨论这些步骤。
大多数系统管理员将从知道如何完成一个快速和容易的chroot环境中获益,这是一个宝贵的技能。
什么是Chroot环境?
chroot环境是一种操作系统调用,它会将根位置临时更改为新文件夹。 典型地,根目录的操作系统的概念是位于“实际根/
”。 然而,随着chroot
,您可以指定其他目录,作为一个chroot期间的顶级目录。
个从该内运行的任何应用程序chroot
将无法看到操作系统的其余部分中的原则。 类似地,局限于chroot环境的非root用户将无法进一步向上移动目录层次结构。
何时使用Chroot环境
这在各种情况下都很有用。 例如,它允许您在与正常操作系统分离的环境中构建,安装和测试软件。 它也可以用作在64位环境中运行32位应用程序的方法。
通常情况下,你应该想到的chroot
,以此来临时重新创建文件系统的一个子集的操作系统环境。 这意味着可以关闭实验版本的正常实用程序,它可以允许您查看应用程序在未受污染的环境中的行为,它可以帮助您进行恢复操作,引导系统或创建额外的障碍以突破将来的攻击者。
不使用Chroot环境时
Linux chroot环境不应单独用作安全功能。 虽然它们可以用作屏障,但是它们并不足够孤立,不能作为合法的保护措施来阻止攻击者进入更大的系统。 这是由于执行chroot的方式以及进程和人员可以突破环境的方式。
虽然chroot环境肯定会为无特权的用户进行额外的工作,但它们应该被视为一个强化功能,而不是一个安全功能,这意味着他们试图减少攻击向量的数量,而不是创建一个完整的解决方案。 如果需要完全隔离,请考虑一个更完整的解决方案,例如Linux容器,Docker,vservers等。
设置工具
为了充分利用我们的chroot环境,我们将使用一些工具,将帮助安装一些基本的分发文件到我们的新环境。 这使得该过程更快,有助于确保我们有库和基本的基础包可用。
一个工具,叫做dchroot
或schroot
,用于管理不同的chroot环境。 这可以用于在chroot环境中轻松执行命令。 该dchroot
命令是遗留命令,并在该点作为兼容性包装器被实际实现schroot
,在大多数系统的更现代的变体。
其他工具被称为debootstrap
,这将另一系统的子目录内创建一个基本操作系统。 这使我们能够快速下到地面并运行,因为chroot环境需要在环境中的某些工具和库才能正常工作。
让我们现在安装这两个包。 我们将安装dchroot
,因为它实际上将拉schroot
,并给我们无论使用的灵活性:
sudo apt-get update
sudo apt-get install dchroot debootstrap
现在我们有了适当的工具,我们只需要指定一个我们想要用作我们的环境根目录。 我们将创建一个名为test
在我们的根目录下:
sudo mkdir /test
正如我们前面所述, dchroot
在现代系统命令各地更强大的包装实际上是实现schroot
命令。 因为这个原因,我们将修改schroot
与我们的信息的配置文件。
现在让我们使用管理权限打开该文件:
sudo nano /etc/schroot/schroot.conf
在内部,我们需要创建匹配我们希望创建的系统的配置选项。 对于Ubuntu系统,我们将要指定版本,等有Debian的系统注释良好值( schroot
Debian是原),这应该给你一个好主意。
我们现在在Ubuntu 12.04系统上,但是我们想测试一些在Ubuntu 13.10上可用的软件包,代码为“Saucy Salamander”。 我们可以创建一个条目,如下所示:
[saucy]
description=Ubuntu Saucy
location=/test
priority=3
users=demouser
groups=sbuild
root-groups=root
保存并关闭文件。
使用骨架操作系统填充Chroot环境
现在,我们需要做的是在我们的chroot目标下安装一个系统:type:
sudo debootstrap --variant=buildd --arch amd64 saucy /test/ http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
在上面的命令中, --variant
标志指定你想建立的chroot的类型。 该buildd
选项指定它也应该安装建立包含内工具build-essential
包装,以允许它使用现成的软件创建。 您可以通过键入以下内容找到更多选项:
man debootstrap
搜索--variant
解释。
该--arch
指定客户机系统的架构。 如果架构是从父架构不同,你也应该通过--foreign
标志! 然后,你就需要调用debootstrap
命令第二次来完成安装,使用类似:
sudo chroot /test /debootstrap/debootstrap --second-stage
这将执行实际安装,而第一个命令仅当存在体系结构差异时下载软件包。 不要忘了--foreign
标志初始debootstrap
如果结构不匹配。
该saucy
的命令应该与您在您的配置中选择的标题schroot.conf
文件。 在/test/
指定目标和URL是存储库包含您想要的文件的URL。 这些一般是,你会发现在你的相同格式/etc/apt/sources.list
文件。
完成后,您可以通过检出目标目录来查看已下载和安装的所有文件:
ls /test
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
如你所见,这看起来就像一个普通的文件系统。 它刚刚创建在一个非常规的目录。
最终配置和更改为新环境
安装系统后,我们需要进行一些最终配置,以确保系统正常运行。
首先,我们要确保我们的主机fstab
是意识到我们的客人一些伪系统。 将这样的行添加到fstab的底部:
sudo nano /etc/fstab
proc /test/proc proc defaults 0 0
sysfs /test/sys sysfs defaults 0 0
保存并关闭文件。
现在,我们需要在客户端安装这些文件系统:
sudo mount proc /test/proc -t proc
sudo mount sysfs /test/sys -t sysfs
我们也想复制我们的/etc/hosts
的文件,这样我们将有机会获得正确的网络信息:
cp /etc/hosts /test/etc/hosts
最后,我们可以通过这样的命令进入chroot环境:
sudo chroot /test/ /bin/bash
你将被带入你的新chroot环境。 你可以通过移动到根目录,然后键入:
cd /
ls -di
如果你获得了任意数量,但2
,你是在一个chroot环境。 在这种环境中,您可以安装软件,并做许多事情,而不影响主机操作系统(除了占用资源)。
退出Chroot
要退出chroot环境,您只需要逆转之前配置的一些步骤。
首先,你以root身份退出chroot环境,就像退出任何其他shell环境一样:
exit
然后,我们需要卸载我们的proc和sys文件系统:
sudo umount /test/proc
sudo umount /test/sys
您也可以删除从您的其他行/etc/fstab
的文件,如果你不打算再经常使用这一点。
如果您完全使用此环境,请随时删除存储所有内容的目录:
rm -rf /test/
结论
虽然当然有其他技术,如Docker提供更完全的隔离,这些chroot环境容易创建和管理,并可从主机操作系统中获得,这有时是有利的。 它是一个很好的工具,并且是非常轻的重量。
记住chroot是有用的情况下,尽量避免使用chroot的情况是不适当的。 Chroot环境非常适合测试和构建不同架构的软件,而不需要一个完全独立的系统。 在正确的情况下使用它们,您会发现它们为各种问题提供了灵活的解决方案。