Вопросы в конце
О моем окружении
Я пробовал в двух разных средах: (i) сервер Linux Ubuntu 16.04LTS, зарегистрированный в домене Active Directory (Microsoft), и (ii) сервер Linux Ubuntu 16.04LTS, зарегистрированный в сфере FreeIPA.
Бинарная версия Krb5:
$ strings libkrb5.so | grep BRAND
KRB5_BRAND: krb5-1.13.2-final 1.13.2 2015050
Что я люблю делать
Я пытаюсь использовать ксу команда для входа на текущий хост (authdemo4.addemo.it) как другой пользователь: kservice. Подробно я пытаюсь (i) получить сервисный билет для пользователя kservice для хозяина authdemo4.addemo.it, (ii) сохранить заявку в кеш-файл MIT / media / public / krb_kservice и (iii) предоставить этот билет ксу команда, чтобы войти как kservice.
это должно быть возможно
В ксу В документации MIT указано, что использование служебного билета из файла кеша возможно, процитируем:
В противном случае ksu ищет соответствующий билет Kerberos в исходном кэше. Билет может быть либо для конечного сервера, либо билет для выдачи билетов (TGT) для области целевого принципала. Если билет для конечного сервера уже находится в кеше, он расшифровывается и проверяется. Если его нет в кеше, но есть TGT, TGT используется для получения билета для конечного сервера. Затем билет конечного сервера проверяется.
Мои эксперименты и результаты
При использовании билета TGT Kerberos .. он работает как шарм:
$ kinit -c /media/public/krb_kservice kservice
Password for kservice@ADDEMO.IT:
$ ksu kservice -n kservice@ADDEMO.IT -c FILE:/media/public/krb_kservice
Authenticated kservice@ADDEMO.IT
Account kservice: authorization for kservice@ADDEMO.IT successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024
kservice@authdemo4:/home/userlab$
Это содержимое кеша, есть только TGT:
$ klist -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: kservice@ADDEMO.IT
Valid starting Expires Service principal
11/08/2017 11:44:07 11/08/2017 21:44:07 krbtgt/ADDEMO.IT@ADDEMO.IT
renew until 11/09/2017 11:44:03
При попытке использовать билет Kerberos конечного сервера (служебный билет) он терпит неудачу, ксу игнорирует кешированный билет и запрашивает пароль пользователя:
$ kinit -S HOST/authdemo4@ADDEMO.IT -c /media/public/krb_kservice kservice
Password for kservice@ADDEMO.IT:
$ ksu kservice -n kservice@ADDEMO.IT -c FILE:/media/public/krb_kservice
WARNING: Your password may be exposed if you enter it here and are logged in remotely using an unsecure (non-encrypted) channel.
Kerberos password for kservice@ADDEMO.IT: :
Обратите внимание, что я испробовал все эти принципы обслуживания: host/authdemo4.addemo.it@ADDEMO.IT, HOST/authdemo4.addemo.it@ADDEMO.IT, host/authdemo4@ADDEMO.IT, HOST/authdemo4@ADDEMO.IT
Это содержимое кеша, есть только сервисный тикет:
$ klist -f -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: kservice@ADDEMO.IT
Valid starting Expires Service principal
11/08/2017 13:51:05 11/08/2017 23:51:05 HOST/authdemo4@ADDEMO.IT
renew until 11/09/2017 13:51:02, Flags: FPRIA
Это проксируемый-пересылаемый-возобновляемый-начальный-предварительно аутентифицированный билет.
Вкратце: моя попытка с билетом службы конечного сервера не работает.
Я проверил с Wireshark ксу Kerberos запрашивает DC, чтобы найти отличия от запрошенного мной билета службы. Название сервиса такое же "хост / authdemo4", ксу добавляет канонизируемый флаг к билету и запрашивает билет в TGS, пока кинит отправляет запрос в AS :-(
Обновление с помощью команды kvno (не удалось)
Я тщательно изучил с Wireshark запрос / ответ TGS, выполняемый ксу и я выяснил, что правильный сервис: host/authdemo4@ADDEMO.IT
Я пробовал с квно чтобы вставить сервисный билет в кеш:
Вставьте TGT:
$ kinit kservice -c ./prova.cc
Password for kservice@ADDEMO.IT:
Вставьте сервисный талон:
$ kvno host/authdemo4@ADDEMO.IT -c ./prova.cc
host/authdemo4@ADDEMO.IT: kvno = 17
Проверить содержимое кеша:
$ klist -c ./prova.cc
Ticket cache: FILE:./prova.cc
Default principal: kservice@ADDEMO.IT
Valid starting Expires Service principal
11/09/2017 15:18:53 11/10/2017 01:18:53 krbtgt/ADDEMO.IT@ADDEMO.IT
renew until 11/10/2017 15:18:48
11/09/2017 15:19:07 11/10/2017 01:18:53 host/authdemo4@ADDEMO.IT
renew until 11/10/2017 15:18:48
Вызвать ksu:
$ ksu kservice -n kservice@ADDEMO.IT -c FILE:./prova.cc
Authenticated kservice@ADDEMO.IT
Account kservice: authorization for kservice@ADDEMO.IT successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024
Кажется, что это работает, НО он всегда игнорирует служебный билет и снова выступает с нуля запрос TGS для хоста / authdemo4. Я также проверил (с помощью Wireshark) различия между ответами ксу и квно запросы, -> I <- не замечаю никакой разницы (см. прикрепленное изображение): Я также пробовал использовать ксу более одного раза без очистки кеша, и запрос TGS каждый раз выполняется снова.
Вкратце: эта попытка с билетом службы конечного сервера не работает (билет службы всегда повторно запрашивается).
Вопросы
Они немного перекрываются :-)
С уважением
Ответы
Есть ли способ заполнить файл кэша Kerberos билетом службы, совместимым с ksu?
Нет, начиная с версии 1.13 ksu не использует кэшированные служебные билеты
Есть ли альтернативы команде kvno для выполнения запросов сервисных билетов в TGS?
Мои поиски не привело к альтернативам но предыдущий ответ сделал это гораздо менее важным для меня
Я делаю что-то неправильно? Есть подсказка?
НетВроде сработал правильно, проблема в измененном (не задокументированном) поведении ksu
Как вы думаете, это ошибка ksu? :-)
О ДА, это ошибка ksu или ошибка документации, разработчики изменили поведение, но забыли синхронизировать с документацией
Я отправил отчет об ошибке и получил обратную связь (спасибо разработчику ksu Грегу Хадсону за оперативную поддержку). Они заявляют, что предыдущее исправление изменило поведение ksu по сравнению с версией 1.13, и они не заметили / не обновили документацию.
Представленный отчет об ошибке: http://krbdev.mit.edu/rt/Ticket/Display.html?id=8619
Текущее поведение ksu не соответствует документации (о сервисном билете в кеше).
С версией ksu> = 1.13 то Билет службы конечного сервера не читается / не проверяется из файла кеша НО проверяется только кешированный TGT. Когда ksu вызывается, запрос билета службы к TGS выполняется для проверки кэшированного TGT.
На данный момент они все еще думают, что делать. Я рекомендовал восстановить задокументированное поведение, я обновлю этот вопрос в будущем с их окончательным решением.
ОБНОВИТЬ: Они ответили на запрос об ошибке и решили восстановить задокументированное поведение, но ksu
не является приоритетом в проекте Krb5, и они не могут гарантировать график работ.