我正在尝试遵循以下逻辑的 AllowUsers 指令的非常具体的配置:
- 允许 user1 从 host1 SSH
- 拒绝 user1 从任何其他主机 ssh
- 允许来自任何主机的所有其他用户
我尝试了以下方法:
AllowUsers user1@host1 user1@!* *@*
不幸的是,当@出现时,它会否定前面的参数,无论顺序是什么。
我有两个问题;是否有执行 AllowUsers 指令中的参数的顺序,上面的逻辑是否可能?
我正在尝试遵循以下逻辑的 AllowUsers 指令的非常具体的配置:
我尝试了以下方法:
AllowUsers user1@host1 user1@!* *@*
不幸的是,当@出现时,它会否定前面的参数,无论顺序是什么。
我有两个问题;是否有执行 AllowUsers 指令中的参数的顺序,上面的逻辑是否可能?
sshd_config man说处理顺序是:
允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。
所以如果“user1”也有自己的组“user1”你可以使用这个配置:
AllowUsers *@host1
DenyGroups user1
AllowGroups *
另一种选择是使用否定:
DenyUsers user1@!host1
AllowUsers *@*
仅使用一个 sshd 实例无法实现上述逻辑。但是,如果您运行第二个 sshd 实例(配置为侦听不同的端口),这是可能的。
配置第一个实例:
DenyUsers user1
配置第二个实例:
AllowUsers user1@host1
告诉 user1 连接到第二个实例(不同的端口)。告诉所有其他用户连接到第一个实例(默认端口)。
注意:您也可以通过使用 SSH PAM CONFIG(推荐用于大量用户)或 TCP Wrappers 来允许或拒绝 ssh 访问,但您需要获取 libwrap.a 库才能使其与 SSH 一起使用。
如果您想通过 SSHD CONFIG 限制访问,您可以使用以下四个条目:
AllowUsers AllowGroups DenyUsers DenyGroups
模式匹配按以下顺序发生:DenyUsers、AllowUsers、DenyGroups、AllowGroups。这意味着,例如,如果您将用户添加到两个条目(AllowUsers 和 DenyUsers),无论规则在配置脚本中出现的顺序如何,都会导致该用户被拒绝。
要完成您提到的 3 个限制,您可以尝试创建一个组sshgroup并配置除user1之外的每个用户帐户以包含在该组中。最后,您可以创建一个脚本,将sshgroup中的用户添加到 sshd_config 文件中的规则中,该规则始终包括:
允许用户 user1@host1
导致:
AllowUsers user1@host1 user2 user3...
为了使 sshd 配置文件保持最新,您可以在每次创建/删除用户时调用该脚本。每次更改配置文件后,不要忘记重新启动 ssh 守护进程。
在这里你可以找到一个脚本“pop_user_allow_ssh”,它也试图生成一个用户列表。
你没有提到你的操作系统,但这就是我在 AIX 上的做法。我希望这个想法有所帮助。
# Deny user1 from all hosts but host1
DenyUsers user1@!host1,*
# Allow all users from any host that are not denied yet
AllowUsers *@*