使用 sshd_config 设置 SSH 和 SFTP

使用 sshd_config 设置 SSH 和 SFTP

我知道这是通过默默无闻实现的安全性,但这只是出于培训目的,无法通过互联网访问。它将仅用作内部工具。

我查看了以下链接: 如何为某些用户禁用 sftp,但保持 ssh 启用?

问题是它没有回答我的问题,如下所述:

我正在尝试设置一个虚拟服务器,允许一个用户使用 sftp 登录到服务器,另一个用户使用 ssh 登录到服务器。

sftp 部分的工作原理是通过在 sshd_config 文件中强制内部 sftp 来完成,如本问题中进一步所示。这部分的工作原理是,它禁止用户使用 ssh 登录服务器,只允许他们访问我创建的 sftp 监狱。

对于仅能够通过 ssh 访问 Chroot 监狱的其他用户,我不确定如何禁止通过 sftp 访问。问题是我专门为该用户创建了一个 chroot 监狱来阻止 ls 和 cat 等命令,但是如果用户使用 sftp 访问服务器,他们就可以使用这些命令。

/etc/ssh/sshd_config 中的部分如下:

Match User test1
        ChrootDirectory /home/jail
        X11Forwarding no
        AllowTcpForwarding no

# Match Group sftpusers
Match User test2
        ChrootDirectory /sftp/guestuser
        ForceCommand internal-sftp
        AllowUsers test2

我尝试添加:

ForceCommand Subsystem sftp /bin/false or
ForceCommand sftp /bin/false or
Subsystem sftp /bin/false or
to
Match User test1

然而,上述添加内容均不适用于 sshd_config。

所以我的问题是:

有没有办法阻止user1通过sftp访问服务器?如果没有,是否有办法从 sftp 中删除某些命令,例如 ls 或 cat?

任何建议将不胜感激。

答案1

最简单的方法是创建一些脚本来处理这个问题。添加

Match User test1
  ForceCommand /path/to/your/script.sh

你的脚本基本上会运行用户想要的任何内容,除非是 SFTP 请求:

#!/bin/bash
if [[ "$SSH_ORIGINAL_COMMAND" =~ .*sftp-server.* ]]; then
   echo "SFTP not allowed"
   exit 255;
else
   exec "$SSH_ORIGINAL_COMMAND"
fi

相关内容