允许 SSH 访问,但限制 root 访问一组给定的 IP

Oth*_*eus 3 security root pam sshd

我想像往常一样允许所有用户使用 SSH,我想根据一组 IP 地址限制 root 的访问权限。因此,用户peterpaullary可以在任何地方登录,但root只能从主机登录a.b.c.dq.r.s.t

  • sshd_configAllowUsers将不适合这项工作。如果我指定任何内容,那么我必须指定所有用户。
  • 与手册页建议的方式不同AllowGroups,即使用户被列入白名单,也会无条件地进行检查AllowUsers;因此,如果我尝试通过将非 root 用户放入一个组来将非 root 用户列入白名单,然后将该组添加到AllowGroups,则身份验证仍然会失败,因为 root 不在有效的允许组中。
  • sshd_configDenyUsers可能的工作,如果我能以某种方式白名单设置的IP地址根已就其他拒绝。如果我只有一个 IP,它可能与!运营商合作。
  • 我可以使用optionsauthenticated_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
    
    Run Code Online (Sandbox Code Playgroud)

    root-whitelist.txt文件里面是允许的IP地址,一行一行。我无法获得拒绝未列出的 IP 访问的规则。

pam_listfile方法是否可用而我只是弄错了?有没有更好的办法?

Oth*_*eus 6

我的同事为我指出了与 /u/meuh 相同的方向,但使用的方法略有不同。

Match Address "172.24.*.33"
  PermitRootLogin yes
Match Address "192.168.1.18,192.168.1.20"
  PermitRootLogin yes
Run Code Online (Sandbox Code Playgroud)


meu*_*euh 5

根据您的 ssh 版本,您也许可以围绕AllowUsers 设置匹配条件。man sshd_config列出“匹配”下允许的命令。如果那里有AllowUsers,您可以尝试以下操作。确保它位于文件末尾。

Match User root
 AllowUsers root@ a.b.c.d root@q.r.s.t
Run Code Online (Sandbox Code Playgroud)

例如,在 OpenSSH_6.0p1 Debian 中不行,但在 OpenSSH_6.6.1p1 Ubuntu 中可以。