3个版本 (破坏性更新)
0.5.0 | 2024年4月7日 |
---|---|
0.4.0 | 2023年10月23日 |
0.3.0 | 2023年8月13日 |
#917 in 加密学
每月125次下载
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.0 或 MIT 许可证。
如何贡献
只需向 https://github.com/nresare/pam-ssh-agent 打开一个 pull request。我有一个 github action 会运行测试,cargo fmt
和 cargo clippy
,针对差异(一旦我抽出时间触发它们)所以最好先本地运行 make check
以节省往返。
贡献许可
除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何旨在包含在您的工作中的贡献,均应按上述方式双重许可,无需任何额外条款或条件。
依赖项
~9.5MB
~184K SLoC