Para configurar o redirecionamento de cartão inteligente em uma máquina virtual (VM) Ubuntu, instale as bibliotecas das quais o recurso depende e o certificado da Autoridade de Certificação (CA) raiz para oferecer suporte à autenticação confiável de cartões inteligentes. Além disso, você deve editar alguns arquivos de configuração para concluir a configuração da autenticação.

Alguns exemplos no procedimento usam valores de espaço reservado para representar entidades em sua configuração de rede, como o nome DNS do seu domínio do AD. Substitua os valores do espaço reservado por informações específicas para sua configuração, conforme descrito na tabela a seguir.

Valor do espaço reservado Descrição
dns_IP_ADDRESS Endereço IP do seu servidor de nomes DNS
meudomínio.com Nome DNS do seu domínio do AD
MEUDOMÍNIO.COM Nome DNS do seu domínio do AD, em letras maiúsculas
MEUDOMÍNIO Nome DNS do grupo de trabalho ou domínio NT que inclui o servidor Samba, em letras maiúsculas
ads-hostname Nome do host do seu servidor AD
ads-hostname.mydomain.com Nome de domínio totalmente qualificado (FQDN) do seu servidor AD
mytimeserver.mycompany.com Nome DNS do seu servidor de horário NTP
AdminUser Nome de usuário do administrador da VM

Pré-requisitos

Integrar uma máquina virtual Ubuntu com o Active Directory para redirecionamento de cartão inteligente

Procedimento

  1. Instale as bibliotecas necessárias na VM Ubuntu.
    apt-get install -y pcscd pcsc-tools pkg-config libpam-pkcs11 opensc 
         libengine-pkcs11-openssl libnss3-tools
  2. Instale um certificado da Autoridade de Certificação Raiz (CA).
    1. Baixe um certificado de CA raiz e salve-o em /tmp/certificate.cer na VM Ubuntu. Consulte Como exportar o certificado da autoridade de certificação raiz.
    2. Localize o certificado de CA raiz que você baixou e transfira-o para um arquivo .pem.
      openssl x509 -inform der -in /tmp/certificate.cer -out /tmp/certificate.pem
    3. Use o comando certutil para instalar o certificado de CA raiz no banco de dados do sistema /etc/pki/nssdb.
      certutil -A -d /etc/pki/nssdb -n "root CA cert" -t "CT,C,C" -i /tmp/certificate.pem
    4. Copie o certificado da CA raiz para o diretório /etc/pam_pkcs11/cacerts.
      mkdir -p /etc/pam_pkcs11/cacerts
      
      cp /tmp/certificate.pem /etc/pam_pkcs11/cacerts
  3. Crie um arquivo hash pkcs11.
    chmod a+r certificate.pem
    pkcs11_make_hash_link
  4. Copie os drivers necessários e adicione os arquivos de biblioteca necessários ao diretório nssdb.
    1. Execute comandos semelhantes ao exemplo a seguir.
      Esses comandos de exemplo mostram como adicionar libcmP11.so, o arquivo de driver para a placa Gemalto PIV 2.0, ao diretório nssdb. No lugar de libcmP11.so, você pode substituir o arquivo de driver pelo cartão inteligente.
      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. Verifique se o certificado esperado foi carregado com êxito executando o seguinte comando.
      # certutil -L -d /etc/pki/nssdb
      Verifique se o comando retorna uma saída semelhante ao exemplo a seguir.
      Certificate Nickname
      rootca
    3. Verifique se as bibliotecas esperadas foram adicionadas com êxito executando o seguinte comando.
      modutil -dbdir /etc/pki/nssdb -list
      Verifique se o comando retorna uma saída semelhante ao exemplo a seguir.
      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. Configure a biblioteca pam_pkcs11.
    1. Crie um arquivo pam_pkcs11.conf usando o conteúdo de exemplo padrão.
      • Para o Ubuntu 18.04 ou 20.04, execute a seguinte sequência de comandos.
        mkdir /etc/pam_pkcs11
        zcat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example.gz | tee /etc/pam_pkcs11/pam_pkcs11.conf
      • Para o Ubuntu 20.04.1 ou posterior, execute a seguinte sequência de comandos.
        mkdir /etc/pam_pkcs11
        cat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example | tee /etc/pam_pkcs11/pam_pkcs11.conf
    2. Edite o arquivo /etc/pam_pkcs11/pam_pkcs11.conf conforme mostrado no exemplo a seguir.
      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. Edite o arquivo /etc/pam_pkcs11/cn_map para que ele inclua a seguinte linha.
      Common name -> Login ID
  6. Edite o arquivo de configuração /etc/pam.d/gdm-password. Coloque a linha de autorização pam_pkcs11.so antes da linha common-auth, conforme mostrado no exemplo a seguir.
    #%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. Para verificar o hardware do cartão inteligente e os certificados instalados no cartão inteligente, execute os comandos a seguir.
    pcsc_scan
    pkcs11_listcerts
    pkcs11_inspect
  8. Configure o serviço pcscd para ser iniciado automaticamente após a reinicialização da VM.
    Observação: Se o serviço pccd não for iniciado após a reinicialização da VM, a primeira tentativa de logon por meio de pam_pkcs11 falhará.
    1. Edite o arquivo /lib/systemd/system/pcscd.service adicionando a linha WantedBy=multi-user.target à seção [Install].
      Verifique se o arquivo editado é semelhante ao exemplo a seguir.
      [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. Habilite o serviço pccd.
      systemctl enable pcscd.service
  9. Atualize a biblioteca do PC/SC Lite para a versão 1.8.8.
    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. Instale o pacote Horizon Agent, com o redirecionamento de cartão inteligente ativado.
    sudo ./install_viewagent.sh -m yes
  11. Reinicie a VM do Ubuntu e faça login novamente.