FreeIPA login failed unknown reason

Просто записка для памяти. Внезапно (для меня) FreeIPA отказалась пускать к себе в веб-админку. При этом в консоли симптомы следующие:

# ipa ping
ipa: ERROR: did not receive Kerberos credentials

В логах проскакивало

[Fri Oct 30 21:21:02.328320 2020] [auth_gssapi:error] [pid 31560] [client x.x.x.x:43956] NO AUTH DATA Client did not send any authentication headers, referer: https://servername/ipa/ui/

Стало понятно, что проблема в GSS. Включение дебага в gssproxy (/etc/gssproxy/gssproxy.conf) дало следующее:

Oct 30 12:28:14 servername gssproxy[4702]: [CID 13][2020/10/30 09:28:14]: gp_rpc_execute: executing 6 (GSSX_ACQUIRE_CRED) for service "ipa-httpd", euid: 48,socket: (null)
Oct 30 12:28:14 servername gssproxy[4702]: GSSX_ARG_ACQUIRE_CRED( call_ctx: { "" [  ] } input_cred_handle:  add_cred: 0 desired_name:  time_req: 4294967295 desired_mechs: { { 1 2 840 113554 1 2 2 } } cred_usage: BOTH initiator_time_req: 0 acceptor_time_req: 0 )
Oct 30 12:28:14 servername gssproxy[4702]: gssproxy[4703]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure.  Minor code may provide more information, Preauthentication failed
Oct 30 12:28:14 servername gssproxy[4702]: GSSX_RES_ACQUIRE_CRED( status: { 851968 { 1 2 840 113554 1 2 2 } 2529638936 "Unspecified GSS failure.  Minor code may provide more information" "Preauthentication failed" [  ] } output_cred_handle:  )

Простая подмена ключей ничего не давала. Позже выяснилось, что это бага в gssproxy. Поэтому требовалось тормознуть всё

kinit
systemctl stop gssproxy.service
ipa-getkeytab -p HTTP/SERVERNAME@REALM -k /var/lib/ipa/gssproxy/http.keytab
Keytab successfully retrieved and stored in: /var/lib/ipa/gssproxy/http.keytab
systemctl start gssproxy.service

Не забудьте заменить SERVERNAME и REALM на свои.

Ну и результат:

# ipa ping
-------------------------------------------
IPA server version 4.6.6. API version 2.231
-------------------------------------------

Копируем firewall из редхатов

Если взять и поставить любую Ubuntu, то по умолчанию в ней отсутствуют какие-либо правила фаирволла. Ну или мне так везет. Между тем, в centos и прочих fedora’х по умолчанию стоит правило “всех выпускаем, никого не впускаем, только ssh”

В принципе, все оказалось довольно просто. Надо вот эти вот строчки скормить из-под root’a.

ufw disable
echo y | ufw reset
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
echo y | ufw enable

Ускоряем повторные соединения в ssh

Каждый раз, когда я по ssh соединяюсь с удаленным хостом, он проверяет ключи и прочие параметры. И не важно, что я только что был на этом хосте с соседнего терминала этой машины. Каждая такая проверка занимает немного времени, но занимает.

Добавляем следующие строки в .ssh/config

Host *
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p.socket
    ControlPersist 30m

Путь может быть любым, но рекомендую выбирать только доступный вам. %r , %h, %p – это пользователь, хост и порт соответственно.