我想限制服务器上的所有用户只能使用 SFTP,而管理员组的成员应该拥有完整的 SSH 访问权限。
我发现可以使用Match Group
and来限制组的成员ForceCommand
。但我没有发现任何逻辑否定。所以我尝试反向构造它:
# SFTP only, full access only for admin group
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Match Group admin
X11Forwarding yes
AllowTcpForwarding yes
ForceCommand /usr/local/sbin/ssh-allowcmd.sh
并构建了一个ssh-allowcmd.sh
执行给定命令或/bin/bash
用于交互式访问的脚本。
有更好的解决方案吗?
如果您使用的是 OpenSSH 5.1 或更高版本,那么它支持Match Group negation。
假设管理员组的默认设置是可以的,那么只需更改其他所有人:
在最近的 OpenSSH 版本中,真的没有理由依赖第三方 shell 来完成这种工作。
我使用 MySecureShell 将用户限制为仅限 SFTP 连接。我为特定用户执行此操作,但我相信您可以将其配置为默认限制,因此您也可以豁免 shell 访问。
http://mysecureshell.sourceforge.net/
你想要的是scponly。如果你运行的是 Debian/Ubuntu,它就在 repos 中。安装后,您只需执行以下操作:
它还允许您对用户进行 chroot。
或者,您可以执行以下操作:
第一行将用户的 shell 限制为 sftp。第二行是使 sftp-server 成为有效的 shell。
由于您没有指定您正在使用的操作系统,因此我无法根据您的特定需求定制命令。
如果用户不需要访问相同的文件,而是您不想为 sftp 设置第二台服务器,我会建议使用虚拟化。你可以安装OpenVZ并设置非常轻量级的虚拟机来处理这个问题。
如果这对您的情况是准确的,您可能会发现 OpenVZ 安装会随着时间的推移对其他类似的东西派上用场。