![使用 sshd_config 设置 SSH 和 SFTP](https://linux22.com/image/10140/%E4%BD%BF%E7%94%A8%20sshd_config%20%E8%AE%BE%E7%BD%AE%20SSH%20%E5%92%8C%20SFTP.png)
我知道这是通过默默无闻实现的安全性,但这只是出于培训目的,无法通过互联网访问。它将仅用作内部工具。
我查看了以下链接: 如何为某些用户禁用 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