Um die Smartcard-Umleitung auf einer virtuellen Ubuntu-Maschine (VM) zu konfigurieren, installieren Sie die Bibliotheken, von denen die Funktion abhängt, und das Stamm-CA-Zertifikat, um die vertrauenswürdige Authentifizierung von Smartcards zu unterstützen. Außerdem müssen Sie einige Konfigurationsdateien bearbeiten, um des Einrichten der Authentifizierung abzuschließen.

In einigen der Beispiele im Verfahren werden Platzhalterwerte verwendet, um Entitäten in Ihrer Netzwerkkonfiguration darzustellen, z. B. den DNS-Namen Ihrer Active Directory-Domäne. Ersetzen Sie die Platzhalterwerte durch spezifische Informationen für Ihre Konfiguration, wie in der folgenden Tabelle gezeigt.

Platzhalterwert Beschreibung
dns_IP_ADDRESS IP-Adresse Ihres DNS-Namenservers
mydomain.com DNS-Name Ihrer Active Directory-Domäne
MYDOMAIN.COM DNS-Name Ihrer Active Directory-Domäne in Großbuchstaben
MYDOMAIN DNS-Name der Arbeitsgruppe oder NT-Domäne, in der sich Ihr Samba-Server befindet, in Großbuchstaben
ads-hostname Hostname Ihres AD-Servers
ads-hostname.mydomain.com Vollqualifizierter Domänenname (FQDN) Ihres AD-Servers
mytimeserver.mycompany.com DNS-Name Ihres NTP-Zeitservers
AdminUser Benutzername des VM-Administrators

Voraussetzungen

Integrieren einer virtuellen Ubuntu-Maschine in Active Directory für die Smartcard-Umleitung

Prozedur

  1. Installieren Sie die erforderlichen Bibliotheken auf der Ubuntu-VM.
    apt-get install -y pcscd pcsc-tools pkg-config libpam-pkcs11 opensc
          libengine-pkcs11-openssl libnss3-tools
  2. Installieren Sie ein Stamm-CA-Zertifikat.
    1. Laden Sie ein Stamm-CA-Zertifikat herunter und speichern Sie es in /tmp/certificate.cer auf der Ubuntu-VM. Siehe How to export Root Certification Authority Certificate.
    2. Übertragen Sie das heruntergeladene Stamm-CA-Zertifikat in eine .pem-Datei.
      openssl x509 -inform der -in /tmp/certificate.cer -out /tmp/certificate.pem
    3. Verwenden Sie den Befehl certutil, um das Stamm-CA-Zertifikat in der Systemdatenbank /etc/pki/nssdb zu installieren.
      certutil -A -d /etc/pki/nssdb -n "root CA cert" -t "CT,C,C" -i /tmp/certificate.pem
    4. Kopieren Sie das Stamm-CA-Zertifikat in das Verzeichnis /etc/pam_pkcs11/cacerts.
      mkdir -p /etc/pam_pkcs11/cacerts
      
      cp /tmp/certificate.pem /etc/pam_pkcs11/cacerts
  3. Erstellen Sie eine pkcs11-Hash-Datei.
    chmod a+r certificate.pem
    pkcs11_make_hash_link
  4. Kopieren Sie die erforderlichen Treiber und fügen Sie die benötigten Bibliotheksdateien zum Verzeichnis nssdb hinzu.
    1. Führen Sie Befehle ähnlich dem folgenden Beispiel aus.
      Diese Beispielbefehle zeigen, wie Sie libcmP11.so, die Treiberdatei für die Gemalto PIV 2.0-Karte, zum Verzeichnis nssdb hinzufügen. Anstelle von libcmP11.so können Sie die Treiberdatei für Ihre Smartcard ersetzen.
      cp libcmP11.so /usr/lib/
      mkdir -p /etc/pki/nssdb
      certutil -N -d /etc/pki/nssdb
      certutil -A -n rootca -i certificate.pem -t "CT,CT,CT" -d /etc/pki/nssdb
      modutil -dbdir /etc/pki/nssdb/  -add "piv card 2.0" -libfile /usr/lib/libcmP11.so
    2. Stellen Sie sicher, dass das erwartete Zertifikat erfolgreich geladen wurde.
      certutil -L -d /etc/pki/nssdb
      
      Certificate Nickname
      
      rootca
    3. Stellen Sie sicher, dass die erwarteten Bibliotheken erfolgreich hinzugefügt wurden.
      modutil -dbdir /etc/pki/nssdb -list
      
      Listing of PKCS #11 Modules
      –-----------------------------------------------------------
        1. NSS Internal PKCS #11 Module
               slots: 2 slots attached
              status: loaded
      
               slot: NSS Internal Cryptographic Services
              token: NSS Generic Crypto Services
      
               slot: NSS User Private Key and Certificate Services
              token: NSS Certificate DB
      
        2. piv card 2.0
              library name: /usr/lib/libcmP11.so
               slots: There are no slots attached to this module
              status: loaded
      –-----------------------------------------------------------
  5. Konfigurieren Sie die pam_pkcs11-Bibliothek.
    1. Erstellen Sie eine pam_pkcs11.conf-Datei mit dem standardmäßigen Beispielinhalt.
      • Führen Sie für Ubuntu 18.04 oder 20.04 die folgende Befehlssequenz aus.
        mkdir /etc/pam_pkcs11
        zcat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example.gz | tee /etc/pam_pkcs11/pam_pkcs11.conf
      • Führen Sie für Ubuntu 20.04.1 oder höher die folgende Befehlssequenz aus.
        mkdir /etc/pam_pkcs11
        cat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example | tee /etc/pam_pkcs11/pam_pkcs11.conf
    2. Bearbeiten Sie die Datei /etc/pam_pkcs11/pam_pkcs11.conf, wie im folgenden Beispiel gezeigt.
      use_pkcs11_module = mysc;                            
              
      pkcs11_module mysc {                                 
                    module = /usr/lib/libcmP11.so;         
                    description = "LIBCMP11";               
                    slot_num = 0;                           
                    ca_dir = /etc/pam_pkcs11/cacerts;       
                    nss_dir = /etc/pki/nssdb;        
                    cert_policy = ca;                       
      }                                                    
      ...
      use_mappers = cn, null;                        
      ...
      mapper cn {
            debug = false;
            module = internal;
            # module = /lib/pam_pkcs11/cn_mapper.so;
            ignorecase = true;
            mapfile = file:///etc/pam_pkcs11/cn_map;         
            # mapfile = "none";
      }
    3. Bearbeiten Sie die Datei /etc/pam_pkcs11/cn_map , damit sie die folgende Zeile enthält.
      Common name -> Login ID
  6. Bearbeiten Sie die Konfigurationsdatei /etc/pam.d/gdm-password. Platzieren Sie die Autorisierungszeile pam_pkcs11.so vor der Zeile common-auth, wie im folgenden Beispiel gezeigt.
    #%PAM-1.0
    auth    requisite       pam_nologin.so
    auth    required        pam_succeed_if.so user != root quiet_success
    auth sufficient pam_pkcs11.so                                                                               
    @include common-auth
    auth    optional        pam_gnome_keyring.so
    @include common-account
  7. Führen Sie die folgenden Befehle aus, um die Smartcard-Hardware und die auf der Smartcard installierten Zertifikate zu überprüfen.
    pcsc_scan
    
    pkcs11_listcerts
    
    pkcs11_inspect
  8. Konfigurieren Sie den pcscd-Dienst, um nach dem Neustart der VM automatisch zu starten.
    Hinweis: Wenn der pcscd-Dienst nach dem Neustart der VM nicht gestartet wird, schlägt die Erstanmeldung über pam_pkcs11 fehl.
    1. Bearbeiten Sie die Datei /lib/systemd/system/pcscd.service, indem Sie dem Abschnitt [Install] die Zeile WantedBy=multi-user.target hinzufügen.
      Stellen Sie sicher, dass die bearbeitete Datei dem folgenden Beispiel ähnelt.
      [Unit]
      Description=PC/SC Smart Card Daemon
      Requires=pcscd.socket
      
      [Service]
      ExecStart=/usr/sbin/pcscd --foreground --auto-exit
      ExecReload=/usr/sbin/pcscd --hotplug
      
      [Install]
      WantedBy=multi-user.target
      Also=pcscd.socket
    2. Aktivieren Sie den pcscd-Dienst.
      systemctl enable pcscd.service
  9. Aktualisieren Sie die PC/SC Lite-Bibliothek auf Version 1.8.8 und verwenden Sie dabei die folgende Befehlsfolge.
    apt-get install -y git autoconf automake libtool flex libudev-dev
    git clone https://salsa.debian.org/rousseau/PCSC.git
    cd PCSC/
    git checkout -b pcsc-1.8.8 1.8.8
    ./bootstrap
    ./configure --prefix=/usr --sysconfdir=/etc --libdir=/lib/x86_64-linux-gnu/ 
       CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security" 
       LIBS="-ldl" LDFLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro" 
       CPPFLAGS="-Wdate-time -D_FORTIFY_SOURCE=2"
    make
    make install
  10. Installieren Sie das Paket Horizon Agent mit aktivierter Smartcard-Umleitung.
    sudo ./install_viewagent.sh -m yes
  11. Starten Sie die Ubuntu-VM neu und melden Sie sich erneut an.