如何使用 Chrooted Jail 限制 SSH 用户访问特定目录

有几个原因可以将SSH用户会话限制在特定目录中,特别是在Web服务器上,但显而易见的一个是系统安全性。为了将SSH用户锁定在特定目录中,我们可以使用chroot机制。

在类Unix系统(如Linux)中,改变根目录(chroot)是一种将特定用户操作与Linux系统的其余部分分离的方法;它将当前运行的用户进程及其子(父)进程的外观根目录更改为称为chrooted jail的新根目录。

在本教程中,我们将向您展示如何在Linux中将SSH用户访问限制为给定目录。请注意,我们将以root身份运行所有命令,如果您以普通用户身份登录到服务器,则使用sudo命令。

1. 通过以下mkdir命令创建chroot监狱:

1. 首先使用下面的mkdir命令创建chroot监狱:

# mkdir -p /home/test

2. 接下来,根据sshd_config手册页识别所需的文件。ChrootDirectory选项指定在认证后chroot到的路径名。该目录必须包含支持用户会话所需的必要文件和目录。

对于交互式会话,这至少需要一个shell,通常是sh,以及基本/dev节点,如null、zero、stdin、stdout、stderr和tty设备:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

3. 现在,使用mknod命令如下创建/dev文件。在下面的命令中,-m标志用于指定文件权限位,c表示字符文件,两个数字是文件指向的主次设备号。

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. 之后,在chroot监狱上设置适当的权限。请注意,chroot监狱及其子目录和子文件必须由root用户拥有,并且不能由任何普通用户或组写入:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

第2步:为SSH Chroot监狱设置交互式Shell

5. 首先,创建bin目录,然后使用cp命令/bin/bash文件复制到bin目录中,如下所示:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. 现在,识别共享libs所需的bash,如下所示,并将它们复制到lib目录中:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

第3步:创建并配置SSH用户

7. 现在,使用useradd命令创建SSH用户,并为该用户设置一个安全的密码:

# useradd tecmint
# passwd tecmint

8. 创建chroot监狱的通用配置目录,/home/test/etc,并将更新后的账户文件(/etc/passwd/etc/group)复制到此目录中,如下所示:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

第4步:配置SSH以使用Chroot监狱

9. 现在,打开sshd_config文件。

# vi /etc/ssh/sshd_config

并在文件中添加/修改以下行。

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

保存文件并退出,然后重启SSHD服务:

# systemctl restart sshd
OR
# service sshd restart

第5步:测试SSH与Chroot监狱

10. 在此阶段,测试chroot jail的设置是否按预期工作:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

从上面的截图中,我们可以看到SSH用户被锁定在chroot jail中,无法运行任何外部命令(lsdateuname等)。

用户只能执行bash及其内置命令,例如(pwdhistoryecho等),如下所示:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

第6步。创建SSH用户的家目录并添加Linux命令

11. 从上一步中,我们可以注意到用户被锁定在根目录中,我们可以为SSH用户创建一个家目录,如下所示(为所有未来的用户执行此操作):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. 接下来,在bin目录中安装一些用户命令,如lsdatemkdir

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. 接下来,检查上述命令的共享库,并将它们移动到chroot监狱的库目录中:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

第7步。使用Chroot Jail测试SFTP

14. 使用sftp进行最终测试;检查您刚刚安装的命令是否正常工作。

/etc/ssh/sshd_config文件中添加以下行:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

保存文件并退出。然后重新启动SSHD服务:

# systemctl restart sshd
OR
# service sshd restart

15. 现在,使用SSH进行测试,您将收到以下错误:

# ssh [email protected]
Test SSH Chroot Jail

尝试使用SFTP如下:

# sftp [email protected]
Testing sFTP SSH User

这就是目前的内容!在本文中,我们向您展示了如何在Linux中将SSH用户限制在给定目录(chroot jail)中。请使用下面的评论部分向我们提供您对本指南的看法。

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/