Ubuntu 데스크톱에서 스마트 카드 리디렉션을 구성하려면 해당 기능이 의존하는 라이브러리와 스마트 카드의 신뢰할 수 있는 인증을 지원하기 위한 루트 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 Linux 데스크톱 관리자의 사용자 이름

사전 요구 사항

스마트 카드 리디렉션을 위해 Ubuntu 데스크톱을 Active Directory와 통합

프로시저

  1. 필요한 라이브러리를 설치합니다.
    apt-get install -y pcscd pcsc-tools pkg-config libpam-pkcs11 opensc
          libengine-pkcs11-openssl libnss3-tools
  2. 루트 CA(인증 기관) 인증서를 설치합니다.
    1. 루트 CA 인증서를 다운로드하고 데스크톱의 /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. 다음 명령을 실행합니다.
      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 파일을 생성합니다.
      mkdir /etc/pam_pkcs11
      zcat /usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.conf.example.gz | 
             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 파일을 편집합니다.
      ads-hostname -> ads-hostname
  6. PAM 인증을 구성합니다.
    1. /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
    2. Ubuntu 16.04의 경우 /etc/pam.d/lightdm 구성 파일을 편집합니다. 다음 예시와 같이 common-auth 줄 앞에 pam_pkcs11.so 인증 줄을 넣습니다.
      #%PAM-1.0
      auth    requisite       pam_nologin.so debug
      auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin debug
      auth    [success=3 default=ignore}     pam_pkcs11.so                                   
      @include common-auth
      auth    optional        pam_gnome_keyring.so
      auth    optional        pam_kwallet.so
    3. Ubuntu 16.04의 경우 /etc/pam.d/unity 구성 파일을 편집합니다. 다음 예시와 같이 common-auth 줄 앞에 pam_pkcs11.so 인증 줄을 넣습니다.
      auth    [success=3 default=ignore}     pam_pkcs11.so                                   
      @include common-auth
      auth optional pam_gnome_keyring.so
  7. 스마트 카드에 설치된 스마트 카드 하드웨어와 인증서를 확인하려면 다음 명령을 실행합니다.
    pcsc_scan
    
    pkcs11_listcerts
    
    pkcs11_inspect
  8. 시스템이 재부팅된 후 자동으로 시작되도록 pcscd 서비스를 구성합니다.
    참고: 시스템이 재부팅된 후에 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 1.8.8 pcsc-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
    참고: Horizon Agent 7.9 이상을 설치해야 합니다.
  11. 시스템을 재부팅하고 다시 로그인합니다.