使用Chrooted Jail限制SSH用户对某些目录的访问

在本文中,我们将解释如何限制SSH用户在Linux系统中使用chrooted jail访问特定目录。

有几个原因限制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和所需文件

创建/ 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目录

将文件复制到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 howtoing
# passwd howtoing

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 howtoing
#specify chroot jail
ChrootDirectory /home/test
配置SSH Chroot Jail

配置SSH Chroot Jail

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

# systemctl restart sshd
OR
# service sshd restart

第5步:使用Chroot Jail测试SSH

10.在这一点上,测试chroot jail设置是否按预期工作:

# ssh howtoing@192.168.0.10
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
测试SSH用户Chroot Jail

测试SSH用户Chroot Jail

从上面的截图中,我们可以看到SSH用户被锁定在chroot的jail中,并且不能运行任何外部命令(ls,date,uname等)。

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

# ssh howtoing@192.168.0.10
-bash-4.1$ pwd
-bash-4.1$ echo "Howtoing - Fastest Growing Linux Site"
-bash-4.1$ history
SSH内置命令

SSH内置命令

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

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

# mkdir -p /home/test/home/howtoing
# chown -R howtoing:howtoing /home/test/home/howtoing
# chmod -R 0700 /home/test/home/howtoing
创建SSH用户主目录

创建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用户添加命令

向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 howtoing@192.168.0.10
测试SSH Chroot监狱

测试SSH Chroot监狱

尝试使用SFTP如下:

# sftp howtoing@192.168.0.10
测试sFTP SSH用户

测试sFTP SSH用户

建议阅读:将 SFTP用户限制到主目录使用chroot Jail

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