auth

주말에 심심해서 개인 인프라(?) 개선을 위해 SSSD AD Provider를 테스트해 보았다.

Kerberos + LDAP 에 저장된 sshPublicKey 속성으로 SSH 키 인증, 암호 변경 다 잘된다.

테스트 환경:

  • 도메인: TESTDOM.DEMOCORP.LOCAL
    • Vagrant 에 설치된 Samba 4 DC.
  • 클라이언트:
    • CentOS 7.0
    • CentOS 6.5
    • Ubuntu 14.04 LTS
    • Ubuntu 12.04 LTS 는 sssd가 1.8.x라 AD provider은 지원하지 않는다. adcli 패키지도 없다.

필요 패키지

  • CentOS
    • sssd-ad
    • adcli (6.5에서는 EPEL에서 설치)
    • oddjob-mkhomedir
    • krb5-workstation
  • Ubuntu
    • sssd-ad
    • adcli
    • libnss-sss
    • libpam-sss
    • krb5-user

도메인 가입

$ sudo adcli join --verbose --show-details --domain=TESTDOM.DEMOCORP.LOCAL --service-name=host
  • --service-name=host: 서비스명을 host로 강제 지정한다. (문자열 host. 호스트명 아님)

미 지정시 기본값으로 HOST/$FQDN (대문자 유의) (+기타) 로 SPN이 생성된다.

SSHd는 host/... 로만 검색하고 키가 없다고 판단하여 인증이 실패한다. [5][6]

SSSD 설정

/etc/sssd/sssd.conf 파일을 mode 0600으로 만든다. 아무나 읽을 수 있게 되어 있으면 서비스가 시작되지 않는다.

[sssd]
domains = TESTDOM.DEMOCORP.LOCAL
services = nss, pam, ssh
config_file_version = 2

[domain/TESTDOM.DEMOCORP.LOCAL]
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad

# 암호 변경 bug workaround [4]
krb5_use_enterprise_principal = false

# RFC 2307 사용 시
ldap_id_mapping = false

# openssh-lpk 스키마 확장 사용 시
ldap_user_ssh_public_key = sshPublicKey

설정 후 각 시스템에 맞게 서비스 시작 & 자동시작 설정을 한다.

시스템 설정

CentOS

$ sudo authconfig --update --enablesssd --enablesssdauth --enablemkhomedir --krb5realm=TESTDOM.DEMOCORP.LOCAL --disablekrb5

pam, nsswitch, kerberos 설정 등을 자동으로 업데이트한다.

--enablekrb5 를 지정 할 경우 pam_krb5가 로그온을 방해한다. pam_krb5는 사용하지 않고 krb5.conf만 업데이트하기 위해 --disablekrb5 를 붙여 실행한다.

Ubuntu

libnss-sss, libpam-sss 패키지를 설치하면 nsswitch.conf 와 pam 설정 파일을 자동으로 업데이트한다.

SSHd 설정

  • /etc/ssh/sshd_config:

    # openssh-lpk 스키마 확장 사용 시
    AuthorizedKeysCommandUser nobody
    AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
      
    GSSAPIAuthentication yes
    

테스트

SSH 키로 접속

ADUC sshPublicKey 속성

$ sss_ssh_authorizedkeys user
ssh-rsa AAAAB3NzaC1yc2EAAAADAQA...... 

$ ssh -o 'PubkeyAuthentication yes' -o 'PasswordAuthentication no' -o 'GSSAPIAuthentication no'  user@centos-70.testdom.democorp.local
Last login: Sun Mar  1 19:05:16 2015 from 192.168.133.1
[user@centos-70 ~]$

Kerberos

$ kinit user
Password for user@TESTDOM.DEMOCORP.LOCAL:
$ klist
Ticket cache: KEYRING:persistent:1000:1000
Default principal: user@TESTDOM.DEMOCORP.LOCAL

Valid starting       Expires              Service principal
2015-03-01T19:07:21  2015-03-02T05:07:21  krbtgt/TESTDOM.DEMOCORP.LOCAL@TESTDOM.DEMOCORP.LOCAL
        renew until 2015-03-08T19:07:18
$ ssh  -o 'PubkeyAuthentication no' -o 'PasswordAuthentication no' -o 'GSSAPIAuthentication yes'  user@centos-70.testdom.democorp.local
Last login: Sun Mar  1 19:05:32 2015 from 192.168.133.1
[user@centos-70 ~]$

관련자료:

  1. sssd - Configuring_sssd_with_ad_server
  2. SSSD 1.9 Overview (pdf)
  3. RHEL 7 WINDOWS INTEGRATION GUIDE
  4. sssd ticket #2204 sssd_ad kerberos passwords
  5. [Samba] How do I get an ssh client to authenticate with samba4’s kerberos GSSAPI?
  6. [SSSD-users] SSSD-AD and SSH GSSAPI problem - No key table entry found matching host

blog comments powered by Disqus