我有一个启用了基于密码的 SSH 的 FreeBSD 服务器。我想启用sudo
,但我不希望潜在的攻击者远离 root 访问的一个密码。我当前的解决方案是使用公钥以 root 身份登录(对 root 禁用远程密码身份验证),而我的普通用户不在轮子中,sudo
也没有安装。
过去,我使用一次性密码进行 sudo 访问(我可以公开密钥进入系统,但 sudo 需要 OTP,并且有 30 分钟的超时时间让我无需重新验证所有时间)。然而,这是相当麻烦的,至少对于 OPIE/S/Key 来说是这样。使用硬件令牌可能没问题,但我目前没有。
我一直在寻找可以让我通过代理转发使用 SSH 公钥对 sudo 进行身份验证的东西。 pam_ssh
FreeBSD 包含的似乎并没有这样做——它只是通过查看用户是否可以解密服务器上的私钥来进行身份验证。我找到了pam_ssh_agent_auth
,但我在其他地方发现很少提及它。现在是 0.9,但我有点犹豫是否相信通往根目录的程序的网关,我找不到太多人们实际使用的证据。
所以,我的问题基本上是2:
pam_ssh_agent_auth
在野外使用可靠吗?- 是否有另一个好的解决方案来启用 sudo,同时仍然有超过登录密码的障碍?我曾想过拥有第二个具有 sudo 访问权限且没有密码身份验证的帐户,但这似乎也有些麻烦。
迈克尔,
您想要实现的目标可以通过两种方式执行:
您发现的一种方法是使用pam_ssh_agent_auth或者您可能想使用它的“可怜的表弟”:
ssh to localhost 与 SSH 密钥转发相关联。 此处的分步说明指向 Ubuntu 服务器,但所有命令都应该适用于您的 FreeBSD,因为它们是 OpenSSH 本身的功能。
1.添加密钥到ssh-agent:
2.将密钥复制到目标服务器上的用户帐户
3.测试基于密钥的登录:
4. 现在我们将 SSH 密钥复制到:/root/.ssh/
5. 回到正常的用户生活,我们检查 SSH Auth Socket 的存在:
6. 欢乐时光! 注意:请记住,您的 SSHd 可能被配置为拒绝 root 访问。记得启用它
7. 派对还没有结束...您可以通过使用别名来放松一下并玩弄一下设置:
注意:记住 SSH 和 tty 的关系往往很麻烦
瞧!
8. 在你走之前......微调它:
添加
from="localhost"
到您正在使用的 SSH 密钥的前面。这将使用该密钥限制远程用户访问并测试:注销并测试限制
希望这可以帮助。
您已经通过 OTP 解决了这个问题(更多安全性 = 更多箍),我无法评论 pam_ssh_agent_auth。但似乎您真正关心的不是 sudo,而是网络级访问。换句话说,您似乎关心从一个或多个特定主机而不是特定系统帐户授予用户的权限。如果是这样,请考虑在 SSH 守护进程前实施端口敲门方案,这样 SSH 只能从特定 IP 和知道秘密敲门的人访问。之后,来自已知主机的常规旧公钥身份验证就足够了。如果攻击者此时仍然可以获得 shell 访问权限,那么无论如何您都可能被击败。
我能想到的唯一另一种情况是在受信任的主机上使用 ssh 代理,当你在不受信任的网络上时,你可以将你的连接反弹掉(因为你在 bsdworld,你甚至可以在您的主机正是这样做的)。就我而言,攻击者拥有 shell 访问权限的任何盒子都完全被攻破了。他们是否获得根信任完全没有实际意义。你的努力最好花在防止第一次成功入侵上。
干杯,-G