有几个原因限制SSH用户会话到特定目录,特别是在Web服务器上,但显而易见的是系统安全性。 为了锁定SSH用户在某个目录,我们可以使用chroot机制。
在诸如Linux之类的类Unix系统中更改根( chroot )是将特定用户操作与其余Linux系统分离的一种手段; 使用称为chrooted jail的新根目录更改当前运行的用户进程及其子进程的明显根目录。
在本教程中,我们将向您展示如何限制SSH用户访问Linux中给定的目录。 注意,我们将以root身份运行所有命令,如果您以普通用户身份登录服务器,请使用sudo命令 。
第1步:创建SSH Chroot Jail
1.使用下面的mkdir命令创建chroot jail:
# 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
创建/ dev和所需文件
4.然后,在chroot jail上设置相应的权限。 请注意,chroot jail及其子目录和子文件必须由root用户拥有,并且不能由任何普通用户或组写入:
# chown root:root /home/test # chmod 0755 /home/test # ls -ld /home/test
设置目录的权限
第2步:为SSH Chroot Jail设置交互式Shell
5.首先,创建bin
目录,然后将/bin/bash
文件复制到bin
目录中,如下所示:
# mkdir -p /home/test/bin # cp -v /bin/bash /home/test/bin/
将文件复制到bin目录
6.现在,识别bash所需的共享libs
,如下所示,并将它们复制到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 youcl # passwd youcl
8.创建chroot jail常规配置目录/home/test/etc
,并将更新的帐户文件( / etc / passwd和/ etc / group )复制到此目录中,如下所示:
# mkdir /home/test/etc # cp -vf /etc/{passwd,group} /home/test/etc/
复制密码文件
注意 :每次向系统添加更多SSH用户时,都需要将更新的帐户文件复制到/home/test/etc
目录中。
第4步:配置SSH以使用Chroot Jail
9.现在,打开sshd_config
文件。
# vi /etc/ssh/sshd_config
并在文件中添加/修改下面的行。
#define username to apply chroot jail to Match User youcl #specify chroot jail ChrootDirectory /home/test
配置SSH Chroot Jail
保存文件并退出,然后重新启动SSHD服务:
# systemctl restart sshd OR # service sshd restart
第5步:使用Chroot Jail测试SSH
10.在这一点上,测试chroot jail设置是否按预期工作:
# ssh youcl@192.168.0.10 -bash-4.1$ ls -bash-4.1$ date -bash-4.1$ uname
测试SSH用户Chroot Jail
从上面的截图中,我们可以看到SSH用户被锁定在chroot的jail中,并且不能运行任何外部命令(ls,date,uname等)。
用户只能执行bash及其内置命令,如(pwd,history,echo等),如下所示:
# ssh youcl@192.168.0.10 -bash-4.1$ pwd -bash-4.1$ echo "youcl - Fastest Growing Linux Site" -bash-4.1$ history
SSH内置命令
第6步.创建SSH用户的主目录并添加Linux命令
从上一步,我们可以注意到,用户被锁定在根目录中,我们可以为SSH用户创建一个主目录,如下所示(为所有将来的用户执行此操作):
# mkdir -p /home/test/home/youcl # chown -R youcl:youcl /home/test/home/youcl # chmod -R 0700 /home/test/home/youcl
创建SSH用户主目录
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/
向SSH用户添加命令
13.接下来,检查共享库的上述命令,并将它们移动到chrooted jail库目录:
# 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 youcl@192.168.0.10
测试SSH Chroot监狱
尝试使用SFTP如下:
# sftp youcl@192.168.0.10
测试sFTP SSH用户
建议阅读:将 SFTP用户限制到主目录使用chroot Jail
这就是现在! 在本文中,我们向您展示了如何限制Linux中给定目录(chrooted jail)中的SSH用户。 使用下面的评论部分向我们提供您对本指南的看法。