Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

11.2. Kerberos KDC 구성

먼저 마스터 KDC를 설치한 다음 마스터가 설정된 후 필요한 보조 서버를 설치합니다.
중요
Kerberos KDC를 수동으로 설정하는 것은 권장되지 않습니다. Red Hat Enterprise Linux 환경에 Kerberos를 도입하는 권장 방법은 ID 관리 기능을 사용하는 것입니다.

11.2.1. 마스터 KDC 서버 구성

중요
KDC 시스템은 전용 머신이어야 합니다. 이 시스템은 매우 안전해야 합니다. 가능한 경우 KDC 이외의 서비스를 실행해서는 안 됩니다.
  1. KDC에 필요한 패키지를 설치합니다.
    [root@server ~]# yum install krb5-server krb5-libs krb5-workstation
  2. 영역 이름 및 domain-to-realm 매핑을 반영하도록 /etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf 구성 파일을 편집합니다. 예를 들어 다음과 같습니다.
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = EXAMPLE.COM
     dns_lookup_realm = false
     dns_lookup_kdc = false
     ticket_lifetime = 24h
     renew_lifetime = 7d
     forwardable = true
     allow_weak_crypto = true
    
    [realms]
      EXAMPLE.COM = {
      kdc = kdc.example.com.:88
      admin_server = kdc.example.com
      default_domain = example.com
     }
    
    [domain_realm]
     .example.com = EXAMPLE.COM
     example.com = EXAMPLE.COM
    EXAMPLE.COM 및 example. com 의 인스턴스를 올바른 도메인 이름으로 교체하여 간단한 영역을 생성할 수 있습니다. 올바른 형식으로 대문자 및 소문자를 유지하고 KDC를 kerberos.example.com 에서 Kerberos 서버의 이름으로 변경하여 만들 수 있습니다. 관례적으로 모든 영역 이름은 대문자이며 모든 DNS 호스트 이름과 도메인 이름은 소문자가 됩니다. 이러한 구성 파일의 도움말 페이지에는 파일 형식에 대한 전체 세부 정보가 있습니다.
  3. kdb5_util 유틸리티를 사용하여 데이터베이스를 생성합니다.
    [root@server ~]# kdb5_util create -s
    create 명령은 Kerberos 영역의 키를 저장하는 데이터베이스를 생성합니다. -s 인수는 마스터 서버 키가 저장되는 stash 파일을 생성합니다. 키를 읽을 stash 파일이 없는 경우 Kerberos 서버(krb5kdc)는 시작할 때마다 마스터 서버 암호(키를 다시 생성하는 데 사용할 수 있음)를 묻는 메시지를 표시합니다.
  4. /var/kerberos/krb5kdc/kadm5.acl 파일을 편집합니다. 이 파일은 kadmind 에서 Kerberos 데이터베이스에 대한 관리 액세스 권한과 해당 액세스 수준을 결정하는 데 사용됩니다. 예를 들어 다음과 같습니다.
    */admin@EXAMPLE.COM  *
    대부분의 사용자는 데이터베이스에 단일 주체(예: joe@EXAMPLE.COM)가 NULL 또는 비어 있는 인스턴스로 표시됩니다 . 이 구성에서 admin 인스턴스(예: joe/admin@EXAMPLE.COM)가 있는 두 번째 주체가 있는 사용자는 영역의 Kerberos 데이터베이스에 대한 전체 관리 제어를 실행할 수 있습니다.
    서버에서 kadmind 를 시작한 후 모든 사용자는 영역의 모든 클라이언트 또는 서버에서 kadmin 을 실행하여 서비스에 액세스할 수 있습니다. 그러나 kadm5.acl 파일에 나열된 사용자만 고유한 암호를 변경하는 것을 제외하고 어떠한 방식으로든 데이터베이스를 수정할 수 있습니다.
    참고
    kadmin 유틸리티는 네트워크를 통해 kadmind 서버와 통신하며 Kerberos를 사용하여 인증을 처리합니다. 결과적으로 첫 번째 주체는 이미 네트워크를 통해 서버에 연결하여 관리해야 합니다. kadmin.local 명령을 사용하여 첫 번째 주체를 생성합니다. 이 명령은 특히 KDC와 동일한 호스트에서 사용하도록 설계되었으며 인증에 Kerberos를 사용하지 않습니다.
  5. KDC 터미널에서 kadmin.local 을 사용하여 첫 번째 주체를 생성합니다.
    [root@server ~]# kadmin.local -q "addprinc username/admin"
  6. 다음 명령을 사용하여 Kerberos를 시작합니다.
    [root@server ~]# systemctl start krb5kdc.service
    [root@server ~]# systemctl start kadmin.service
  7. kadmin. kadmin 및 kadmin.local에서 addprinc 명령을 사용하여 사용자의 주체를 추가합니다. kadmin.local 은 KDC에 대한 명령줄 인터페이스입니다. 따라서 addprinc 와 같은 많은 명령을 kadmin 프로그램을 시작한 후 사용할 수 있습니다. 자세한 내용은 kadmin 도움말 페이지를 참조하십시오.
  8. KDC에서 티켓을 발행하고 있는지 확인합니다. 먼저 kinit 를 실행하여 티켓을 가져와서 인증 정보 캐시 파일에 저장합니다. 다음으로 klist 를 사용하여 캐시의 인증 정보 목록을 보고 kdestroy 를 사용하여 포함된 캐시 및 인증 정보를 삭제합니다.
    참고
    기본적으로 kinit 는 Kerberos 서버가 아닌 동일한 시스템 로그인 사용자 이름을 사용하여 인증을 시도합니다. 해당 사용자 이름이 Kerberos 데이터베이스의 주체에 해당하지 않으면 kinit 에서 오류 메시지를 발행합니다. 이 경우 명령줄에서 인수로 올바른 주체 이름을 kinit 에 제공합니다.
    kinit principal

11.2.2. 보조 KDC 설정

지정된 영역에 대한 KDC가 여러 개 있는 경우 하나의 KDC( 마스터 KDC)는 realm 데이터베이스의 쓰기 가능한 복사본을 유지하고 kadmind 를 실행합니다. 마스터 KDC는 영역의 관리 서버이기도 합니다. 추가 보조 KDC는 데이터베이스의 읽기 전용 복사본을 유지하고 kpropd 를 실행합니다.
마스터 및 슬레이브 전파 절차에서는 데이터베이스를 임시 덤프 파일로 덤프한 후 해당 파일을 각 슬레이브로 전송하여 이전에 수신한 읽기 전용 복사본을 덤프 파일 내용으로 덮어씁니다.
보조 KDC를 설정하려면 다음을 수행합니다.
  1. KDC에 필요한 패키지를 설치합니다.
    [root@slavekdc ~]# yum install krb5-server krb5-libs krb5-workstation
  2. 마스터 KDC의 krb5.confkdc.conf 파일을 보조 KDC에 복사합니다.
  3. 마스터 KDC의 루트 쉘에서 kadmin.local 을 시작합니다.
    1. kadmin.local add_principal 명령을 사용하여 master KDC의 호스트 서비스에 대한 새 항목을 생성합니다.
      [root@masterkdc ~]# kadmin.local -r EXAMPLE.COM
       Authenticating as principal root/admin@EXAMPLE.COM with password.
      kadmin: add_principal -randkey host/masterkdc.example.com
      Principal "host/masterkdc.example.com@EXAMPLE.COM" created.
      kadmin: ktadd host/masterkdc.example.com
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5.keytab.
      kadmin: quit
    2. kadmin.local ktadd 명령을 사용하여 서비스의 임의의 키를 설정하고 임의의 키를 마스터의 기본 키탭 파일에 저장합니다.
      참고
      이 키는 kprop 명령에서 보조 서버를 인증하는 데 사용됩니다. 설치하는 보조 KDC 서버 수에 관계없이 한 번만 실행하면 됩니다.
  4. 보조 KDC의 루트 쉘에서 kadmin 을 시작합니다.
    1. kadmin.local add_principal 명령을 사용하여 보조 KDC의 호스트 서비스에 대한 새 항목을 생성합니다.
      [root@slavekdc ~]# kadmin -p jsmith/admin@EXAMPLE.COM -r EXAMPLE.COM
      Authenticating as principal jsmith/admin@EXAMPLE.COM with password.
      Password for jsmith/admin@EXAMPLE.COM:
      kadmin: add_principal -randkey host/slavekdc.example.com
      Principal "host/slavekdc.example.com@EXAMPLE.COM" created.
      kadmin: ktadd host/slavekdc.example.com@EXAMPLE.COM
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5.keytab.
      kadmin: quit
    2. kadmin.local ktadd 명령을 사용하여 서비스의 임의의 키를 설정하고 보조 KDC 서버의 기본 키탭 파일에 임의의 키를 저장합니다. 이 키는 클라이언트를 인증할 때 kpropd 서비스에서 사용합니다.
  5. 서비스 키를 사용하면 보조 KDC에서 연결하려는 클라이언트를 인증할 수 있었습니다. 분명히 모든 잠재적인 클라이언트가 새 영역 데이터베이스를 kprop 서비스에 제공할 수 있어야 하는 것은 아닙니다. 액세스를 제한하기 위해 보조 KDC의 kprop 서비스는 사용자 이름이 /var/kerberos/krb5kdc/kpropd.acl 에 나열된 클라이언트의 업데이트만 허용합니다.
    마스터 KDC의 호스트 서비스 이름을 해당 파일에 추가합니다.
    [root@slavekdc ~]# echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl
  6. 보조 KDC에서 데이터베이스 복사본을 가져오면 이를 암호화하는 데 사용된 마스터 키도 필요합니다. KDC 데이터베이스의 마스터 키가 마스터 KDC의 stash 파일에 저장된 경우(일반적으로 /var/kerberos/krb5kdc/.k5.REALM라고도 함) 사용 가능한 보안 방법을 사용하여 보조 KDC에 복사하거나 kdb5_util create -s 를 실행하여 보조 KDC에 dummy 데이터베이스와 동일한 stash 파일을 생성합니다. 더미 데이터베이스는 첫 번째 성공적인 데이터베이스 전파로 덮어씁니다.
  7. 보조 KDC의 방화벽을 통해 마스터 KDC가 포트 754(krb5_prop)의 TCP를 사용하여 연결할 수 있는지 확인하고 kprop 서비스를 시작합니다.
  8. kadmin 서비스가 비활성화되어 있는지 확인합니다.
  9. kprop 명령이 읽을 기본 데이터 파일에 master KDC의 realm 데이터베이스를 덤프하여 수동 데이터베이스 전파 테스트를 수행합니다(/var/kerberos/krb5kdc/slave_datatrans).
    [root@masterkdc ~]# kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
  10. kprop 명령을 사용하여 콘텐츠를 보조 KDC로 전송합니다.
    [root@masterkdc ~]# kprop slavekdc.example.com
  11. kinit 를 사용하여 클라이언트 시스템이 KDC에서 초기 자격 증명을 올바르게 가져올 수 있는지 확인합니다.
    클라이언트의 /etc/krb5.conf 는 KDC 목록에 있는 보조 KDC만 나열해야 합니다.
    [realms]
      EXAMPLE.COM = {
      kdc = slavekdc.example.com.:88
      admin_server = kdc.example.com
      default_domain = example.com
     }
  12. realm 데이터베이스를 덤프하고 kprop 명령을 실행하여 데이터베이스를 차례로 각 보조 KDC로 전송하는 스크립트를 생성하고 주기적으로 스크립트를 실행하도록 cron 서비스를 구성합니다.

11.2.3. Kerberos 키 배포 센터 프록시

일부 관리자는 배포에 액세스할 수 없는 기본 Kerberos 포트를 사용하도록 선택할 수 있습니다. 사용자, 호스트 및 서비스에서 Kerberos 자격 증명을 가져올 수 있도록 HTTPS 서비스를 HTTPS 포트 443을 통해 Kerberos와 통신하는 프록시로 사용할 수 있습니다.
IdM(Identity Management)에서 Kerberos KMS(Key Distribution Center Proxy )는 이 기능을 제공합니다.

KKDCP 서버

IdM 서버에서 KKDCP는 기본적으로 활성화되어 있습니다. 속성 및 값 쌍 ipaConfigString=kdcProxyEnabled 가 디렉터리에 있는 경우 Apache 웹 서버가 시작될 때마다 KKDCP가 자동으로 활성화됩니다. 이 경우 심볼릭 링크 /etc/httpd/conf.d/ipa-kdc-proxy.conf 가 생성됩니다. 따라서 심볼릭 링크가 있는지 확인하여 IdM 서버에서 KKDCP가 활성화되어 있는지 확인할 수 있습니다.
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Aug 15 09:37 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf
자세한 내용은 아래 서버 구성 예제를 참조하십시오.

예 11.1. KKDCP 서버 구성 I

다음 예제 구성을 사용하면 여러 Kerberos 서버가 사용되는 IdM KKDCP와 Active Directory 영역 간의 전송 프로토콜로 TCP를 사용할 수 있습니다.
  1. /etc/ipa/kdcproxy/kdcproxy.conf 파일에서 [global] 섹션의 use_dns 매개변수를 false 로 설정합니다.
    [global]
    use_dns = false
    
  2. 프록시된 영역 정보를 /etc/ipa/kdcproxy/kdcproxy.conf 파일에 넣습니다. 프록시가 있는 [AD.EXAMPLE.COM] 영역의 경우 다음과 같이 영역 구성 매개변수를 나열합니다.
    [AD.EXAMPLE.COM]
    kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88
    kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
    
    중요
    realm 구성 매개 변수는 특정 옵션을 여러 번 지정할 수 있는 /etc/krb5.confkdc.conf 와 달리 공백으로 구분된 여러 서버를 나열해야 합니다.
  3. IdM 서비스를 다시 시작하십시오.
    # ipactl restart

예 11.2. KKDCP 서버 II 구성

이 예제 서버 구성은 DNS 서비스 레코드를 사용하여 통신할 AD 서버를 찾습니다.
  1. /etc/ipa/kdcproxy/kdcproxy.conf 파일에서 [global] 섹션에서 use_dns 매개변수를 true 로 설정합니다.
    [global]
    configs = mit
    use_dns = true
    
    configs 매개변수를 사용하면 다른 구성 모듈을 로드할 수 있습니다. 이 경우 구성은 MIT libkrb5 라이브러리에서 읽습니다.
  2. 선택 사항: DNS 서비스 레코드를 사용하지 않으려면 명시적 AD 서버를 /etc/krb5.conf 파일의 [realms] 섹션에 추가합니다. 프록시가 있는 영역이 AD.EXAMPLE.COM 이면 다음을 추가합니다.
    [realms]
    AD.EXAMPLE.COM = {
        kdc = ad-server.ad.example.com
        kpasswd_server = ad-server.ad.example.com
    }
    
  3. IdM 서비스를 다시 시작하십시오.
    # ipactl restart

KKDCP Client

클라이언트 시스템은 /etc/krb5.conf 파일을 통해 KDC 프록시를 가리킵니다. AD 서버에 연결하려면 다음 절차를 따르십시오.
  1. 클라이언트에서 /etc/krb5.conf 파일을 열고 AD 영역의 이름을 [realms] 섹션에 추가합니다.
    [realms]
    AD.EXAMPLE.COM {
        kdc = https://ipa-server.example.com/KdcProxy
        kdc = https://ipa-server2.example.com/KdcProxy
        kpasswd_server = https://ipa-server.example.com/KdcProxy
        kpasswd_server = https://ipa-server2.example.com/KdcProxy
    }
    
  2. /etc/sssd/sssd.conf 파일을 열고 krb5_use_kdcinfo = False 행을 IdM 도메인 섹션에 추가합니다.
    [domain/example.com]
    krb5_use_kdcinfo = False
    
  3. SSSD 서비스를 다시 시작하십시오.
    # systemctl restart sssd.service

추가 리소스