#ssh-agent #pam #authentication #module #remote #sudo #key

pam-ssh-agent

一个使用ssh-agent进行身份验证的PAM模块

3个版本 (破坏性更新)

0.5.0 2024年4月7日
0.4.0 2023年10月23日
0.3.0 2023年8月13日

#917 in 加密学

Download history 6/week @ 2024-05-21

每月125次下载

MIT/Apache

17KB
302

一个用于使用ssh-agent进行身份验证的PAM模块

此项目的目标是提供一个PAM身份验证模块,通过ssh-agent协议发送到可能远程的ssh-agent的签名请求和响应来确定用户的身份。

此模块可以使用的场景之一是在远程系统上使用sudo命令提升权限,其中用户的身份通过他们使用本地ssh-agent和永远不会离开指定硬件的私钥生成的签名来确认。我使用macOS上的Secretive应用程序来实现这个目的。

此项目是对pam_ssh_agent_auth模块的重构,但与此项目不共享任何代码。此模块的最终目标是功能上等效,并可以作为pam_ssh_agent_auth的即插即用替换。

此项目目前处于可使用状态,并在Ubuntu 22.04上进行了测试。到目前为止,pam_ssh_agent_auth提供的路径扩展模式尚未实现。换句话说,预期使用单个授权密钥文件。

项目目标

由于这是安全敏感的软件,并且一个错误可能导致权限不当提升,因此此项目的主要目标是稳健且易于审查。

实现主要依赖于Rust生态系统中的crates,这些crates实现了整体功能所需的不同部分,最值得注意的是pam、ssh-key和ssh-agent-client-rs crates。直接使用上游库的目的是为了更轻松地确保及时解决具有安全影响的实现问题。另一个好处是更容易支持广泛的各种算法。

使用

  • 使用debuild -b构建包含共享对象并使用dpkg安装的.deb
  • 安装doas,以确保您有不同于sudo提升权限的方法。您需要在/etc/doas.conf中添加一个permit行才能使其正常工作
  • common-auth包含在/etc/pam.d/sudo中替换为auth required pam_ssh_agent.so
  • 配置 sudo 不删除 SSH_AUTH_SOCK 环境变量,通过将 Defaults env_keep += "SSH_AUTH_SOCK 添加到文件 /etc/sudoers.d/ssh_agent_env
  • 将您的 ssh-agent 所知公钥添加到 /etc/security/authorized_keys

配置选项

可以使用空格分隔的选项在 /etc/pam.d 中的相关配置文件中的 pam_ssh_agent.so 后进行配置。pam_ssh_agent 目前支持以下选项

  • debug 这将增加 AUTHPRIV 系统日志设备的日志输出
  • file=/file/name 这将修改保存授权公钥的文件,而不是默认的 /etc/security/authorized_keys

许可证

根据您的选择,许可协议为 Apache 许可证,版本 2.0MIT 许可证

如何贡献

只需向 https://github.com/nresare/pam-ssh-agent 打开一个 pull request。我有一个 github action 会运行测试,cargo fmtcargo clippy,针对差异(一旦我抽出时间触发它们)所以最好先本地运行 make check 以节省往返。

贡献许可

除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何旨在包含在您的工作中的贡献,均应按上述方式双重许可,无需任何额外条款或条件。

依赖项

~9.5MB
~184K SLoC