Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4. 智能卡

基于智能卡进行验证是替代基于密码的身份验证。用户凭证存储在智能卡中,然后使用特殊的软件和硬件来访问它们。要使用智能卡进行身份验证,用户必须将智能卡放在智能卡读取器中,然后提供智能卡的 PIN 代码。
重要
下面的部分论述了如何使用 pam_pkcs11pam_krb5 软件包为本地用户配置智能卡验证系统。请注意,这些软件包现在已弃用,如 7.4 发行注记 中的 Deprecated Functionality 所述。
要集中配置智能卡身份验证,请使用系统安全服务守护进程(SSSD)提供的增强智能卡功能。详情请参阅 Linux 域 身份、身份验证和策略指南中 的身份管理中的智能卡 身份验证。

4.4.1. 使用 authconfig配置智能卡

选择 启用智能卡支持 选项后,会显示其他控制来配置智能卡的行为。

图 4.3. 智能卡选项

智能卡选项
请注意,默认情况下不启用 Red Hat Enterprise Linux 服务器和工作站的智能卡登录,且必须在系统设置中启用。
注意
登录 Red Hat Enterprise Linux 时使用单点登录需要这些软件包:
  • nss-tools
  • nss-pam-ldapd
  • esc
  • pam_pkcs11
  • pam_krb5
  • opensc
  • pcsc-lite-ccid
  • gdm
  • authconfig
  • authconfig-gtk
  • krb5-libs
  • krb5-workstation
  • krb5-pkinit
  • pcsc-lite
  • pcsc-lite-libs

4.4.1.1. 从 UI 启用智能卡身份验证

  1. 以 root 用户身份登录系统。
  2. 以基础 64 格式下载网络的 root CA 证书,并将它们安装在服务器上。证书使用 certutil 命令在适当的系统数据库中安装。例如:
    [root@server ~]# certutil -A -d /etc/pki/nssdb -n "root CA cert" -t "CT,C,C" -i /tmp/ca_cert.crt
    注意
    不要担心导入的证书稍后不会在 authconfig UI 中显示。您不能在 UI 中看到证书;在身份验证过程中,它从 /etc/pki/nssdb/ 目录中获取。
  3. 在顶部菜单中选择 Application 菜单,选择 Sundry,然后单击 Authentication
  4. 打开 Advanced Options 选项卡。
  5. Enable Smart Card Support 复选框。
  6. 可以为智能卡配置两种行为:
    • Card removal 操作 菜单在活跃会话中删除智能卡时设定系统所采取的响应。Ignore 选项表示,如果删除了智能卡,系统将继续正常运行,而 Lock 会立即锁定屏幕。
    • Require smart card for login 复选框设定了登录是否需要智能卡。选择此选项时,所有其他身份验证方法都将被阻止。
      警告
      在成功使用智能卡登录 ,不要选择此项。
  7. 默认情况下,检查证书是否已撤销(在线证书状态协议或 OCSP 响应)的机制已被禁用。要验证证书是否在过期前撤销,请通过在 cert_policy 指令中添加 ocsp_on 选项来启用 OCSP 检查。
    1. 打开 pam_pkcs11.conf 文件。
      vim /etc/pam_pkcs11/pam_pkcs11.conf
    2. 更改每个 cert_policy 行,使其包含 ocsp_on 选项。
      cert_policy = ca, ocsp_on, signature;
      注意
      由于文件被解析的方式,cert_policy 和等号之间必须有一个空格。否则,解析参数会失败。
  8. 如果智能卡尚未注册(使用个人证书和密钥设置),请注册智能卡。
  9. 如果智能卡是 CAC 卡,请在 CAC 用户的主目录中创建 .k5login 文件。.k5login 文件需要在 CAC 卡上具有 Microsoft Principal Name。
  10. /etc/pam.d/smartcard-auth/etc/pam.d/system-auth 文件中添加以下行:
    auth    optional    pam_krb5.so use_first_pass no_subsequent_prompt preauth_options=X509_user_identity=PKCS11:/usr/lib64/pkcs11/opensc-pkcs11.so
    如果 OpenSC 模块无法按预期工作,请使用 coolkey 软件包中的模块: /usr/lib64/pkcs11/libcoolkeypk11.so。在这种情况下,请考虑联系红帽技术支持或就该问题发布 Bugzilla 报告。
  11. 配置 /etc/krb5.conf 文件。设置根据您是使用 CAC 卡还是 Gemalto 64K 卡而有所不同。
    • 使用 CAC 卡,在 pkinit_anchors 中指定与 CAC 卡使用相关的所有根证书。在用来配置 CAC 卡的 /etc/krb5.conf 文件中,EXAMPLE.COM 是 CAC 卡的域名称,kdc.server.hostname.com 是 KDC 服务器主机名。
      [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
      
      [libdefaults]
        dns_lookup_realm = false
        dns_lookup_kdc = false
        ticket_lifetime = 1h
        renew_lifetime = 6h
        forwardable = true
      
        default_realm = EXAMPLE.COM
      [realms]
        EXAMPLE.COM = {
          kdc = kdc.server.hostname.com
          admin_server = kdc.server.hostname.com
          pkinit_anchors = FILE:/etc/pki/nssdb/ca_cert.pem
          pkinit_anchors = FILE:/etc/pki/nssdb/CAC_CA_cert.pem
          pkinit_anchors = FILE:/etc/pki/nssdb/CAC_CA_email_cert.pem
          pkinit_anchors = FILE:/etc/pki/nssdb/CAC_root_ca_cert.pem
          pkinit_cert_match = CAC card specific information
        }
      
      [domain_realm]
        EXAMPLE.COM = EXAMPLE.COM
        .EXAMPLE.COM = EXAMPLE.COM
      
        .kdc.server.hostname.com = EXAMPLE.COM
        kdc.server.hostname.com = EXAMPLE.COM
      
      [appdefaults]
          pam = {
            debug = true
            ticket_lifetime = 1h
            renew_lifetime = 3h
            forwardable = true
            krb4_convert = false
            mappings = username on the CAC card     Principal name on the card
          }
      
    • 在用来配置 Gemalto 64K 卡的 /etc/krb5.conf 文件中,EXAMPLE.COM 是 KDC 服务器上创建的域,kdc-ca.pem 是 CA 证书,kdc.server.hostname.com 是 KDC 服务器主机名。
      [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
      
      [libdefaults]
        dns_lookup_realm = false
        dns_lookup_kdc = false
        ticket_lifetime = 15m
        renew_lifetime = 6h
        forwardable = true
      
        default_realm = EXAMPLE.COM
      [realms]
        EXAMPLE.COM = {
          kdc = kdc.server.hostname.com
          admin_server = kdc.server.hostname.com
          pkinit_anchors = FILE:/etc/pki/nssdb/kdc-ca.pem
          pkinit_cert_match = <KU>digitalSignature
          pkinit_kdc_hostname = kdc.server.hostname.com
        }
      
      [domain_realm]
        EXAMPLE.COM = EXAMPLE.COM
        .EXAMPLE.COM = EXAMPLE.COM
      
        .kdc.server.hostname.com = EXAMPLE.COM
        kdc.server.hostname.com = EXAMPLE.COM
      
      [appdefaults]
          pam = {
            debug = true
            ticket_lifetime = 1h
            renew_lifetime = 3h
            forwardable = true
            krb4_convert = false
          }
      
注意
当插入智能卡时,pklogin_finder 工具以 debug 模式运行,首先将登录 ID 映射到卡中的证书,然后尝试输出证书的有效性信息:
pklogin_finder debug
命令可用于诊断使用智能卡登录系统的问题。

4.4.1.2. 从命令行配置智能卡身份验证

在系统中使用智能卡所需的一切是设置 --enablesmartcard 选项:
[root@server ~]# authconfig --enablesmartcard --update
智能卡还有其他配置选项,如更改默认智能卡模块、设置智能卡删除时的系统行为,以及登录需要智能卡。
如果删除了智能卡,值为 0 会指示系统立即锁定用户;如果删除了智能卡,1 会忽略它:
[root@server ~]# authconfig --enablesmartcard --smartcardaction=0 --update
智能卡验证成功配置和测试后,便可将系统配置为要求用户进行智能卡验证,而不是简单的基于密码的身份验证。
[root@server ~]# authconfig --enablerequiresmartcard --update
警告
除非您使用智能卡成功验证了系统的身份验证,否则请勿使用 --enablerequiresmartcard 选项。否则,用户可能无法登录系统。

4.4.2. 身份管理中的智能卡身份验证

Red Hat Identity Management 支持 IdM 用户的智能卡验证。如需更多信息,请参阅 Linux 域 身份、身份验证和策略指南中 的身份管理智能卡 身份验证一节。

4.4.3. 支持的智能卡

Red Hat Enterprise Linux 支持以下智能卡和读取器。

智能卡

  • Athena ASECard Crypto smart, pkcs15-unit
  • ATOS(Siemens)CardOS 5.0
  • Gemalto ID Classic 230 / TOP IM CY2 64kv2
  • Gemalto Cyberflex Access 64k V2c
  • Gemalto GemPCKey USB 组成因素
  • Giesecke & Devrient(G&D)SmartCafe Professional 6.0(SCP03)
  • Giesecke & Devrient(G&D)SmartCafe Professional 7.0(SCP03)
  • Safenet 330J
  • Safenet SC650(SCP01)
  • Siemens Card CardOS M4.4
  • YubiKey 4

读取器

  • 带有内置智能卡读取器的 HP Keyboard KUS1206
  • Omnikey 3121 reader
  • Omnikey 3121,PID 为 0x3022 读取器
  • Reiner SCT NetworkJack RFID komfort reader
  • SCR331 CCID 读取器