允许 SSH 访问但限制 root 对给定 IP 集的访问

允许 SSH 访问但限制 root 对给定 IP 集的访问

我想像平常一样允许所有用户使用 SSH除了我想根据一组 IP 地址限制 root 的访问。因此,用户peter, paul,lary可以从任何地方登录,但root只能从主机a.b.c.d和登录q.r.s.t

  • sshd_configAllowUsers对此不起作用。如果我指定任何内容,那么我必须指定所有用户。
  • 与手册页建议的方式不同,AllowGroups即使用户被列入白名单,也会无条件检查AllowUsers;因此,如果我尝试通过将非 root 用户放入一个组中来将其列入白名单,然后将该组添加到AllowGroups,身份验证仍然会失败,因为 root 不在有效的允许组中。
  • sshd_configDenyUsers如果我能以某种方式将根 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

相关内容