如何在linux上使用chroot命令

chroot命令可以将您送进监狱,隔离您的开发或测试环境,或者只是提高系统的安全性。我们将向您展示最简单的使用方法。...

chroot命令可以将您送进监狱,隔离您的开发或测试环境,或者只是提高系统的安全性。我们将向您展示最简单的使用方法。

什么是chroot?

如果您试图衡量命令的有用性,则必须考虑它提供的功能及其易用性。如果它太复杂了,人们无法使用,或者太冗长了,以至于他们不想尝试使用它,那么它的功能也可能是零。如果没有人使用它,它就不提供任何功能。

在与Linux用户亲自讨论和在论坛上讨论时,chroot命令似乎被认为是一个很难使用的命令,或者是一个过于挑剔和繁琐的设置。似乎这个非常好的实用程序并没有被尽可能多地使用。

使用chroot,您可以在一个封装的文件系统中设置和运行程序或交互式shell(如Bash),该文件系统无法与常规文件系统进行交互。chroot环境中的所有内容都被写入和包含。chroot环境中的任何东西都不能在不升级到root权限的情况下看到它自己的、特殊的根目录。这就为这种环境赢得了一个chroot监狱的绰号。术语“jail”不应该与FreeBSD的jail命令混淆,后者创建了一个比通常的chroot环境更安全的chroot环境。

但实际上,有一种非常简单的方法可以使用chroot,我们将逐步介绍它。我们使用常规的Linux命令,它可以在所有发行版上运行。一些Linux发行版有专门的工具来设置chroot环境,比如Ubuntu的debootstrap,但是我们的发行版是不可知的。

你应该什么时候使用chroot?

chroot环境提供了类似于虚拟机的功能,但它是一个更轻量级的解决方案。捕获系统不需要安装和配置虚拟机监控程序,例如VirtualBox或virtualmachinemanager。它也不需要在捕获系统中安装内核。捕获系统共享您现有的内核。

从某种意义上说,chroot环境更接近LXC等容器,而不是虚拟机。它们轻量级,部署迅速,创建和启动一个可以自动化。与容器一样,配置它们的一种方便方法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。

一些常见用途是:

软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法在开发人员的计算机上复制。开发人员在他们的开发计算机上安装了各种各样的工具和库,这是普通用户和PV所没有的。通常,为开发人员工作但不为其他人工作的新软件使用的是开发人员PC上的资源,而该资源尚未包含在软件的测试版本中。chroot允许开发人员在他们的计算机上有一个简单的香草俘虏环境,他们可以在将软件提供给PV之前将其浸入其中。可以使用软件所需的最小依赖项来配置捕获环境。

降低开发风险。开发人员可以创建一个专用的开发环境,这样在其中发生的任何事情都不会弄乱他的实际PC。

正在运行不推荐使用的软件。有时候你只需要运行一个旧版本的东西。如果旧软件的需求与您的Linux版本冲突或不兼容,您可以为问题软件创建一个chroot环境。

恢复和文件系统升级:如果Linux安装无法操作,可以使用chroot将损坏的文件系统装载到livecd上的装载点。这允许您在损坏的系统中工作并尝试修复它,就好像它是在root/上正常安装的一样。这意味着损坏系统中的预期文件路径将从根目录而不是从livecd的装入点正确引用。在描述如何将Linux文件系统从ext2或ext3迁移到ext4的文章中使用了类似的技术。

围栏应用。在chroot环境中运行FTP服务器或其他连接到internet的设备可以限制外部攻击者可能造成的损害。这是加强系统安全性的重要一步。

相关:如何在Linux上将Ext2或Ext3文件系统迁移到Ext4

创建chroot环境

我们需要一个目录作为chroot环境的根目录。因此,我们有一种引用该目录的简写方法,我们将创建一个变量并在其中存储目录的名称。这里我们设置一个变量来存储到“testroot”目录的路径。不管这个目录是否还不存在,我们很快就会创建它。如果目录确实存在,它应该是空的。

chr=/home/dave/testroot

如何在linux上使用chroot命令

如果目录不存在,我们需要创建它。我们可以用这个命令。-p(parents)选项确保同时创建任何缺少的父目录:

mkdir -p $chr

如何在linux上使用chroot命令

我们需要创建目录来保存chroot环境将需要的操作系统部分。我们将建立一个使用Bash作为交互式shell的简约Linux环境。我们还将包括touch、rm和ls命令。这将允许我们使用Bash的所有内置命令和touch、rm和ls。我们将能够创建、列出和删除文件,并使用Bash。在这个简单的例子中,仅此而已。

列出需要在{}大括号扩展中创建的目录。

mkdir -p $chr/{bin,lib,lib64}

如何在linux上使用chroot命令

现在我们将目录更改为新的根目录。

cd $chr

如何在linux上使用chroot命令

让我们将我们在简约主义Linux环境中需要的二进制文件从常规的“/bin”目录复制到chroot“/bin”目录中。v(verbose)选项使cp在执行每个复制操作时告诉我们它在做什么。

cp -v /bin/{bash,touch,ls,rm} $chr/bin

如何在linux上使用chroot命令

这些文件是为我们复制的:

如何在linux上使用chroot命令

这些二进制文件将具有依赖关系。我们需要发现它们是什么,并将这些文件复制到我们的环境中,否则bash、touch、rm和ls将无**常工作。我们需要依次为每个选定的命令执行此操作。我们先去狂欢一下。ldd命令将为我们列出依赖项。

ldd /bin/bash

如何在linux上使用chroot命令

依赖项在终端窗口中标识和列出:

如何在linux上使用chroot命令

我们需要把这些文件复制到我们的新环境中。从列表中挑选细节,然后一次复制一个,这既耗时又容易出错。

谢天谢地,我们可以半自动化。我们将再次列出依赖项,这次我们将形成一个列表。然后我们将在列表中循环复制文件。

在这里,我们使用ldd列出依赖项,并通过管道将结果输入egrep。使用egrep与使用grep和-E(扩展正则表达式)选项相同。-o(仅匹配)选项将输出限制为行的匹配部分。我们正在寻找以数字[0-9]结尾的匹配库文件。

list="$(ldd /bin/bash | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

我们可以使用echo检查列表的内容:

echo $list

如何在linux上使用chroot命令

现在我们已经有了这个列表,我们可以通过下面的循环逐步遍历它,一次复制一个文件。我们用变量i来遍历列表。对于列表中的每个成员,我们将文件复制到chroot根目录中,它是$chr中的值。

v(verbose)选项使cp在执行每个副本时通知它。--parents选项确保在chroot环境中创建任何缺少的父目录。

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

这是输出:

我们将使用该技术来捕获其他每个命令的依赖关系。我们将使用循环技术来执行实际的复制。好消息是我们只需要对收集依赖项的命令做一个小的编辑。

我们可以通过按几次向上箭头键从命令历史中检索命令,然后进行编辑。循环复制命令根本不需要更改。

在这里,我们使用向上箭头键来查找命令,并将其编辑为touch而不是bash。

list="$(ldd /bin/touch | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

我们现在可以重复与前面完全相同的循环命令:

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

我们的文件是为我们复制的:

如何在linux上使用chroot命令

现在可以编辑ls的list命令行:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

同样,我们将使用相同的循环命令。它不关心列表中有哪些文件。它盲目地通过列表为我们复制文件。

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

ls的依赖项也为我们复制过来了:

如何在linux上使用chroot命令

我们最后一次编辑了list命令行,使其适用于rm:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

最后一次使用循环复制命令:

for i in $list; do cp -v --parents "$i" "${chr}"; done

最后一个依赖项被复制到chroot环境中。我们终于可以使用chroot命令了。此命令设置chroot环境的根,并指定作为shell运行的应用程序。

sudo chroot $chr /bin/bash

如何在linux上使用chroot命令

我们的chroot环境现在处于活动状态。终端窗口提示已更改,并且交互shell是由bash shell在我们的环境中处理的。

如何在linux上使用chroot命令

我们可以尝试我们带入环境中的命令。

ls ls /home/dave/Documents

如何在linux上使用chroot命令

当我们在环境中使用ls命令时,它的工作方式与我们预期的一样。当我们尝试访问环境之外的目录时,命令失败。

我们可以使用touch创建一个文件,ls列出它,rm删除它。

touch sample_file.txt ls rm sample_file.txt ls

如何在linux上使用chroot命令

当然,我们也可以使用bashshell提供的内置命令。如果在命令行中键入help,Bash将为您列出它们。

help

如何在linux上使用chroot命令

使用exit退出chroot环境:

exit

如何在linux上使用chroot命令

如果要删除chroot环境,只需删除它:

rm -r testroot/

如何在linux上使用chroot命令

这将递归地删除chroot环境中的文件和目录。

为方便而自动化

如果您认为chroot环境可能对您有用,但它们的设置有点不方便,请记住,您可以通过使用别名、函数和脚本来减轻重复任务的压力和风险。

相关:如何在Linux上创建别名和Shell函数

  • 发表于 2021-04-03 03:19
  • 阅读 ( 193 )
  • 分类:互联网

你可能感兴趣的文章

什么是容器linux?您应该使用它吗?

...在启动时启动。此外,在启动时,云配置文件让主机知道如何加入现有集群。这个 ...

  • 发布于 2021-03-15 05:37
  • 阅读 ( 205 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

如何从usb启动raspberry pi 3

...的USB硬盘驱动器。这是一个重要的发展,所以让我们看看如何设置你的树莓皮3从USB启动。 ...

  • 发布于 2021-03-17 12:42
  • 阅读 ( 234 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 280 )

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 268 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 331 )

如何在ubuntu上安装ftp服务器

... 许多Linux服务器运行Ubuntu。那么,让我们看看如何在Ubuntu服务器上设置FTP服务器。 ...

  • 发布于 2021-03-30 13:11
  • 阅读 ( 305 )

如何在linux上使用chroot命令

...法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。 一些常见用途是: 软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法...

  • 发布于 2021-04-03 03:19
  • 阅读 ( 193 )

如何在linux上将ext2或ext3文件系统迁移到ext4

...的Linux文件系统,但是你不能面对这个问题吗?下面介绍如何将ext2和ext3转换为ext4,而不必完全重新安装。 linux文件系统 如果你有礼貌的话,你可以称ext3文件系统为“受人尊敬的”,就像2001年一样。至于可怜的旧ext2,这个文...

  • 发布于 2021-04-03 11:00
  • 阅读 ( 181 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 260 )
DUAN2215923
DUAN2215923

0 篇文章

相关推荐