![sshd_config 中出现意外的匹配行为](https://linux22.com/image/71437/sshd_config%20%E4%B8%AD%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%E7%9A%84%E5%8C%B9%E9%85%8D%E8%A1%8C%E4%B8%BA.png)
我正在尝试在我的中配置以下限制sshd_config
:
- 具有本地 IP 地址的用户不受任何限制
- 组中具有非本地 IP 地址的用户
sftp
可以在 chroot Jail 中使用 sftp - 不属于该
sftp
组的具有非本地 IP 地址的用户不允许执行任何操作。
这是我想出的:
Match Address 10.0.0.0/24,172.16.0.0/20,192.168.0.0/16
X11Forwarding yes
Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group sftp
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp
Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group *,!sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand /sbin/nologin
问题:当我尝试从内部地址登录时,作为非 sftp 用户,我被拒绝了;第三场比赛触发。
根据sshd_config
联机帮助页,只有满足所有子句时,匹配才算满足,但就我而言,第一个子句不满足(我从 IP 地址为 172.16.0.0/20 的机器进入),只有第二个是(我不在sftp组中)。
手册页错误吗sshd_config
?有可能做我想做的事吗?
更新:根据@steve的建议,我在调试模式下运行了sshd,并得到了这个:
debug1: userauth-request for user root service ssh-connection method none
debug1: attempt 0 failures 0
debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 144
debug1: user root does not match group list sftp at line 144
debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 150
debug1: user root matched group list *,!sftp at line 150
debug1: PAM: initializing for "root"
no-internal-adress 子句是匹配的;另外,调试日志中没有提到第一个匹配,这看起来很奇怪。
更新:
正如@Gilles 指出的,上面显示的我的地址规范是不正确的。我应该使用的是 10.0.0.0/8,而不是 10.0.0.0/24,以及 172.16.0.0/12,而不是 172.16.0.0/20。我从 32 开始向下数掩码位,而不是从 0 开始向上数。哎呀。
有了正确的地址,配置就可以工作了。谢谢吉尔斯和乌列尔!
(我还将最后一行中的 /sbin/nologin 更改为 /bin/false;前者会导致来自 sftp: 的奇怪错误消息。Received message too long 1416128883
)
答案1
我在回答类似的问题超级用户网站,但在回复之后我不再确定它是否正确。
简而言之,我认为目前这是不可能的,甚至openssh-7.0
是不可能的,但这些错误还没有修复,所以我们必须敦促上游。
还有带有积极反馈的替代答案,但我想这就是您试图实现结果的方式。我没有尝试过,但这看起来只与团体相关。否则匹配*,!something
就没多大意义。
不要在这里责怪上游并没有带来任何建设性的反馈,我可以建议您sshd
在不同的端口上运行两个单独的服务。一个人会使用AllowGroup sftp
并强制sftp
服务器。另一个只会回答来自您内部网络的请求。
答案2
您的网络标记不正确。如果您想包含专用网络,您应该使用:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
这可能就是您不匹配的原因,而不是错误ssh
。