如何在SSH中限制除某个组之外的所有人?

rob*_*ast 9 ssh sftp

我想限制服务器上的所有用户只能使用 SFTP,而管理员组的成员应该具有完全的 SSH 访问权限。

我发现可以通过使用Match Group和来限制组的成员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
Run Code Online (Sandbox Code Playgroud)

并构建了一个脚本ssh-allowcmd.sh来执行给定的命令或/bin/bash进行交互式访问。

有更好的解决方案吗?

Dan*_*ley 20

如果您使用的是 OpenSSH 5.1 或更高版本,那么它支持Match Group negation

假设 admin 组的默认设置没问题,那么只需更改其他所有人:

Match Group *,!admin
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

对于最近的 OpenSSH 版本,真的没有理由依赖第三方 shell 来完成这种工作。