我想像平常一样允许所有用户使用 SSH除了我想根据一组 IP 地址限制 root 的访问。因此,用户peter
, paul
,lary
可以从任何地方登录,但root
只能从主机a.b.c.d
和登录q.r.s.t
。
sshd_config
AllowUsers
对此不起作用。如果我指定任何内容,那么我必须指定所有用户。- 与手册页建议的方式不同,
AllowGroups
即使用户被列入白名单,也会无条件检查AllowUsers
;因此,如果我尝试通过将非 root 用户放入一个组中来将其列入白名单,然后将该组添加到AllowGroups
,身份验证仍然会失败,因为 root 不在有效的允许组中。 sshd_config
DenyUsers
如果我能以某种方式将根 IP 地址集列入白名单,否则会被拒绝,这可能会起作用。如果我只有一个IP,它可能会与!
运营商合作。options
我可以使用authentiated_keys 文件中的密钥部分完成此操作和完全禁用 root 密码。问题是该文件不是系统策略,可能会被另一个(root 访问)用户覆盖。目前,这是我得到的最好的选择,但我不喜欢它。另外,如果我破坏 root 密码,我组中的某个人会对我非常生气。 (如果我不修改 root 密码,其他人就可以使用任何 IP 的密码通过 root 登录。)我尝试使用 PAM 执行此操作,特别是通过
pam_listfile
,但我的方法似乎根本不起作用:auth required pam_sepermit.so auth required pam_listfile.so file=/etc/root-whitelist.txt sense=allow item=rhost apply=root auth include password-auth
文件内
root-whitelist.txt
逐行显示允许的 IP 地址。我无法获得规则否定未列出的 IP 访问。
该pam_listfile
方法是否可用,而我只是弄错了?有没有更好的办法?
答案1
我的同事给我指出了与 /u/meuh 相同的方向,但方法略有不同。
Match Address "172.24.*.33"
PermitRootLogin yes
Match Address "192.168.1.18,192.168.1.20"
PermitRootLogin yes
答案2
根据您的 ssh 版本,您也许可以围绕AllowUsers 设置匹配条件。man sshd_config
列出“匹配”下允许的命令。如果 AllowUsers 在那里,您可以尝试以下操作。确保它位于文件末尾。
Match User root
AllowUsers root@ a.b.c.d [email protected]
例如,在 OpenSSH_6.0p1 Debian 中不行,但在 OpenSSH_6.6.1p1 Ubuntu 中可以。
答案3
另一位同事给我指明了方向pam_access模块。这使用通常在 中找到的格式/etc/security/access.conf
,但可以指定任何文件;可以为整个系统启用它,也可以仅为 sshd 进程启用它。我还没有尝试过这个,但想必我可以通过将 pam_access 添加auth
到/etc/pam.d/sshd
.然后access.conf
文件看起来像这样:
+ : root : hosta hostb hostx
- : root : ALL