如何设置 Linux Chroot Jails
尤其是那些致力于关键服务的 Linux 系统需要专家级的知识来配合核心安全措施。
不幸的是,即使采取了关键的安全措施,安全漏洞仍然会进入安全系统。管理和保护系统的一种方法是限制攻击发生后可能造成的损害。
在本教程中,我们将讨论使用 chroot Jail 来管理遭受攻击时系统损坏的过程。我们将了解如何使用虚假 root 权限将进程和子进程隔离到特定环境。这样做会将进程限制为特定目录并拒绝对其他系统区域的访问。
chroot监狱简介
chroot 监狱是一种使用虚假 root 权限将进程及其子进程与主系统隔离的方法。
如前所述,使用假根权限隔离特定进程可以限制恶意攻击时造成的损害。 Chroot 服务仅限于其目录中的目录和文件,并且在服务重新启动时不持久。
为什么要使用 chroot 监狱
chroot监狱的主要目的是作为一种安全措施。通过从实时媒体安装设备来恢复丢失的密码时,Chroot 也很有用。
设置 chroot Jail 有多种优点和缺点。这些包括:
优点
限制访问:在安全受到损害的情况下,唯一受损的目录是 chroot 监狱内的目录。
命令限制:用户或进程受到监狱中允许的命令的限制。
缺点
设置起来可能很困难。
它需要大量工作 - 如果您需要比默认允许的命令更多的命令,则必须手动包含它。
如何创建一个基本的 Chroot Jail
在此过程中,我们将创建一个基本的 chroot 监狱,其中包含仅限于该文件夹的 3 个命令。这将有助于说明如何创建监狱并分配各种命令。
首先创建一个主文件夹。你可以把这个文件夹想象成主系统中的/文件夹。文件夹的名称可以是任何名称。在我们的例子中,我们称之为 /chrootjail
我们将使用此目录作为假根目录,其中包含我们将分配给它的命令。对于我们将使用的命令,我们将需要 bin 目录(包含命令可执行文件)和目录(包含命令的配置文件)等。
在 /chrootjail 文件夹内,创建这两个文件夹:
下一步是为我们想要包含在监狱中的命令创建动态链接库的目录。对于本示例,我们将使用 bash、ls 和 grep 命令。
使用ldd命令列出这些命令的依赖关系,如下所示:
如果您不在 bin 文件夹内,则需要传递要使用的命令的完整路径。例如,ldd /bin/bash 或 ldd /bin/grep
从上面的 ldd 输出中,我们需要 lib64 和 /lib/x86_64-linux-gnu 目录。在监狱目录中,创建这些文件夹。
创建动态库目录后,我们可以使用树列出它们,如下所示:
随着我们的进展,您将开始清楚地了解 chroot 监狱的含义。
我们正在创建一个类似于Linux系统的普通根目录的环境。不同的是,在这个环境中,只允许特定的命令,并且访问受到限制。
现在我们已经创建了垃圾箱。等等,lib和lib64,我们可以在各自的目录中添加所需的文件。
让我们从二进制文件开始。
复制了我们需要的命令的二进制文件后,我们需要每个命令的库。您可以使用 ldd 命令查看要复制的文件。
让我们从 bash 开始。对于 bash,我们需要以下库:
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
我们可以使用一个简单的for循环将所有库中的每个库复制到/chrootjail/lib/x86_64-linux-gnu,而不是一一复制所有这些文件
让我们对 ls 和 grep 命令重复此过程:
对于 ls 命令:
对于 grep 命令:
接下来,在 lib64 目录中,我们有一个跨所有二进制文件的共享库。我们可以使用简单的 cp 命令简单地复制它:
接下来,让我们编辑主 bash 登录文件(位于 Debian 中的 /etc/bash.bashrc 中),以便我们可以根据自己的喜好调整 bash 提示符。使用简单的 echo 和 tee 命令,如下所示:
完成上述所有步骤后,我们可以使用 chroot 命令登录监狱环境,如图所示。
您将获得 root 权限,提示符类似于上面 echo 和 tee 命令中创建的提示符。
登录后,您将看到您只能访问创建监狱时包含的命令。如果您需要更多命令,则必须手动添加它们。
注意:由于您已包含 bash shell,因此您将可以访问所有 bash 内置命令。这允许您使用 exit 命令退出监狱。
结论
本教程介绍了 chroot Jail 是什么以及我们如何使用它来创建与主系统隔离的环境。您可以使用指南中讨论的技术为关键服务创建隔离环境。
为了练习您所学到的知识,请尝试创建一个 apache2 监狱。