使用 SSH 的 PAM 模块

Posted

技术标签:

【中文标题】使用 SSH 的 PAM 模块【英文标题】:PAM module that uses SSH 【发布时间】:2018-06-27 21:39:05 【问题描述】:

是否有 PAM 模块可以通过 SSH 质询-响应对用户进行身份验证?

我正在尝试编写一个 PAM 感知应用程序,该应用程序本质上具有与 SSH 连接相同的身份验证过程。我一直无法找到已经这样做的 PAM 模块(pam_ssh 模块仍然是基于密码的),所以我一直在尝试编写自己的。

但是,我找不到允许我以这种方式访问​​ SSH 的 API。即使使用 sshd 的 PAM 模块,似乎也没有一种干净的方式来验证 SSH 公钥。

更明确地说,如果我获得了机器上给定用户的 SSH 公钥(为简单起见,请考虑 localhost),我想向该机器上的该用户发送挑战,以测试他们是否拥有该 SSH 密钥.有谁知道这样做的方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用公钥加密一些随机数据,将其发送给用户,并断言他们能够使用私钥对其进行解密。如果您使用 RSA 密钥,则可以使用 OpenSSL 执行加密/解密。例如,

# server
$ ssh-keygen -e -m PKCS8 -f ~/.ssh/id_rsa.pub >pub.pem
$ openssl rsautl -pubin -inkey pub.pem -encrypt -pkcs -in random -out encrypted

# client
$ openssl rsautl -inkey ~/.ssh/id_rsa -decrypt -in encrypted -out random

并验证客户端是否能够回复random的正确内容。

这些命令的灵感来自jass,您可以使用它来代替ssh-keygen+openssl

很遗憾,这不适用于 Ed25519 密钥; OpenSSH 有自己的自定义格式,无法转换它们。

【讨论】:

谢谢!这种转换非常有帮助。有没有办法通过签名做到这一点,服务器向客户端发送消息,客户端对消息进行签名,然后服务器验证签名? 啊,快速浏览一下 rsautl 的手册页,回答了问题。再次感谢您的帮助!

以上是关于使用 SSH 的 PAM 模块的主要内容,如果未能解决你的问题,请参考以下文章

使用Pam_Tally2锁定和解锁SSH失败的登录尝试

pam_tally2身份验证模块

自定义pam登陆验证方式后,xftp工具使用无响应

【pam_tally2】使用pam_tally2锁定和解锁SSH失败的登录尝试

Linux服务器安全策略配置-PAM身份验证模块

用户登录限制锁定与踢出