Search

Kerberos: ktutil & keytab

Tags
unix
kerberos
ktutil
kinit
keytab
realm
Created
2024/05/01 14:13
Created time
2024/05/01 05:13
category
unix

개요

MacOS에는 이미 kerberos 라이브러리가 설치 되어 있고, 관련 여러 명령어들을 실행 가능
kinit 바이너리를 이용하여 /etc/krb5.conf에 설정되어 있는 realm으로 접속 가능
kerberos에서 사용되는 몇 가지 개념을 정리하고, kinit 이용 시 표준 입력 없이 안전하게 keytab을 이용하여 편리한 인증 방법을 탐색

keytab 생성

kerberos로 인증 시 평문 암호를 그대로 이용하는 것이 아니라, 사전에 설치되어 있는 ktutil을 이용하여 AES로 암호화된 keytab을 만들 수 있음
** 이전에는 아래와 같이 평문 암호를 그대로 이용했음
echo "${PASSWORD}" | kinit --password-file=STDIN ${USER}
Bash
복사

MacOS

MacOS에서는 아래 명령어를 이용하여 keytab 파일을 만들 수 있음
ktutil -k ${FILENAME}.keytab add -p ${USER}@${REALM} -e aes256-cts-hmac-sha1-96 -V 1
Bash
복사
-k : 키탭 파일
-p : Principal
-e : 암호화 타입
-V : 키 버전 지정

Linux

리눅스 상에서 keytab이 필요할 수 있는데 이 때는 아래 명령어를 이용하고, cli 형태의 입력창이 열리면 추가 명령어들을 기입
# 먼저 입력 ktutil # principal 생성 (addentry == addent) addentry -password -p ${USER}@${REALM} -k 1 -e aes256-cts-hmac-sha1-96 # principal을 keytab에 작성 (write_kt == wkt) write_kt ${FILENAME}.keytab # cli 종료 (quit == q) quit
Bash
복사

설정 파일

kerberos 설정 파일은 /etc/krb5.conf에 위치해있음
별도의 keytab파일을 지정하지 않으면, /etc/krb5.keytab을 이용하게 되어 있음

기본 키탭 지정

기본으로 사용되는 키탭의 지정 방법은 2가지로 나뉨

Shell Profile

기본 키탭 파일 경로를 KRB5_KTNAME으로 지정하면, kinit -k 명령어로 키탭을 이용한다고 명시했을 떄 자동으로 해당 경로를 이용
~/.bash_profile, ~/.bashrc, ~/.zshrc 등 자신이 사용하는 쉘의 프로필을 열어서 아래 구문을 추가
export KRB5_KTNAME=${KT_PATH}
Bash
복사

디렉티브 작성

쉘 프로필을 이용하는 방식은 이용하고 있는 쉘에 따라서 인증이 안 될 수 있기 때문에, 쉘 종속성을 떼어내기 위해 디렉티브를 이용할 수 있음
/etc/krb5.conf는 kerberos의 설정 파일로, default_keytab_name 을 이용
[libdefaults] default_keytab_name=FILE:${ABSOLUTE_PATH}
Bash
복사

기타 디렉티브

[libdefaults]

kerberos 라이브러리에서 사용되는 기본 설정

[realms]

kerberos를 적용하려는 대상을 realm (영역)이라고 지칭
여기서 영역은 ${USER}@${REALM}에서의 REALM을 의미
예를 들어 JSEO.COM이라는 realm이 있다면 아래와 같이 표현 가능
[realms] JSEO.COM = { kdc = ${KDC_URL} admin_server = ${ADMIN_URL} kpasswd_server = ${KPASSWD_URL} }
Bash
복사

[domain_realm]

kerberos를 이용하면서 domain_realm에 기재된 도메인 이름 혹은 호스트 이름을 사용한다면, 이에 해당되는 영역을 이용할 수 있도록 변환을 정의
예를 들어 .jseo.io와 같은 형태의 도메인이 들어올 때, JSEO.COM 영역을 사용하도록 만든다면 아래와 같이 지정
[domain_realm] .jseo.io = JSEO.COM
Bash
복사