我在通常的底部有以下内容/etc/ssh/sshd_config
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
# Personal settings
AllowUsers user1
AllowGroups user1
PermitRootLogin no
该文件中没有其他AllowUsers
条目,并且至少在该目录下没有其他 sshd 配置/etc/ssh
。
尽管如此,user2
仍然可以通过ssh登录。我已完全重新启动电脑。
难道不应该拒绝每个不在 中的用户的 ssh 吗AllowUsers
?我可以尝试什么?
id user2
返回:
uid=1002(user2) gid=1002(user2) groups=1002(user2),115(nopasswdlogin),999(docker)
答案1
配置文件的文档(请参阅 参考资料man sshd_config
)讨论了Match
这样的块(我的重点),
Match
引入条件块。如果满足该行中的所有条件Match
,则以下行中的关键字将覆盖配置文件全局部分中设置的关键字,直到另一个匹配行或文件末尾。
它还说,
在关键字后面的行中只能使用关键字的子集
Match
。可用的关键字有 [...]AllowGroups
、 [...]AllowUsers
、 [...]PermitRootLogin
、 [...]
因此,发生的情况是,您的AllowGroups
、AllowUsers
和关键字仅在该阻止生效PermitRootLogin
时才被应用。Match Group sftpg
就像你这样写的:
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
AllowUsers user1
AllowGroups user1
PermitRootLogin no
解决方案是将全局设置移至第一个Match
块上方,以便它们适用于所有地方。
答案2
将 #Personal 部分移至“匹配组/匹配用户”部分上方并反弹 sshd。我在“匹配用户”下的“AllowUsers”中遇到了同样的问题。