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

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

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

我发现可以使用Match Groupand来限制组的成员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进行交互式访问的脚本。

有没有更好的解决办法?

答案1

如果你使用的是 OpenSSH 5.1 或更高版本,那么它支持匹配组否定

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

Match Group *,!admin
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

使用最新的 OpenSSH 版本,确实没有理由依赖第三方 shell 来完成这类工作。

答案2

我使用 MySecureShell 将用户限制为仅 SFTP 连接。我针对特定用户执行此操作,但我相信您可以将其配置为默认限制,因此豁免将适用于您授予 shell 访问权限。

http://mysecureshell.sourceforge.net/

答案3

你想要的是scponly。如果您运行的是 Debian/Ubuntu,它位于存储库中。安装后,您只需执行以下操作:

$ sudo chsh -s /usr/bin/scponly username

它还允许您 chroot 用户。

或者,您也可以执行以下操作:

$ usermod -s /usr/lib/sftp-server username
$ echo '/usr/lib/sftp-server' >> /etc/shells

第一行将用户的 shell 限制为 sftp。第二行使 sftp-server 成为有效的 shell。

由于您没有指定所使用的操作系统,我无法根据您的特定需求定制命令。

答案4

如果用户不需要访问相同的文件,但你又不想为 sftp 设置第二台服务器,我建议使用虚拟化。你可以安装开放VZ并设置非常轻量级的虚拟机来处理这个问题。

如果这与您的情况相符,那么随着时间的推移,您可能会发现 OpenVZ 安装对于其他类似的东西也会有用。

相关内容