ktutil 로 직접 만든 keytab 으로 kinit -kt 를 하면 Preauthentication failed 가 난다.
ktutil
ktutil: add_entry -password -p cdpadmin@HADOOP.COM -k 1 -e aes256-cts-hmac-sha1-96
ktutil: wkt /root/cdpadmin.keytab
ktutil: quit
먼저 비밀번호 자체가 맞는지 분리해서 확인한다. 이것이 되면 암호는 정상이고 keytab 쪽 문제다.
kinit cdpadmin@HADOOP.COM
klist
AES256 키는 password 와 salt 로 파생된다. ktutil add_entry -password 는 기본 salt(HADOOP.COMcdpadmin 형태) 를 쓰는데 KDC 가 다른 salt 로 등록했다면 같은 암호여도 키가 달라져 preauth 가 깨진다. FreeIPA 는 자체 salt 를 쓰므로 손으로 만든 keytab 은 거의 항상 이 문제에 걸린다.
그 밖에 -k 1 로 박은 KVNO 가 KDC 의 실제 KVNO(암호 변경 등으로 올라감) 와 다르거나, 해당 principal 에 aes256 키가 없는 enctype 불일치도 원인이 된다.
kinit admin
# 기본 동작 — 키를 새로 생성한다. 그 순간 기존 암호 로그인이 깨진다
ipa-getkeytab -s <ipa-server-fqdn> -p cdpadmin@HADOOP.COM -k /root/cdpadmin.keytab
# 기존 키를 그대로 가져온다(암호 유지). "Retrieve Keytabs" 권한이 필요하다
ipa-getkeytab -s <ipa-server-fqdn> -p cdpadmin@HADOOP.COM -k /root/cdpadmin.keytab -r
사람이 암호로도 쓰는 계정이라면 키를 리셋하지 말아야 하므로 -r 를 쓰거나, 아예 전용 서비스 principal 을 따로 만드는 것이 깔끔하다. 서비스 principal 은 service/hostname 형식이어야 하고 그 host 가 IPA 에 등록돼 있어야 한다.
kinit admin
ipa service-add cloudera/<host-fqdn>@HADOOP.COM
ipa-getkeytab -s <ipa-server-fqdn> -p cloudera/<host-fqdn>@HADOOP.COM -k /root/cloudera.keytab
klist -kt /root/cloudera.keytab
kinit -kt /root/cloudera.keytab cloudera/<host-fqdn>@HADOOP.COM
klist
FreeIPA 가 아니라 일반 MIT KDC 라면 kadmin.local 로 뽑는다. -norandkey 를 빼면 키가 새로 생성되면서 KVNO 가 올라가고 기존 암호 로그인이 깨진다. -norandkey 는 kadmin.local 에서만 동작한다.
kadmin.local -q "getprinc cdpadmin@HADOOP.COM" # kvno · enctype · salt 확인
kadmin.local -q "ktadd -k /root/cdpadmin.keytab -norandkey cdpadmin@HADOOP.COM"