有几个原因可以将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}

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

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

第2步:为SSH Chroot监狱设置交互式Shell
5. 首先,创建bin
目录,然后使用cp命令将/bin/bash
文件复制到bin
目录中,如下所示:
# mkdir -p /home/test/bin # cp -v /bin/bash /home/test/bin/

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/

第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/

/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

保存文件并退出,然后重启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

从上面的截图中,我们可以看到SSH用户被锁定在chroot jail中,无法运行任何外部命令(ls,date,uname等)。
用户只能执行bash及其内置命令,例如(pwd,history,echo等),如下所示:
# ssh [email protected] -bash-4.1$ pwd -bash-4.1$ echo "Tecmint - Fastest Growing Linux Site" -bash-4.1$ history

第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

12. 接下来,在bin
目录中安装一些用户命令,如ls、date和mkdir:
# cp -v /bin/ls /home/test/bin/ # cp -v /bin/date /home/test/bin/ # cp -v /bin/mkdir /home/test/bin/

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/

第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]

尝试使用SFTP如下:
# sftp [email protected]

这就是目前的内容!在本文中,我们向您展示了如何在Linux中将SSH用户限制在给定目录(chroot jail)中。请使用下面的评论部分向我们提供您对本指南的看法。
Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/