我想限制服务器上的所有用户只能使用SFTP,而pipe理员组的成员应该具有完全的SSH访问权限。
我发现可以通过使用Match Group和ForceCommand来限制组的成员。 但我没有发现任何逻辑上的否定。 所以我试图反向构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访问权限。
你想要什么是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安装会随着时间的推移而派上用场。