顾名思义,chroot 操作会更改正在运行的进程及其子进程的明显根目录。
它允许我们使用/以外的根目录运行程序(进程)。
程序无法查看或者访问指定目录树之外的文件。
例如,我们可以运行一个程序并将其根目录指定为/home/oracle/jail。
在这种情况下,程序的根目录实际上是/home/oracle/jail。
该程序将不知道或者无法访问层次结构中此目录之上的任何文件。
这个人工根目录称为 chroot jail。
其目的是限制潜在攻击者的目录访问。
chroot jail 锁定给定进程及其使用的任何用户 ID,以便用户只能看到该进程正在运行的目录。
对于该进程来说,它似乎是在根目录中运行。
在 chroot Jail 中运行 DNS 和 FTP 服务
设置了两个服务来利用 chroot jails。
我们可以设置 DNS 以便命名在监狱中运行。
vsftpd FTP 服务器可以自动为客户端启动 chroot jails。
chroot 监狱中的 FTP 客户端
默认情况下,匿名用户被放置在 chroot jail 中。
当匿名用户登录到 vsftpd 服务器时,用户的主目录是 /var/ftp。
但是,用户看到的只是/。
例如,名为 /var/ftp/upload 的目录对匿名用户显示为 /upload。
这禁止匿名用户能够访问目录层次结构中 /var/ftp 之上的任何文件。
访问 vsftpd 服务器的本地用户被放置在他们的主目录中。
我们可以启用 /etc/vsftpd/vsftpd.conf 文件中的选项,将本地用户置于 chroot jail 中,其中人工根目录是用户的主目录。
vsftpd 配置文件中存在以下选项,用于为本地用户实现 chroot jail:
- chroot_list_enable
- chroot_local_user
- chroot_list_file
当本地用户登录到 vsftpd 服务器时,会检查 chroot_list_enable 指令。
如果此指令设置为 YES,该服务将检查 /etc/vsftpd/chroot_list 文件(默认情况下)或者 chroot_list_file 指令指定的另一个文件。
然后检查另一个指令 chroot_local_user 。
如果此指令设置为 YES,则 chroot_list 将成为 NOT chroot 的用户列表。
如果此指令设置为 NO,则用户将被放入其主目录中的 chroot jail。
chroot 监狱中的 DNS
bind-chroot 包允许你设置 named 在 chroot jail 中运行。
安装此软件包时,会创建 /var/named/chroot 目录,并成为所有 BIND 文件的 chroot jail 目录。
- /var/named 目录变为 /var/named/chroot/var/named。
- /etc/named* 文件变成 /var/named/chroot/etc/named* 文件。
安装此包还会将 ROOTDIR shell 变量设置为 /etc/sysconfig/named 文件中的 /var/named/chroot。
在 chroot jail 中运行 named 的优势在于,如果黑客通过 BIND 漏洞进入系统,黑客对系统其余部分的访问将与 chroot jail 目录下的文件隔离。