SSH 证书登录 ¶
SSH 证书登录管理
#Linux #网络安全 /
SSH 证书登录
证书认证功能在 openssh 5.4 版已经引入,并在6.8版得到加强,因此应该都是支持的了
⚠️这里的方案是单向验证,即服务器验证客户端,客户端对服务器的验证实际上是通过HOST-KEY完成的,也就是连接是系统检查服务器指纹在没在KNOWN HOSTS列表中,如果没有,系统会进行提示,你可以添加到列表中,如果存在,但和你存储的指纹冲突了,系统会自动停止继续交互,你需要从KNOWN HOSTS 文件中移除相关项目,找到相应IP地址对应的项进行删除,此后重新添加进去。这个指纹通常是在系统重装或者SSH服务重置后更改,如果是其他情况,就要注意是不是被中间人了
而使用证书登录的目的,主要是为了能够方便分配短时访问密钥,从而提高安全性
⚠️此方案有一个重大缺陷,如果不小心签署了不过期的用户证书,证书是没法撤回的,只能更换user_ca,这个非常重要‼️,应该避免签发不过期的用户证书。
- 生成证书, 实际上就是一个密钥对
ssh-keygen -t ed25519 -f ssh-ca -C ‘ssh-ca-cert’生成一个密钥对: ssh-ca(私钥), ssh-ca.pub(公钥),这个密钥对非常重要,建议使用密码保护
- 配置服务器,以使其支持证书认证
sudo cp ssh-ca.pub /etc/ssh/可能需要设置权限,所有者是root,权限最高 644,600应该也可- 修改 /etc/ssh/sshd_config ,确保存在以下配置行: TrustedUserCAKeys /etc/ssh/ssh-ca.pub
- 重启 SSH 服务
- 除了全局启用配置外,还可以在特定用户 .ssh/authorized_keys 添加需要信任的根证书以进一步提高🔐安全性。格式如下,文本中principal 应与authorized key所有者的用户名一致: @cert-authority principals="root" ssh-rsa AAAAB3Nz…XNRM1EX2gQ==
- 为用户公钥进行签名,生成公钥证书
- 为了测试,自己生成一个密钥对,
ssh-keygen -t rsa -b 2048 -C ‘user1’ -f ./user1, 此时会在当前目录生成user1, user1.pub一组密钥对 - 为公钥签名,可能需要提供私钥密码
ssh-keygen -s ssh-ca -I ‘Usage:xxx’ -n ‘user_name’ -V +52w ./user1.pub, 签完名后当前目录下会生成一个 user1-cert.pub 文件 - 确保证书公钥和私钥在一个文件夹下,
ssh user_name@remote -i user1 - 用户可登录成功
- 为了测试,自己生成一个密钥对,
- 查看证书用途和有效期等信息
ssh-keygen -L -f ./user1-cert.pub
- 配置证书权限
ssh-keygen -s ssh-ca -I ‘usage:xxx,xxx’ -n ‘user1’ -V +52w ./user1.pub -O ‘force-command=/bin/top’ -O ‘no-port-forwarding’- 限制运行特定命令,force-command
- 禁止端口转发, no-port-forwarding
- 只做代理,no-pty
- 🚫原地址, source-address
全自动的增加用户
💻 在新版SSHD中,系统在认证前有预检查机制,如果/etc/passwd缺少相应的账户,系统根本不会进入PAM流程,直接拒绝认证。因此自动化账户管理应使用 NSS//LDAP SSSD等,而不要使用证书签发,想在这个上面耍点滑还是不可取的。推荐在为不存在的用户签发证书时,先进行账户添加(可用ANSIBLE技术,或者直接为root签发一个短期证书,然后用root登录上去进行账户添加)
以下方法放在这里,可以用于没有预检查但使用PAM的应用
当为不存在的用户签发证书时,上面的 -n 参数,如果目标系统上面没有相应的用户,这个用户就会签发失败,可能使用 pam_exec.so 模块在用户通过认证后自动添加用户,ssh 的 PAM 认证文件通常位于: /etc/pam.d/sshd
- 需要增加的行: auth optional pam_exec.so /opt/adduser
一个常见的添加用户脚本
#!/bin/bash
# PAM 会环境变量传递用户名 $PAM_USER
if ! id "$PAM_USER" &>/dev/null; then
# 这里的用户名必须是证书里 -n 参数指定的 Principals 之一
useradd -m -s /bin/bash "$PAM_USER"
fi
证书吊销
使用超短期证书取代吊销清单,以免多维护一个清单,从而增加复杂度
P.S. 证书认证虽然好,但是有些堡垒机并不支持
评论
请登录后发表评论。
暂无评论。成为第一个评论者!