3 个不稳定版本
0.6.1 | 2021 年 8 月 3 日 |
---|---|
0.6.0 | 2021 年 8 月 1 日 |
0.5.0 | 2021 年 8 月 1 日 |
#443 在 身份验证
28KB
201 行
aeneid
GitHub 的 "团队" 功能基本上是一个免费、零运维的 身份提供者。让我们用它来验证 OpenSSH!你 可能 不应该在生产中使用它,但我无法阻止你。
是什么/如何?
- GitHub 提供了一个 API,以确保特定用户在特定组织中的特定团队中。GitHub 还提供了一个端点(
/username.keys
),用于检索某人的 SSH 密钥。 - OpenSSHd 提供了一种在用户登录前执行任意二进制文件的方法,然后读取其 stdout 以捕获 SSH 公共密钥。如果失败,则回退到
authorized_keys
。通过运行man sshd_config
获取更多信息。 - 将它们结合起来,就得到了这个项目。
安装
使用您常用的包管理器安装 aeneid。如果不可行,您可以使用 cargo。
deb(Debian、Ubuntu 等):从 GitHub 发布版下载,然后 dpkg -i /path/to/aeneid.deb
rpm(Fedora、RHEL 等):从 GitHub 发布版下载,然后 rpm -i /path/to/aeneid.rpm
nix(NixOS 等):即将推出(TM)...
货物(不推荐,请参阅常见问题解答):cargo install aeneid && cp $(whereis aeneid | cut -f 2 -d " ") /usr/local/bin && cargo uninstall aeneid && sudo /usr/local/bin/aeneid --init
配置
自动配置
如果您在安装部分使用了命令,则一切应该会自动配置。只需将凭据(以及/或覆盖)添加到/etc/aeneid/config.toml
,然后运行sudo aeneid --init
来自动配置您的sshd。如果您想手动配置sshd,请参阅手动配置部分关于sshd的段落。
手动配置
创建一个名为aeneid
的新Unix用户,并将二进制文件放在新用户和sshd用户都可以读取/执行的地方。确保aeneid
用户(并且只有aeneid用户)可以在/etc/aeneid
中读取/写入/执行。
配置存储在/etc/aeneid/config.toml
中。如果它不存在,请根据此存储库中的src/config.toml
创建它。所有字段都有注释解释它们的作用。
您还需要在sshd_config(通常是/etc/ssh/sshd_config
)中设置AuthorizedKeysCommand /path/to/bin/aeneid
和AuthorizedKeysCommandRunAs aeneid
,以便OpenSSH知道从哪里获取密钥。
使用方法
如果您在overrides
中指定了Unix用户名,请使用该用户名。如果您正在使用GitHub团队,并且您的用户名以数字开头,请使用一个_
作为用户名前缀以登录。否则,您的用户名是您的GitHub用户名。有关更多信息,请参阅main.rs
中的unix_to_github
函数。
目前不支持自动创建用户,您需要在首次登录之前手动创建相应的用户(adduser username
)。
$ # make sure ssh is setup with your GitHub keys, then...
$ ssh [email protected] # that's it
安全性
我已经考虑过安全性,但远远没有我想的那样多。我不建议在安全性重要的地方使用此工具。您负责确保...
/etc/aeneid
及其所有子项的所有权属于一个单独的用户(称其为aeneid
),并设置了严格的权限(chmod 600
)AuthorizedKeysCommandRunAs
设置为拥有/etc/aeneid
的单独用户- 所有相关的GitHub账户都保持安全(多因素认证、良好的密码等)
- 禁用了其他有问题的SSH配置选项(例如密码认证)
- 您的SSH密钥没有受到损害
- 可能还有我没有想到的其他事情
常见问题解答
你为什么这样做?
- 我 真的 不想设置 LDAP。我 真的很不想 设置 LDAP。我 真的真的很不想 设置 LDAP。最后我还是设置了 LDAP,希望这对别人有帮助。
这个名字是怎么回事?
- 我觉得这个名字很傻。你在接受一份礼物(免费,零操作 IdP),但在过程中,GitHub 可能 会静默地替换它返回的公钥并对你机器进行认证。所以如果你仔细看:特洛伊木马。
为什么不建议使用 cargo install
?
-
不建议使用 Cargo 是因为 1) rustup 用户将二进制文件安装在一个 sshd 无法访问的位置 2) 配置文件将由
aeneid --init
脚本创建,而不是你的全局包管理器。 -
--init
脚本相当智能(它是幂等的),但只在少数常见的 Linux 发行版上进行了测试。它在其他地方工作几乎是不可能的。
依赖项
~7–23MB
~321K SLoC