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

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

我发现可以通过使用Match GroupForceCommand来限制组的成员。 但我没有发现任何逻辑上的否定。 所以我试图反向构build它:

 # 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 

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

有更好的解决scheme吗?

如果您使用OpenSSH 5.1或更高版本,则支持匹配组否定 。

假设pipe理员组的默认值是正确的,那就改变其他人:

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

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

我使用MySecureShell将用户限制为仅SFTP连接。 我为特定的用户这样做,但我相信你可以将其configuration为默认限制,所以豁免也会给你shell访问权限。

http://mysecureshell.sourceforge.net/

你想要什么是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。

由于您没有指定您正在使用的操作系统,因此我无法根据您的特定需求调整命令。

如果用户不需要访问相同的文件,而是不想为sftp设置第二台服务器,那么我会推荐使用虚拟化。 您可以安装OpenVZ并安装非常轻量级的虚拟机来处理这个问题。

如果这对您的情况是准确的,那么您可能会发现OpenVZ安装会随着时间的推移而派上用场。