我有一个sshd
如下所示的配置:
DenyUsers *
AllowUsers root@*
AllowUsers user1@*
AllowUsers user2@*
sshd 文档指出“允许/拒绝用户指令按以下顺序处理:DenyUsers、AllowUsers”,这里的目的是ssh
除了列出的 3 个用户之外,任何人都不允许使用。
但是,这不起作用:如果这些用户中的任何一个尝试通过 进行连接ssh
,日志 ( systemctl status ssh
) 都会指出“来自 abcd 的用户 foo 不允许,因为已在 DenyUsers 中列出”。
所以,看起来总是DenyUsers
有优先权(我在 OpenSSH_8.9p1,Ubuntu 22.04 上)。
有办法解决这个问题吗?我需要某种形式的 ,DenyUsers
因为该系统上的配置是自动化的,并且可以通过注释掉他们的个人来拒绝所有 3 个用户的访问AllowUsers
,这将给出:
# AllowUsers root@*
# AllowUsers user1@*
# AllowUsers user2@*
现在的问题是每个人都可以访问,而不是任何人都可以访问。
请参阅此答案,了解四个允许/拒绝指令的意外工作方式的描述。这四个指令是
AllowUsers
、AllowGroups
、DenyUsers
和DenyGroups
。描述这一点的答案部分接近尾声,因为问题是关于一个稍微不同的主题(指令如何在Match
块内工作)。获得所需拒绝行为的方法是在
AllowUsers
或AllowGroups
指令中指定谁应该有权访问服务器。当我使用它时,我遵循常见的 Linux 约定,即本地服务器上的每个用户帐户都是使用与用户命名相同的主组创建的。即,John Doe 的帐户将被命名,并且将创建
johndoe
一个名为的组。johndoe
由于其工作角色而应具有访问权限的人员(例如 Linux 系统管理员)会将其帐户添加到辅助功能组,例如sysadmins
.使用此配置行:将允许我(sottovoce)通过 ssh 进入服务器,因为我位于 sysadmin 组中。如果我希望某人在不加入组的情况下也可以访问,则该帐户将在同一行中命名:
现在,与系统管理员一样,John Doe 也被允许,因为他是该组的成员
johndoe
。其他人都被否认。我没有使用,
AllowUsers
因为这会阻止系统管理员。添加和删除系统管理员访问权限需要更改文件sshd_config
,这比编辑/etc/group
文件更具侵入性和敏感性。通过组成员身份管理访问会更好。