===== Подключение Debian GNU/Linux 9 (Stretch) к домену Active Directory с помощью SSSD/realmd и настройка PAM для аутентификации и авторизации sshd/Apache ===== {{:unix-linux:debian:stretch:pasted:20190625-091314.png }} Подробное описание процедуры присоединения компьютера с **Debian GNU**/**Linux** к домену **Active Directory** с помощью **SSSD** и **realmd** можно найти [[https://blog.it-kb.ru/2016/10/15/join-debian-gnu-linux-8-6-to-active-directory-domain-with-sssd-and-realmd-for-authentication-and-configure-ad-domain-security-group-authorization-for-sudo-and-ssh-with-putty-sso/|здесь]]. Рекомендуется предварительно ознакомится с этим материалом, а также с [[https://blog.it-kb.ru/2017/11/18/recommendations-for-configuring-sssd-in-debian-gnu-linux-about-dns-kerberos-and-active-directory-dc-search/|замечаниями по настройке SSSD в Debian GNU/Linux]]. Здесь приведён сокращённый план действий по присоединению **Debian GNU**/**Linux 9** (**Stretch**) к домену **Active Directory** с помощью **SSSD** и **realmd**. \\ ==== Подготовка ==== Обеспечиваем правильную работу **DNS**-клиента и обеспечиваем __синхронизацию времени__ с источниками, используемыми в **Active Directory** (подробности в ранее обозначенных ссылках). Эти моменты важны для правильной работы протокола **Kerberos**. Выполняем команду присвоения полного доменного имени в качестве имени хоста, так как по умолчанию в **Debian 9** в качестве **hostname** используется имя узла без доменной части. Это позволит избежать некоторых проблем при вводе компьютера в домен с помощью **realmd**:
# hostname KOM-SRV01.sub.holding.comДополнительно необходимо отредактировать файл ''/etc/hosts'' и указать там в качестве IP адреса хоста адрес одного из сетевых интерфейсов. То есть, строку вида:
# apt-get install realmd policykit-1 packagekit* Пакет **policykit-1** устанавливается для обхода ошибки ''realm: Couldn't discover realms: Not authorized to perform this action'' ([[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=856243|Bug 856243]]) * Пакет **packagekit** устанавливается для обхода ошибки ''realm: Couldn't join realm: Necessary packages are not installed...'' ([[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=856243|Bug 856243]]) Выполняем обнаружение информации о домене, которое должно отработать без ошибок:
# realm discover sub.holding.com --verboseНастраиваем информацию о компьютере, которая будет передана в каталог Active Directory при присоединении к домену.
# nano /etc/realmd.conf
# apt-get install sssd-tools sssd libnss-sss libpam-sss adcliВыполняем присоединение компьютера к домену Active Directory:
# realm join --verbose --user=adm-petya \ --user-principal="host/kom-srv01.sub.holding.com@SUB.HOLDING.COM" \ --computer-ou="OU=Linux Servers,OU=KOM,DC=sub,DC=holding,DC=com" \ kom-dc01.sub.holding.com\\ ==== Поддержка Kerberos ==== Устанавливаем клиентское ПО поддержки **Kerberos**:
# apt-get install krb5-userПроверяем наличие и содержимое **keytab**-файла. В нём, как минимум, должны быть записи типа ''host/*''
# klist -e -k -t /etc/krb5.keytabНастраиваем конфигурацию клиента Kerberos:
# nano -Y sh /etc/krb5.confПример настроенного файла:
# nano /etc/sssd/sssd.confПример настроенной конфигурации:
# ( service sssd stop ) && \ ( rm -f /var/lib/sss/db/* ) && ( rm -f /var/lib/sss/mc/* ) && \ ( service sssd start )Выполняем проверку возможности извлечения информации из каталога Active Directory. Получаем информацию о любой доменной группе безопасности:
# getent group kom-servers-admins@sub.holding.comПолучаем информацию о любом доменной пользователе:
# id adm-petya # getent passwd adm-petya\\ ==== PAM и домашний каталог ===== Предварительно рекомендуется ознакомится со статьёй [[https://blog.it-kb.ru/2017/03/12/restricting-access-rights-to-the-linux-system-and-its-services-sshd-and-apache-through-active-directory-domain-security-groups-using-sssd-and-pam-pam_listfile|Разграничение прав доступа к Linux-системе и её сервисам через доменные группы безопасности с помощью SSSD и PAM]], где более подробно описан смысл всех производимых далее настроек системы. Настраиваем базовую конфигурацию **PAM** Правим файл ''common-session'':
# nano -Y sh /etc/pam.d/common-sessionВ конец файла добавим строку, позволяющую создать домашний каталог в случае его отсутствия:
# nano -Y sh /etc/security/access-groups-to-login
# chown root:root /etc/security/access-groups-to-login # chmod 600 /etc/security/access-groups-to-loginОтредактируем модуль **PAM**, определяющий права доступа к консоли компьютера:
# nano -Y sh /etc/pam.d/loginВставляем перед директивой ''common-account ...'' ссылку на вызов авторизации через созданный нами файл (''access-groups-to-login'')
# tail -f /var/log/auth.log\\ ==== PAM и доступ к SSH ===== Отредактируем **PAM**-модуль, отвечающий за настроку авторизации при подключении через службу сервера **SSH**
# nano -Y sh /etc/pam.d/sshdВставляем перед директивой ''common-account ...'' ссылку на вызов авторизации через созданный нами файл (''access-groups-to-login'')
# tail -f /var/log/auth.log\\ ==== PAM и доступ к Apache ===== Пример создания собственного **PAM**-модуля для других служб, например, для организации доменной аутентфикации/авторизации в веб-сервере **Apache**: Создадим свой файл для перечисления учётных записей (доменных и локальных), которым будет разрешёно подключение к веб-серверу:
# nano -Y sh /etc/security/access-groups-to-web
# nano -Y sh /etc/pam.d/apache2
# chown root:root /etc/pam.d/apache2 # chmod 644 /etc/pam.d/apache2 # chown root:root /etc/security/access-groups-to-web # chmod 600 /etc/security/access-groups-to-web\\ ==== SSHD и PuTTy ===== Подробно про пример настройки сквозной проверки подлинности при использовании **PuTTY** читаем в статье [[https://blog.it-kb.ru/2014/07/06/single-sign-on-sso-server-connection-ubuntu-server-14-04-lts-via-ssh-using-putty-from-windows-based-active-directory/|SSO-подключение к серверу Ubuntu Server 14.04 LTS по протоколу SSH с помощью PuTTY с компьютера на базе Windows в домене Active Directory]] Включаем сквозную проверку подлинности для прозрачного подключения с PuTTY
# nano -Y sh /etc/ssh/sshd_configВключим опции:
# systemctl restart ssh\\ ==== SUDO ===== Разрешаем **sudo** для доменных учётных записей. Создадим отдельный файл для выдачи прав выполнять **sudo** доменным учётным записям:
# nano -Y sh /etc/sudoers.d/kom-srv-linux-adminsПример содержимого файла с одной доменной группой доступа, которой разрешено выполнять **sudo** без ограничений:
# chmod 0440 /etc/sudoers.d/kom-srv-linux-adminsВ некоторых ситуациях при вызове **sudo** в контексте доменного пользователя может возникать длительная задержка при первом запросе на ввод пароля. В этом случае можно попробовать воспользоваться включением опции [[https://blog.it-kb.ru/2024/03/14/sudo-is-slow-when-using-sssd|ignore_group_members]] в секции описания домена в конфигурационном файле ''sssd.conf'' \\ ==== Расширение keytab ===== В случае необходимости настроки **Kerberos** аутентификациии в домене Active Directory, возможно потребуется дополнительная настройка **keytab**-файла на Linux системе. Пример команд добавления **SPN**-записи типа ''HTTP/*'' (для поддержки доменной аутентификации Kerberos на веб-сервере) Подключаемся к keytab-файлу и получаем информацию о SPN-запиях в нём и текущем номере **kvno** (нужен для ключа ''-k'')
# ktutil
read_kt /etc/krb5.keytab list -k -eДобавляем записи поддержки Kerberos для веб-сервера (при запросе хешей указываем те же, что указаны для уже существующих SPN-записей)
add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e aes256-cts-hmac-sha1-96 add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e aes128-cts-hmac-sha1-96 add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e des3-cbc-sha1 add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e arcfour-hmac add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e des-cbc-md5 add_entry -key -p HTTP/kom-srv01.sub.holding.com@sub.holding.com -k 3 -e des-cbc-crcПеречиваем результат и записываем изменения в keytab-файл:
list -k -e write_kt /etc/krb5.keytab exitПроверяем результат:
# klist -e -k -t /etc/krb5.keytabПроверяем есть ли нужная SPN-запись в домене (на Windows-машине, присоединённой к домену)
setspn -L kom-srv01Если записи нет, можем добавить (требуются права уровня доменный администратор)
setspn -A HTTP/kom-srv01.sub.holding.com sub.holding.com\kom-srv01\\ ==== Apache и PAM с Kerberos ===== Более подробно описанный пример настройки можно найти в статье [[https://blog.it-kb.ru/2016/10/26/configuring-basic-and-kerberos-authentication-with-sso-single-sign-on-for-the-apache-web-server-using-sssd-and-pam-service-for-authorization/|Настройка Kerberos аутентификации с SSO на веб-сервере Apache с помощью SSSD]] Настраиваем конфигурацию **Apache** для поддержки аутентификации **Kerberos** Установка пакетов поддержки **PAM**/**Kerberos** в Apache:
# apt-get install libapache2-mod-auth-kerb libapache2-mod-authnz-pamВключение модулей Apache:
# apache2ctl -M | grep -E "kerb|pam"Пример файла конфигурации Apache:
# nano -Y sh /etc/apache2/sites-available/000-default.confВ данном примере в Apache для доступа к веб-серверу Apache вызывается настроенный нами ранее **PAM**-модуль ''apache2'' (через файл ''/etc/pam.d/apache2'') **PAM**-модуль в свою очередь вызывает для процедуры аутентификации **SSSD** и выполняет авторизацию через файл ''/etc/security/access-groups-to-web''
# chown root:www-data /etc/krb5.keytab # chmod 640 /etc/krb5.keytabПерезепускаем службу веб-сервера и проверяем результат:
# systemctl restart apache2 # systemctl status apache2\\ ==== Финиш ===== По завершении всех процедур настройки можно вернуть имя хоста в исходное состояние, "привычное" для Debain.
# hostname KOM-SRV01После завершения настройки перезагружаем Linux-сервере, чтобы убедиться в успешном автоматическом запуске **SSSD** и последующей корректной работы аутентификации/авторизации на базе доменных учётных записей. ---- Дополнительные источники информации: * [[https://blog.it-kb.ru/2016/10/15/join-debian-gnu-linux-8-6-to-active-directory-domain-with-sssd-and-realmd-for-authentication-and-configure-ad-domain-security-group-authorization-for-sudo-and-ssh-with-putty-sso/|Подключение Debian GNU/Linux 8.6 к домену Active Directory с помощью SSSD и realmd]] * [[https://blog.it-kb.ru/2017/11/18/recommendations-for-configuring-sssd-in-debian-gnu-linux-about-dns-kerberos-and-active-directory-dc-search/|Рекомендации по настройке SSSD в Debian GNU/Linux]] * [[https://blog.it-kb.ru/2017/03/12/restricting-access-rights-to-the-linux-system-and-its-services-sshd-and-apache-through-active-directory-domain-security-groups-using-sssd-and-pam-pam_listfile/|Разграничение прав доступа к Linux-системе и её сервисам через доменные группы безопасности с помощью SSSD и PAM]] * [[https://blog.it-kb.ru/2016/10/26/configuring-basic-and-kerberos-authentication-with-sso-single-sign-on-for-the-apache-web-server-using-sssd-and-pam-service-for-authorization/|Настройка Kerberos аутентификации с SSO на веб-сервере Apache с помощью SSSD]] * [[https://blog.it-kb.ru/2017/10/26/adding-spn-entries-in-keytab-on-linux-server-using-ktutil-associated-with-computer-account-in-active-directory-domain/|Добавление SPN записей в keytab-файл (на стороне сервера Linux с помощью утилиты ktutil), связанный с учётной записью Computer в домене Active Directory]] ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ |Debian GNU/Linux Stretch 9.4 | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 25.06.2019 09:11 {{tag>Linux Debian "Debian 9" "Debian Stretch" SSH sshd sudo sudoers PAM Authorization Authentication Apache SSSD realmd "Active Directory" Domain Kerberos keytab SPN}} ~~DISCUSSION~~