网站搜索

使用 Chrooted Jail 限制 SSH 用户访问主目录


将 SSH 用户会话限制到特定目录有多种原因,尤其是在 Web 服务器上,但最明显的原因是系统安全。为了将SSH用户锁定在某个目录中,我们可以使用chroot机制。

在 Linux 等类 Unix 系统中更改 root (chroot) 是一种将特定用户操作与 Linux 系统其余部分分离的方法;使用名为chrooted jam的新根目录更改当前正在运行的用户进程及其子(父)进程的表观根目录。

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

第 1 步:创建 SSH Chroot Jail

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

mkdir -p /home/test

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

对于交互式会话,这至少需要一个 shell(通常是 sh)和基本的 /dev 节点,例如 null、零、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 Jail 上设置适当的权限。请注意,chroot监狱及其子目录和子文件必须由root用户拥有,并且任何普通用户或组都不可写入:

chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test

步骤 2:为 SSH Chroot Jail 设置交互式 Shell

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

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 Jail 常规配置目录 /home/test/etc 并复制更新的帐户文件(/etc/passwd/etc/group) 进入该目录,如下所示:

mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc/

步骤 4:配置 SSH 以使用 Chroot Jail

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 步:使用 Chroot Jail 测试 SSH

10. 此时,测试 chroot Jail 设置是否按预期工作:

ssh [email 
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname

从上面的屏幕截图中,我们可以看到 SSH 用户被锁定在 chrooted 监狱中,并且无法运行任何外部命令(ls、date、uname 等)。

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

ssh [email 
-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. 接下来,检查上述命令的共享库并将它们移动到 chrooted 监狱库目录中:

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 

尝试使用 SFTP,如下所示:

sftp [email 

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