주말에 심심해서 개인 인프라(?) 개선을 위해 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 키로 접속
$ 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 ~]$
관련자료:
- sssd - Configuring_sssd_with_ad_server
- SSSD 1.9 Overview (pdf)
- RHEL 7 WINDOWS INTEGRATION GUIDE
- sssd ticket #2204 sssd_ad kerberos passwords
- [Samba] How do I get an ssh client to authenticate with samba4’s kerberos GSSAPI?
- [SSSD-users] SSSD-AD and SSH GSSAPI problem - No key table entry found matching host