密钥生成不多赘述了,细节看本站的宝塔面板配置https双向认证...一样,我甚至用的是同一个证书(
首先开一个root shell 别搞错了进不去了
sudo -i
安装需要的库
sudo apt update && sudo apt install -y \
opensc \
pcscd \
libpam-pkcs11 \
yubikey-manager \
libpcsclite1 \
pcsc-tools
sudo systemctl enable pcscd --now
sudo systemctl start pcscd
再创建pam_pkcs11的配置文件
/etc/pam_pkcs11
nano /etc/pam_pkcs11/pam_pkcs11.conf
粘贴
pam_pkcs11 {
quiet = true;
slot_num = 0;
use_pkcs11_module = opensc;
pkcs11_module opensc {
module = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so; # ls确认一下有没有,是不是
description = "OpenSC PKCS#11";
slot_num = 0;
support_threads = false;
}
use_mappers = subject;
#use_mappers = digest; #若你用指纹映射
debug = true;# 实际使用改到false
mapper subject {
debug = true; # 实际使用改到false
mapfile = file:///etc/pam_pkcs11/mapping; # 这沟槽的不用file:它以为是uri呢试图网上下载
cert_policy = ca, signature;
}
mapper openssl {
debug = false;
#ca_dir = /etc/pam_pkcs11/cacerts; #如果你不想把证书装到系统里就取消注释,把证书扔进这个dir
verify_chain = true;
}
}
可选:若这个ca像我一样给服务器管理员签发了或者用作其他服务了,限制一下仅有你的指纹能登录更加安全,否则可以用CN即可
ykman piv info
# 找9a的Fingerprint:xxx
# 或者用cn
pkcs11_inspect #找DEBUG:mapper.c:158: ... to search 'xxx'
echo "xxx -> 你的用户名" > /etc/pam_pkcs11/mapping
chmod 644 /etc/pam_pkcs11/pam_pkcs11.conf
chmod 644 /etc/pam_pkcs11/mapping
然后安装你的ca或放到注释的目录里
cp root.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
通过此命令测试没有报错即可
pkcs11_inspect debug
向/etc/pam.d/common-auth在auth [success=2 default=ignore] pam_unix.so nullok前添加auth [success=3 default=ignore] pam_pkcs11.so想要仅密钥登录就注释pam_unix.so(注:这个success=2指的是成功就跳过2行,跳到pam_cap.so之前就行,稳妥的就是2+1)
然后清空gdm-smartcard*并手动注释包括其他pam_pkcs11 pam_sss的行
echo "" > /etc/pam.d/gdm-smartcard*
gdm-password第一行pam_unix可能会引起要求你先输入密码,虽然直接回车就行但是也很讨厌可以注释,反正都引用了咱们改过的common-auth
新开一个终端测试:
sudo -k
sudo -i