PAM

如何设置登录

你有两个选择:`pam_p11<https://github.com/OpenSC/pam_pkcs11>`__或`PAM Poldi<https://wiki.ubuntuusers.de/Archiv/Authentifizierung_OpenPGP_SmartCard/>`__

使用pam_p11的解决方案更难实现,它是基于S/MIME证书的。请看看`文档<https://opensc.github.io/pam_pkcs11/doc/pam_pkcs11.html>`__以了解更多信息。

PAM Poldi 0.4.1与Nitrokey配合使用RSA密钥进行PAM认证,效果完美无缺(关于ECC密钥的信息,请参见故障排除)。除了安装Poldi(例如``sudo apt-get install libpam-poldi``在Ubuntu上),还需要以下步骤来让它工作。

有必要在Nitrokey上已经生成密钥,因为认证密钥是由PAM使用的。

  1. 首先,你需要找出你的Nitrokey的应用ID。它看起来像或类似于``D00600012401020000000000xxxxxxxx``。

    gpg --card-status | grep Application
    
  2. 现在你必须在``/etc/poldi/localdb/users``中添加一行,其中包含以下信息``<YourApplicationID> <YourUsername>``。

    这可能看起来像``D00600012401020000000000xxxxxxxx nitrokeyuser``。现在,将公钥从Nitrokey转入Poldis本地数据库。

    sudo sh -c 'gpg-connect-agent "/datafile /etc/poldi/localdb/keys/<YourApplicationID>" "SCD READKEY --advanced OPENPGP.3" /bye'
    

    请注意,你必须在上面的一行中插入你的应用ID和你的Nitrokey的ID!

    然后你必须配置PAM。只要根据你的需要在PAM配置文件中添加``auth sufficient pam_poldi.so``。

    • ``/etc/pam.d/common-auth``用于图形化用户登录

    • ``/etc/pam.d/login``用于控制台登录

    • ``/etc/pam.d/sudo``用于sudo认证

    • ``/etc/pam.d/gnome-screensaver``用于从锁定的屏幕上重新登录。

    • 和其他文件在``/etc/pam.d``

    备注

    玩PAM是很危险的,所以要确保你有办法在完全破坏认证的情况下访问机器。记住,从GRUB启动到救援模式需要一个root密码,所以要保留这个密码或一张可以读取文件系统的活CD。

在这里你可以找到`进一步的说明<https://wiki.ubuntuusers.de/Archiv/Authentifizierung_OpenPGP_SmartCard>`__(德语,部分已经过时)。

故障排除

如果你得到一个类似于``ERR 100663414 Invalid ID <SCD>``的错误,你应该尝试代替一下

poldi-ctrl -k > <YourApplicationID>; sudo mv <YourApplicationID> /etc/poldi/localdb/keys

请注意,你必须在上面的一行中插入你的申请ID和你的棍子的ID!

ECC钥匙

不幸的是,Poldi还没有对ECC钥匙的支持。但有一个`,用于与Nitrokey Start<https://dev.gnupg.org/T4009>`__一起使用的ECC钥匙的补丁。这已经包含在Poldi开发库的主分支中,因此最终会在一个较新的版本中发布。在这期间,唯一的选择是从源码构建Poldi。