OpenLDAP 백엔드가 포함된 MIT Kerberos - KDC가 대화형으로 시작되었지만 초기화 스크립트가 실패하면 TLS는 정상입니다.

OpenLDAP 백엔드가 포함된 MIT Kerberos - KDC가 대화형으로 시작되었지만 초기화 스크립트가 실패하면 TLS는 정상입니다.

DNS 도메인에서

domain.local.

기계가 두 대 있어요

host.domain.local. = 192.168.1.1
srv1.domain.local. = 192.168.1.2

host.domain.local. is KDC for Kerberos realm DOMAIN.LOCAL,
srv1.domain.local. is a KDC for Kerberos realm RC.DOMAIN.LOCAL.

RC.DOMAIN.LOCAL과 DOMAIN.LOCAL 사이에는 단방향 신뢰가 있습니다.

RC.DOMAIN.LOCAL ===trusts===> tickets from DOMAIN.LOCAL,

하지만 그 반대는 아닙니다.

srv1의 RC.DOMAIN.LOCAL용 KDC는 다음에 따라 OpenLDAP- 백엔드로 설정되었습니다.

http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_ldap.html

host.domain.local의 OpenLDAP 백엔드를 사용하여 연결할 수 있음

ldaps://host.domain.local:636.

srv1에는 로컬 OpenLDAP가 설치되어 있지만 비활성화되어 있으므로 srv1에는 고려해야 할 로컬 ldap.conf 등이 있습니다.


(srv1) 루트 세션에서 수동으로 srv1에서 KDC를 시작할 때

root@srv1:~# krb5kdc

모든 것이 잘 작동합니다.


시스템 초기화 스크립트를 사용하여 srv1에서 KDC를 시작하려고 하면

root@srv1:~# /etc/init.d/krb5-kdc start

또는

root@srv1:~# service krb5-kdc start

srv1의 krb5kdc와 호스트의 slapd 간의 TLS 대화 상자가 실패합니다. 결합된 syslog는 다음과 같습니다.

14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: slap_listener_activate(6): 
14:46:44 srv1 krb5kdc[3206]: krb5kdc: cannot initialize realm RC.DOMAIN.LOCAL - see log file for details
14:46:44 host.domain.local slapd[1778]: >>> slap_listener(ldaps://192.168.1.1:636/)
14:46:44 host.domain.local slapd[1778]: daemon: listen=6, new connection on 10
14:46:44 host.domain.local slapd[1778]: daemon: added 10r (active) listener=(nil)
14:46:44 host.domain.local slapd[1778]: conn=1037 fd=10 ACCEPT from IP=192.168.1.2:38664 (IP=192.168.1.1:636)
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=6 active_threads=0 tvp=NULL
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=7 active_threads=0 tvp=NULL
14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: daemon: waked
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=6 active_threads=0 tvp=NULL
14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: daemon: activity on:
14:46:44 host.domain.local slapd[1778]:  10r
14:46:44 host.domain.local slapd[1778]: 
14:46:44 host.domain.local slapd[1778]: daemon: read activity on 10
14:46:44 host.domain.local slapd[1778]: connection_get(10): got connid=1037
14:46:44 host.domain.local slapd[1778]: connection_read(10): checking for input on id=1037
14:46:44 host.domain.local slapd[1778]: connection_read(10): TLS accept failure error=-1 id=1037, closing
14:46:44 host.domain.local slapd[1778]: connection_closing: readying conn=1037 sd=10 for close
14:46:44 host.domain.local slapd[1778]: connection_close: conn=1037 sd=10
14:46:44 host.domain.local slapd[1778]: daemon: removing 10
14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: slap_listener_activate(6): 
14:46:44 host.domain.local slapd[1778]: >>> slap_listener(ldaps://192.168.1.1:636/)
14:46:44 host.domain.local slapd[1778]: daemon: listen=6, new connection on 10
14:46:44 host.domain.local slapd[1778]: daemon: added 10r (active) listener=(nil)
14:46:44 host.domain.local slapd[1778]: conn=1038 fd=10 ACCEPT from IP=192.168.1.2:38666 (IP=192.168.1.1:636)
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=6 active_threads=0 tvp=NULL
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=7 active_threads=0 tvp=NULL
14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: daemon: waked
14:46:44 host.domain.local slapd[1778]: daemon: select: listen=6 active_threads=0 tvp=NULL
14:46:44 srv1 systemd[1]: krb5-kdc.service: control process exited, code=exited status=1
14:46:44 srv1 systemd[1]: Failed to start Kerberos 5 Key Distribution Center.
14:46:44 srv1 systemd[1]: Unit krb5-kdc.service entered failed state.
14:46:44 host.domain.local slapd[1778]: daemon: activity on 1 descriptor
14:46:44 host.domain.local slapd[1778]: daemon: activity on:
14:46:44 host.domain.local slapd[1778]:  10r
14:46:44 host.domain.local slapd[1778]: 
14:46:44 host.domain.local slapd[1778]: daemon: read activity on 10
14:46:44 host.domain.local slapd[1778]: connection_get(10): got connid=1038
14:46:44 host.domain.local slapd[1778]: connection_read(10): checking for input on id=1038
14:46:44 host.domain.local slapd[1778]: connection_read(10): TLS accept failure error=-1 id=1038, closing
14:46:44 host.domain.local slapd[1778]: connection_closing: readying conn=1038 sd=10 for close
14:46:44 host.domain.local slapd[1778]: connection_close: conn=1038 sd=10
14:46:44 host.domain.local slapd[1778]: daemon: removing 10

srv1의 /etc/ldap/ldap.conf는 다음과 같습니다.

rootdn "cn=admin,cn=config"
rootpw {SASL}[email protected]
BASE    dc=domain,dc=local
URI ldaps://127.0.0.1:636/ ldapi:///
TLS_CACERT /etc/ldap/ssl/cacert.pem
TLS_REQCERT allow
SASL_MECH EXTERNAL  

따라서 이는 대부분 srv1-local slapd를 참조하지만 적용 가능한 한 srv1의 성공적인 수동 krb5kdc 시작에서 유효 항목에 의해 재정의됩니다.

.ldaprc  for root@srv1: 

URI             ldaps://host.domain.local:636
TLS_REQCERT     demand
SASL_MECH       EXTERNAL
TLS_CACERT      /root/secret/cacert.pem
TLS_CERT        /root/secret/root.srv1.domain.local-cert.pem
TLS_KEY         /root/secret/private/root.srv1.domain.local-key.pem

srv1에 있는 /etc/krb5kdc/kdc.conf의 dbmodules 섹션에서

[dbmodules]
    LDAP = {
        db_library = kldap
    ldap_kdc_sasl_mech = EXTERNAL
    ldap_kdc_dn = cn=krb5kdc,dc=rc,dc=domain,dc=local
    ldap_kadmind_dn = cn=kadmind,dc=rc,dc=domain,dc=local
    ldap_service_password_file = /etc/krb5kdc/ldap_stash
    ldap_kerberos_container_dn = cn=realm,dc=rc,dc=domain,dc=local
    #ldap_servers = ldap://host.domain.local:389
    ldap_servers = ldaps://host.domain.local:636
    }


root@srv1:~# ldapwhoami

수확량

SASL/EXTERNAL authentication started
SASL username: cn=root.srv1.domain.local,ou=...
SASL SSF: 0
dn:cn=admin,cn=config

그리고

root@srv1:~# ldapsearch -b "" -s base -LLL supportedSASLMechanisms

수확량

SASL/EXTERNAL authentication started
SASL username: cn=root.srv1.domain.local,ou=...
SASL SSF: 0
dn:
supportedSASLMechanisms: EXTERNAL

srv1은 amd64 Debian 8 "jessie"로 실행됩니다.

krb5-kdc-ldap     1.12.1+dfsg-19 
ldap-utils        2.4.40+dfsg-1+deb8u1
libaprutil1-ldap  1.5.4-1
libkldap4         4:4.14.2-2+b1
libldap-2.4-2     2.4.40+dfsg-1+deb8u1

추가 KDC 구성을 위한 Debian 규격 지점은 /etc/default/krb5-kdc입니다:

# [...]
DAEMON_ARGS="-r RC.DOMAIN.LOCAL"
# LDAPNOINIT=1
# LDAPRC=.ldaprc
# LDAPTLS_REQCERT=demand
# #LDAPSASL_SECPROPS   none
#LDAPSASL_MECH=EXTERNAL
#LDAPTLS_CACERT=/root/secret/cacert.pem
#LDAPTLS_CERT=/root/secret/root.srv1.domain.local-cert.pem
#LDAPTLS_KEY=/root/secret/private/root.srv1.domain.local-key.pem

여기에서 볼 수 있듯이 KDC 시작 스크립트에 적합한 TLS 환경을 수동으로 다시 구축하려고 시도했지만 아직 소용이 없습니다.

그렇다면 KDC가 대화형 루트 셸에서는 완벽하게 작동하지만 init 스크립트에서는 실패하는 이유는 무엇이며 후자에 대해서는 어떻게 해야 할까요?

답변1

OpenLDAP 지원 KDC에는 CA 인증서가 필요한 것 같습니다.

안에유효한SSL 인증서 디렉토리,

서버의 키와 인증서도 찾을 수 있는 곳(예: /etc/ssl내 srv1 상자); 예를 들어 TLS_CACERT 항목을 변경하는 경우

/etc/ldap/ldap.conf

에게

#[...]
TLS_CACERT  /etc/ssl/certs/cacert.pem
#[...]

init 스크립트가 작동하도록 만들었습니다.

이것이 효과가 있는 유일한 측정값은 아닙니다. 예를 들어 시도해 볼 수도 있고 설정할 수도 있습니다.

[dbmodules]
    LDAP = {
        # [...]
        ldap_cert_path = ...
        # [...]
    }

(테스트 되지 /etc/krb5kdc/kdc.conf않음) 또는 추가

LDAPTLS_CACERT=/etc/ssl/certs/cacert.pem

데비안 /etc/default/krb5-kdc(테스트됨)에.

관련 정보