Ubuntu VM(가상 시스템)에서 스마트 카드 리디렉션을 구성하려면 해당 기능이 의존하는 라이브러리와 스마트 카드의 신뢰할 수 있는 인증을 지원하기 위한 루트 CA(인증 기관) 인증서를 설치합니다. 또한 인증 설정을 완료하려면 일부 구성 파일을 편집해야 합니다.

이 절차의 일부 예시는 AD 도메인의 DNS 이름과 같은 네트워크 구성의 엔티티를 나타내기 위해 자리 표시자 값을 사용합니다. 다음 표에 설명된 대로 자리 표시자 값을 구성과 관련된 정보로 바꿉니다.

자리 표시자 값 설명
dns_IP_ADDRESS DNS 이름 서버의 IP 주소
mydomain.com AD 도메인의 DNS 이름
MYDOMAIN.COM AD 도메인의 DNS 이름(모두 대문자)
MYDOMAIN Samba 서버를 포함하는 작업 그룹 또는 NT 도메인의 DNS 이름(모두 대문자)
ads-hostname AD 서버의 호스트 이름
ads-hostname.mydomain.com AD 서버의 FQDN(정규화된 도메인 이름)
mytimeserver.mycompany.com NTP 시간 서버의 DNS 이름
AdminUser VM 관리자의 사용자 이름

사전 요구 사항

스마트 카드 리디렉션을 위해 Ubuntu 가상 시스템을 Active Directory와 통합

프로시저

  1. Ubuntu VM에 필요한 라이브러리를 설치합니다.
    apt-get install -y pcscd pcsc-tools pkg-config libpam-pkcs11 opensc 
         libengine-pkcs11-openssl libnss3-tools
  2. 루트 CA(인증 기관) 인증서를 설치합니다.
    1. 루트 CA 인증서를 다운로드하고 Ubuntu VM의 /tmp/certificate.cer에 저장합니다. 루트 인증 기관 인증서를 내보내는 방법을 참조하십시오.
    2. 다운로드한 루트 CA 인증서를 찾은 후 .pem 파일에 전송합니다.
      openssl x509 -inform der -in /tmp/certificate.cer -out /tmp/certificate.pem
    3. certutil 명령을 사용하여 시스템 데이터베이스 /etc/pki/nssdb에 루트 CA 인증서를 설치합니다.
      certutil -A -d /etc/pki/nssdb -n "root CA cert" -t "CT,C,C" -i /tmp/certificate.pem
    4. 루트 CA 인증서를 /etc/pam_pkcs11/cacerts 디렉토리에 복사합니다.
      mkdir -p /etc/pam_pkcs11/cacerts
      
      cp /tmp/certificate.pem /etc/pam_pkcs11/cacerts
  3. pkcs11 해시 파일을 생성합니다.
    chmod a+r certificate.pem
    pkcs11_make_hash_link
  4. 필요한 드라이버를 복사하고 필수 라이브러리 파일을 nssdb 디렉토리에 추가합니다.
    1. 다음 예제와 유사한 명령을 실행합니다.
      다음 예제 명령은 Gemalto PIV 2.0 카드용 드라이버 파일인 libcmP11.sonssdb 디렉토리에 추가하는 방법을 보여 줍니다. libcmP11.so 대신, 스마트 카드의 드라이버 파일을 대체할 수 있습니다.
      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. 다음 명령을 실행하여 예상된 인증서가 성공적으로 로드되었는지 확인합니다.
      # certutil -L -d /etc/pki/nssdb
      명령이 다음 예시와 유사한 출력을 반환하는지 확인합니다.
      Certificate Nickname
      rootca
    3. 다음 명령을 실행하여 예상된 라이브러리가 성공적으로 추가되었는지 확인합니다.
      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. pam_pkcs11 라이브러리를 구성합니다.
    1. 기본 예시 컨텐츠를 사용하여 pam_pkcs11.conf 파일을 생성합니다.
      • Ubuntu 18.04 또는 20.04의 경우 다음 명령 순서를 실행합니다.
        mkdir /etc/pam_pkcs11
        zcat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example.gz | tee /etc/pam_pkcs11/pam_pkcs11.conf
      • Ubuntu 20.04.1 이상의 경우 다음 명령 순서를 실행합니다.
        mkdir /etc/pam_pkcs11
        cat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example | tee /etc/pam_pkcs11/pam_pkcs11.conf
    2. 다음 예시와 같이 /etc/pam_pkcs11/pam_pkcs11.conf 파일을 편집합니다.
      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. 다음 줄을 포함하도록 /etc/pam_pkcs11/cn_map 파일을 편집합니다.
      Common name -> Login ID
  6. /etc/pam.d/gdm-password 구성 파일을 편집합니다. 다음 예시와 같이 common-auth 줄 앞에 pam_pkcs11.so 인증 줄을 넣습니다.
    #%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. 스마트 카드에 설치된 스마트 카드 하드웨어와 인증서를 확인하려면 다음 명령을 실행합니다.
    pcsc_scan
    pkcs11_listcerts
    pkcs11_inspect
  8. VM이 다시 시작된 후 자동으로 시작되도록 pcscd 서비스를 구성합니다.
    참고: VM이 다시 시작된 후에 pcscd 서비스가 시작되지 않으면 pam_pkcs11을 통한 첫 번째 로그인 시도가 실패합니다.
    1. [Install] 섹션에 WantedBy=multi-user.target 줄을 추가하여 /lib/systemd/system/pcscd.service 파일을 편집합니다.
      편집한 파일이 다음 예와 유사한지 확인합니다.
      [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. pcscd 서비스를 사용하도록 설정합니다.
      systemctl enable pcscd.service
  9. PC/SC Lite 라이브러리를 버전 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. 스마트 카드 리디렉션을 사용하도록 설정하고 Horizon Agent 패키지를 설치합니다.
    sudo ./install_viewagent.sh -m yes
  11. Ubuntu VM을 다시 시작하고 다시 로그인합니다.