Hue 의 KT_RENEWER 가 티켓 갱신에 실패한다. ccache 를 보면 원인이 바로 보인다.
klist -f -c /var/run/hue/hue_krb5_ccache
Flags: FIA 에 R(renewable) 이 없고 renew until 줄 자체가 없다. 티켓이 애초에 갱신 불가능한 상태로 발급된 것이다.
먼저 KDC 정책을 본다. MIT KDC 라면 kadmin.local 로, FreeIPA 라면 kadmin 이나 kdc.conf 를 직접 건드리지 말고 ipa 명령으로 확인한다. FreeIPA 가 KDC 를 관리하기 때문이다.
kinit admin
ipa krbtpolicy-show
# Max life: 86400
# Max renew: 604800
Max renew 가 0 이거나 없으면 정책이 원인이다. 글로벌 기본 정책을 바꾸고 KDC 를 재시작한다.
ipa krbtpolicy-mod --maxlife=86400 --maxrenew=604800
ipactl restart
FreeIPA 는 서비스 principal 에 대한 개별 티켓 정책을 허용하지 않으므로 서비스 principal 은 글로벌 기본 정책을 따른다. 즉 글로벌만 고치면 된다.
이 사례에서는 Max life 86400 · Max renew 604800 으로 정책이 충분했는데도 R 플래그가 없었다. 원인은 클라이언트였다. KT_RENEWER 가 부르는 kinit 에 -r 이 없으면 /etc/krb5.conf 의 기본값을 따르는데, [libdefaults] 에 renew_lifetime 이 없으면 renewable 을 아예 요청하지 않는다.
grep -iE "renew|renewable|ticket_lifetime" /etc/krb5.conf
ticket_lifetime 만 있고 renew_lifetime 이 없으면 그것이 원인이다.
cp /etc/krb5.conf /etc/krb5.conf.bak
sed -i '/ticket_lifetime = 24h/a\ renew_lifetime = 7d' /etc/krb5.conf
grep -A1 "ticket_lifetime" /etc/krb5.conf
[libdefaults]
ticket_lifetime = 24h
renew_lifetime = 7d
rm -f /tmp/test_renew_ccache
kinit -k -t <경로>/hue.keytab -c /tmp/test_renew_ccache hue/<fqdn>@REALM
klist -f -c /tmp/test_renew_ccache
kinit -R -c /tmp/test_renew_ccache
이번에는 Flags 에 R 이 들어가고 renew until 줄이 나와야 한다. kinit -R 가 조용히 끝나면 갱신도 정상이다.