DEV/ETC

Kerberos

SBP 2025. 5. 15. 08:40
Linux Kerberos 정보

Linux Kerberos 정보

Kerberos(케르베로스)는 안전하지 않은 네트워크 환경에서 강력한 인증을 제공하기 위해 설계된 네트워크 인증 프로토콜입니다. 클라이언트와 서버가 서로의 신원을 안전하게 확인할 수 있도록 신뢰할 수 있는 제3자(Key Distribution Center, KDC)를 사용합니다. Linux 시스템은 Kerberos 환경에서 클라이언트 또는 서버(KDC) 역할을 할 수 있습니다.

Kerberos 동작 방식 (간략히)

Kerberos는 티켓(Ticket) 기반의 인증 시스템입니다. 기본적인 흐름은 다음과 같습니다.

  1. 인증 서비스 (Authentication Service, AS):
    클라이언트가 사용자 이름/비밀번호로 KDC의 AS에 자신을 인증합니다. 성공하면 AS는 클라이언트에게 TGT(Ticket-Granting Ticket)를 발급해 줍니다. 이 TGT는 암호화되어 있습니다.
  2. 티켓 부여 서비스 (Ticket-Granting Service, TGS):
    클라이언트는 서비스(예: SSH 서버, 웹 서비스)에 접근하기 위해 TGT를 KDC의 TGS에 제시합니다. TGS는 TGT가 유효한지 확인한 후, 클라이언트와 해당 서비스 간의 통신에 사용할 서비스 티켓(Service Ticket)을 발급해 줍니다. 이 과정에서 클라이언트는 비밀번호를 다시 전송하지 않습니다.
  3. 서비스 접근:
    클라이언트는 발급받은 서비스 티켓을 사용하여 원하는 서비스(애플리케이션 서버)에 접근합니다. 서비스는 KDC와 공유한 비밀 키를 사용하여 티켓을 확인하고 클라이언트의 접속을 허용합니다.

이 과정에서 클라이언트의 비밀번호는 최초 AS에 인증할 때만 사용되며, 이후에는 TGT와 서비스 티켓을 사용하여 인증이 이루어지므로 보안성이 높습니다.

Linux에서 Kerberos 활용

Linux 시스템은 Kerberos 클라이언트 또는 서버로 구성될 수 있습니다.

1. Linux를 Kerberos 클라이언트로 설정

Linux 시스템이 기존에 구축된 Kerberos Realm에 인증하여 서비스를 이용하도록 설정하는 방법입니다.

  1. 필수 패키지 설치:
    Kerberos 클라이언트 기능을 사용하기 위한 패키지를 설치합니다. 배포판에 따라 패키지 이름이 다를 수 있습니다.
    # Debian/Ubuntu 계열
    sudo apt update
    sudo apt install krb5-user
    
    # RHEL/CentOS/AlmaLinux/Rocky Linux 계열
    sudo yum install krb5-workstation krb5-libs
    # 또는 dnf 사용 시
    # sudo dnf install krb5-workstation krb5-libs
  2. Kerberos 설정 파일 구성 (/etc/krb5.conf):
    Kerberos 클라이언트의 핵심 설정 파일입니다. Kerberos Realm 정보, KDC 위치, 도메인-Realm 매핑 등을 설정합니다.
    [libdefaults]
        default_realm = YOUR.REALM.COM  # 기본 Realm 이름
        dns_lookup_realm = true
        dns_lookup_kdc = true
        ticket_lifetime = 24h         # 티켓 유효 시간
        renew_lifetime = 7d           # 티켓 갱신 가능 시간
        forwardable = true
    
    [realms]
        YOUR.REALM.COM = {            # Realm 이름 정의
            kdc = kdc1.your.realm.com # KDC 서버 주소 (여러 개 지정 가능)
            kdc = kdc2.your.realm.com
            admin_server = kdc1.your.realm.com # 관리 서버 주소
        }
    
    [domain_realm]
        .your.realm.com = YOUR.REALM.COM # 도메인과 Realm 매핑
        your.realm.com = YOUR.REALM.COM
    *YOUR.REALM.COM, kdc1.your.realm.com 등은 실제 환경에 맞게 변경해야 합니다.*
  3. Kerberos 티켓 획득:
    설정 후 kinit 명령어를 사용하여 KDC로부터 초기 티켓(TGT)을 발급받습니다. 사용자 비밀번호를 입력하게 됩니다.
    kinit your_user_principal@YOUR.REALM.COM
    # 또는 default_realm이 설정되어 있으면 Realm 부분을 생략 가능
    kinit your_user_principal
  4. 획득한 티켓 확인:
    klist 명령어로 현재 가지고 있는 Kerberos 티켓 목록을 확인할 수 있습니다.
    klist
    유효한 TGT가 보인다면 Kerberos 인증 준비가 완료된 것입니다.
  5. Kerberos를 사용하는 서비스 이용:
    이제 SSH (GSSAPIAuthentication 설정 필요), NFS (krb5p 옵션 사용), HTTP 서비스 등 Kerberos 인증을 지원하는 서비스에 비밀번호 입력 없이(또는 Kerberos 티켓을 사용하여) 접근할 수 있습니다.
    # Kerberos 인증을 사용하는 SSH 서버 접속
    ssh your_user@kerberized_server.your.realm.com

2. Linux를 Kerberos 서버 (KDC)로 설정

Linux 시스템 자체를 Kerberos 인증 서비스를 제공하는 KDC(Key Distribution Center)로 구축할 수 있습니다. 이는 상대적으로 복잡한 과정이며, 소규모 환경이나 테스트 목적으로 사용되기도 합니다. 대규모 환경에서는 전용 Kerberos 서버나 통합 인증 시스템(예: Active Directory)을 KDC로 사용하는 경우가 많습니다.

  1. 필수 패키지 설치:
    KDC 기능을 위한 서버 패키지를 설치합니다.
    # Debian/Ubuntu 계열
    sudo apt update
    sudo apt install krb5-kdc krb5-admin-server
    
    # RHEL/CentOS/AlmaLinux/Rocky Linux 계열
    sudo yum install krb5-server krb5-kdc krb5-libs
    # 또는 dnf 사용 시
    # sudo dnf install krb5-server krb5-kdc krb5-libs
  2. KDC 설정 파일 구성 (/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf):
    Kerberos Realm 정보 및 KDC 관련 상세 설정을 구성합니다.
  3. Kerberos 데이터베이스 생성:
    KDC의 사용자(principal) 정보를 저장할 데이터베이스를 생성합니다.
    sudo kdb5_util create -s
  4. Kerberos 관리자 계정 추가:
    데이터베이스에 접근하고 관리할 관리자 principal을 추가합니다.
    sudo kadmin.local -q "addprinc admin/admin"
  5. KDC 서비스 시작:
    Kerberos KDC 서비스와 관리 서버 서비스를 시작하고 시스템 부팅 시 자동 실행되도록 설정합니다.
    sudo systemctl enable krb5-kdc krb5-admin-server
    sudo systemctl start krb5-kdc krb5-admin-server
    *(RHEL/CentOS 등 초기 버전은 kadmin 대신 kadmind 서비스 이름을 사용할 수 있습니다.)*
  6. 사용자/서비스 Principal 추가:
    kadmin 또는 kadmin.local 명령어를 사용하여 Kerberos Realm에서 사용할 사용자(user@YOUR.REALM.COM) 및 서비스(service/hostname@YOUR.REALM.COM) Principal을 추가하고 키탭(keytab) 파일을 생성합니다.
    # 사용자 Principal 추가
    sudo kadmin.local -q "addprinc -randkey testuser@YOUR.REALM.COM"
    
    # 서비스 Principal 추가 및 키탭 파일 생성 (예: SSH)
    sudo kadmin.local -q "addprinc -randkey host/your_server.your.realm.com@YOUR.REALM.COM"
    sudo kadmin.local -q "xst -k /etc/krb5.keytab host/your_server.your.realm.com@YOUR.REALM.COM"

핵심 용어

  • Realm: Kerberos 인증 서비스가 적용되는 관리 도메인 또는 영역입니다. (예: YOUR.REALM.COM)
  • Principal: Kerberos Realm 내에서 인증될 수 있는 개체(사용자 또는 서비스)의 고유 이름입니다. (예: user@YOUR.REALM.COM, service/hostname@YOUR.REALM.COM)
  • KDC (Key Distribution Center): Kerberos 인증의 중앙 서버 역할을 합니다. AS(Authentication Service)와 TGS(Ticket-Granting Service)로 구성됩니다.
  • Ticket: 클라이언트가 서비스에 접근할 수 있음을 증명하는 암호화된 데이터 조각입니다. TGT(Ticket-Granting Ticket)와 Service Ticket이 있습니다.
  • Keytab: 서비스 Principal의 비밀 키 정보를 포함하는 파일로, 서비스가 KDC와 통신하여 자신을 인증할 때 사용됩니다. (주로 /etc/krb5.keytab)

Linux에서 Kerberos를 사용하면 중앙 집중식 인증 관리가 가능해지고, 네트워크 상에서 비밀번호 노출 위험을 줄여 보안을 강화할 수 있습니다. 특히 대규모 환경에서 여러 서버와 서비스의 인증을 통합하는 데 유용합니다.