如何配置的chroot环境试验的Ubuntu 12.04 VPS

介绍

有很多情况下,您可能希望在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环境,我们将使用一些工具,将帮助安装一些基本的分发文件到我们的新环境。 这使得该过程更快,有助于确保我们有库和基本的基础包可用。

一个工具,叫做dchrootschroot ,用于管理不同的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环境非常适合测试和构建不同架构的软件,而不需要一个完全独立的系统。 在正确的情况下使用它们,您会发现它们为各种问题提供了灵活的解决方案。

作者:Justin Ellingwood
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏