我想启用以下功能:AWS 中的 Linux ec2 实例,对当前没有主目录的用户执行 LDAP 身份验证。我在 AWS 中有一个可以运行的 openLDAP 来完成此任务
LDAP 验证后:
- 将创建用户主目录
- 用户的公共 ssh 密钥是从
sshPublicKey
LDAP 中的属性中检索到的,并且只有当用户的本地 sshPrivateKey 匹配时,他们才能登录
我知道如何进行 LDAP 身份验证或者通过检索公钥ldapsearch
但我想同时进行这两项操作。
我试图缓解的情况是当员工离开公司时:我只能在 openLDAP 中禁用他们的帐户,即使他们的公钥存在于机器上,他们也无法使用它们,因为他们也会失败 ldap 身份验证。
我在 StackExchanges 上搜索了好久,但还是没有找到我想要的东西。我找到的最接近的答案是
https://serverfault.com/questions/653792/ssh-key-authentication-using-ldap
https://serverfault.com/questions/579341/combination-of-ssh-key-auth-and-two-factor-authentication
答案1
首先,授权密钥不应存储在用户的主目录中,原因有二:
- 不应允许用户自己添加随机授权密钥。
- 首次登录时,如果主目录尚不存在,则授权密钥应该已经存在。
你应该设置授权密钥文件像这样让sshd通过辅助同步脚本从放置密钥的锁定目录中读取授权密钥:
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
其中一个变体是使用授权密钥命令触发对授权密钥的动态检索。请记住,在您必须登录时,网络可能会中断或系统无法访问。
如果员工离开,您还可以移除授权密钥。
如果你仍然想强制使用基于密钥和密码的身份验证,你可以设置身份验证方法像这样:
AuthenticationMethods publickey,password
请注意,使用逗号而不是空格作为分隔符。
(如果你不想自己处理所有细节,你可以设置一个现成的解决方案,例如免费IPA和ssd 的作为 NSS/PAM 客户端或我的Æ-DIR和主机用作 NSS/PAM 客户端。