我想要限制来自除单个 IP 地址之外的所有 IP 地址的 root ssh 登录。
我的印象是,我只需要将其添加到 /etc/pam.d/sshd:
account required pam_access.so
并将其添加到 /etc/security/access.conf:
-:root:ALL EXCEPT IPADDRESS
但这似乎不起作用。
答案1
在 /etc/ssh/sshd_config 中
# Disable Root login
PermitRootLogin no
#
# [ . . . ]
#
# At the end of the file, add:
#
# Allow Root Login via Key from Admin Bastion
Match Address 10.9.8.7
PermitRootLogin without-password
答案2
为什么要允许 root ssh 访问?墨菲定律认为,当您需要 root 访问权限时,您将远离您批准的 IP 地址。
这只是我的观点,但更好的方法是以普通用户身份登录,然后 su 到 root。要获得 root 访问权限,需要您的用户密码和 root 密码。因此,您的普通用户帐户必须位于管理员或 wheel 组中,具体取决于您运行的 Linux 发行版。
编辑:为了进一步提高安全性,仅允许对 ssh 连接进行预共享密钥身份验证。但是,如果您的机器没有必要的私钥,这可能是一把双刃剑。
答案3
我认为这是 RHEL 5+,并且存在此问题。相同的步骤也适用于 RHEL 4。在 RHEL 5 上使其工作的技巧是添加所需的帐户 pam_access.so
到 /etc/pam.d/sshd 的第二行或第三行。如果你只是将其附加到底部,则不起作用。
生成的 /etc/pam.d/sshd 看起来像..
# 猫 /etc/pam.d/sshd
#%PAM-1.0
auth 包括系统身份验证
需要帐户 pam_nologin.so
帐户需要 pam_access.so
账户包括系统认证
密码包括系统身份验证
会话可选 pam_keyinit.so 强制撤销
会话包括系统身份验证
会话需要 pam_loginuid.so
答案4
我建议您使用Match
中的功能sshd_config
,并根据 IP(或子网)进行匹配。
这也允许您指定允许的功能。例如:您可能会说只有来自“内部”子网集的用户可以使用PasswordAuthentication
(并且AllowRoot
可能仅来自需要它的单个/小范围的 IP)。
还要注意,通过公钥进行的身份验证不会通过 PAM,因此如果您使用公钥身份验证,pam_access 将对您不起作用。