11

我正在尝试遵循以下逻辑的 AllowUsers 指令的非常具体的配置:

  • 允许 user1 从 host1 SSH
  • 拒绝 user1 从任何其他主机 ssh
  • 允许来自任何主机的所有其他用户

我尝试了以下方法:

AllowUsers user1@host1 user1@!* *@*

不幸的是,当@出现时,它会否定前面的参数,无论顺序是什么。

我有两个问题;是否有执行 AllowUsers 指令中的参数的顺序,上面的逻辑是否可能?

4

4 回答 4

11

sshd_config man说处理顺序是:

允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。

所以如果“user1”也有自己的组“user1”你可以使用这个配置:

AllowUsers *@host1
DenyGroups user1
AllowGroups *

另一种选择是使用否定:

DenyUsers user1@!host1
AllowUsers *@*
于 2016-11-24T10:41:46.340 回答
3

仅使用一个 sshd 实例无法实现上述逻辑。但是,如果您运行第二个 sshd 实例(配置为侦听不同的端口),这是可能的。

配置第一个实例:

DenyUsers user1

配置第二个实例:

AllowUsers user1@host1

告诉 user1 连接到第二个实例(不同的端口)。告诉所有其他用户连接到第一个实例(默认端口)。

于 2014-06-07T03:52:54.443 回答
1

注意:您也可以通过使用 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 上的做法。我希望这个想法有所帮助。

于 2013-08-22T00:04:55.543 回答
1
# Deny user1 from all hosts but host1
DenyUsers user1@!host1,*
# Allow all users from any host that are not denied yet
AllowUsers *@*
于 2017-09-28T09:21:06.457 回答