This is an old revision of the document!
Всем привет!
Вот такой вопрос прозвучал в комментариях к этой статье, спасибо автору, а еще нам на предприятие пришло вот такое распоряжение:
IMG_1.png
Если бы мы уже использовали инфраструктуру Microsoft AD, мы бы подумали о миграции на Samba 4, но задача касалась только вводимых в эксплуатацию рабочих станций Linux и мы выбрали “ванильный” MIT Kerberos.
В двух словах про Kerberos, это протокол аутентификации, позволяющий использовать свой логин и пароль на любом компьютере, подключенном к kerberos сфере (входящем в домен, в терминах Microsoft). А кроме того, он реализует Технологию единого входа (Single Sign-On), что позволяет, например, предоставить “прозрачный” авторизованный доступ в Интернет через прокси сервер.
Итак, реализация:
Разворачиваем в сети kerberos сервер (Центр распределения ключей - Key distribution center - KDC). Очень важно правильно указать hostname системы и сделать соответствующие A и SRV записи в DNS
# hostnamectl set-hostname kdc.bmstu.ru # nslookup -q=SRV _kerberos._udp.bmstu.ru ... _kerberos._udp.bmstu.ru service = 1 0 88 kdc.bmstu.ru. ... kdc.bmstu.ru internet address = A.B.C.D
Так же, работа протокола kerberos требует синхронизации времени, с расхождением не более 5 минут
Устанавливаем программное обеспечение и инициализируем kerberos сферу (realm или домен, в терминах Microsoft)
kdc# apt install krb5-kdc krb5-admin-server kdc# krb5_newrealm ... kdc# service krb5-kdc restart
Добавляем учетные записи пользователей (в kerberos называются principal)
kdc# kadmin.local -q 'addprinc -pw somepassword1 ivanovii' kdc# kadmin.local -q 'addprinc -pw somepassword2 petrovpp' ...
Теперь можно подключать к kerberos сфере (вводить в домен) рабочие станции, например, таким способом и пользователи смогут работать на них используя свои логины и пароли.
Далее, разворачиваем прокси сервер для авторизованного доступа пользователей в Интернет (тоже, очень важно, указать корректный hostname и, соответствующую, A запись в DNS)
# hostnamectl set-hostname authproxy.bmstu.ru authproxy# apt install squid
Добавляем в kdc principal сервиса HTTP, работающего на authproxy (у нас он будет использоваться браузером для SSO аутентификации в squid, но так же может быть использован и для SSO аутентификации в web сервере, например, apache), выгружаем ключи, копируем их на authproxy
kdc# kadmin.local -q 'addprinc -randkey HTTP/authproxy.bmstu.ru' kdc# kadmin.local -q 'ktadd -k authproxyhttp.keytab HTTP/authproxy.bmstu.ru' kdc# scp authproxyhttp.keytab admin@authproxy:
Подключаем прокси сервер к kerberos сфере, копируем ключи в системный файл и предоставляем доступ к нему для сервиса squid
authproxy# apt install krb5-user authproxy# nano /etc/krb5.conf
[libdefaults] default_realm = CORP.RU
authproxy# ktutil
ktutil: rkt /home/admin/authproxyhttp.keytab ktutil: wkt /etc/krb5.keytab ktutil: exit
authproxy# chgrp proxy /etc/krb5.keytab authproxy# chmod 640 /etc/krb5.keytab
Настраиваем прокси сервис на использование kerberos аутентификации
authproxy# nano /etc/squid/conf.d/corp.conf
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -d acl authuser proxy_auth REQUIRED http_access allow authuser
authproxy# service squid restart
Для работы через proxy на рабочих станциях Linux достаточно установить переменные окружения:
linuxclientN# nano /etc/environment
Аналогично можно настроить “прозрачный” доступ соответствующих программ к сервисам SMTP, IMAP, LDAP, XMPP, CIFS и, даже, SSH:)
В следующей статье планирую рассказать как мы дополнили “Cамое простое решение для Kerberos” реализацией GPO на основе ansible-pull и GitLab
На этом все, спасибо, буду рад ответить на вопросы в комментариях