===== Подключение 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 адреса хоста адрес одного из сетевых интерфейсов. То есть, строку вида: ... 127.0.1.1 KOM-SRV01 ... заменяем на строку вида: ... 10.1.0.3 KOM-SRV01.sub.holding.com KOM-SRV01 ... Если требуется, предварительно создаём в домене учётную запись компьютера \\ ==== Установка realmd/SSSD и ввод в домен ==== Устанавливаем пакеты необходимые для ввода в домен:
# 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
[active-directory] os-name = Debian GNU/Linux os-version = 9.4 (Stretch) Устанавливаем пакеты, необходимые для работы **SSSD**
# 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
Пример настроенного файла: [libdefaults] dns_lookup_kdc = no dns_lookup_realm = no ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = sub.holding.com # for Windows 2008 with AES default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 [realms] sub.holding.com = { kdc = kom-dc01.sub.holding.com kdc = kom-dc02.sub.holding.com admin_server = kom-dc01.sub.holding.com default_domain = sub.holding.com } [domain_realm] .sub.holding.com = sub.holding.com sub.holding.com = sub.holding.com \\ ==== Конфигурация SSSD ==== Настраиваем конфигурацию **SSSD**:
# nano /etc/sssd/sssd.conf
Пример настроенной конфигурации: [sssd] domains = sub.holding.com config_file_version = 2 services = nss, pam default_domain_suffix = sub.holding.com [domain/sub.holding.com] ad_server = kom-dc01.sub.holding.com, kom-dc02.sub.holding.com ad_backup_server = prm-dc01.sub.holding.com, ekb-dc02.sub.holding.com ad_domain = sub.holding.com ad_gpo_access_control = disabled krb5_realm = sub.holding.com realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True ldap_idmap_default_domain_sid = S-1-5-21-2599488624-3617735854-14887588928 ldap_idmap_range_size = 2000000 ldap_use_tokengroups = False use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = ad subdomains_provider = none dyndns_update = False debug_level = 0 Перезапускаем службу с очисткой кеша **sssd**:
# ( 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
В конец файла добавим строку, позволяющую создать домашний каталог в случае его отсутствия: ... session required pam_mkhomedir.so umask=0022 skel=/etc/skel \\ ==== PAM и доступ на консоль ===== Создадим свой файл для перечисления учётных записей (доменных и локальных), которым будет разрешёно подключение к консоли компьютера:
# nano -Y sh /etc/security/access-groups-to-login
sudo root kom-servers-admins@sub.holding.com Ограничим доступ к файлу:
# 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'') ... # Restricted access to service from local and domain groups account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/security/access-groups-to-login ... Выполняем проверку входа в систему, используя разрешённую и неразрешённую доменную учётную запись. При этом отслеживаем происходящее в механизмах аутентификации/авторизации через системный лог ''auth.log''
# tail -f /var/log/auth.log
\\ ==== PAM и доступ к SSH ===== Отредактируем **PAM**-модуль, отвечающий за настроку авторизации при подключении через службу сервера **SSH**
# nano -Y sh /etc/pam.d/sshd
Вставляем перед директивой ''common-account ...'' ссылку на вызов авторизации через созданный нами файл (''access-groups-to-login'') ... # Restricted access to service from local and domain groups account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/security/access-groups-to-login ... Выполняем проверку входа в систему через SSH, используя разрешённую и неразрешённую доменную учётную запись. При этом отслеживаем происходящее в механизмах аутентификации/авторизации через системный лог ''auth.log''
# tail -f /var/log/auth.log
\\ ==== PAM и доступ к Apache ===== Пример создания собственного **PAM**-модуля для других служб, например, для организации доменной аутентфикации/авторизации в веб-сервере **Apache**: Создадим свой файл для перечисления учётных записей (доменных и локальных), которым будет разрешёно подключение к веб-серверу:
# nano -Y sh /etc/security/access-groups-to-web
kom-servers-admins@sub.holding.com kom-web-admins@sub.holding.com Создадим конфигурационный файл - **PAM**-модуль
# nano -Y sh /etc/pam.d/apache2
auth required pam_sss.so account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/security/access-groups-to-web account required pam_sss.so Ограничим доступ к файлам:
# 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
Включим опции: ... # GSSAPI options GSSAPIAuthentication yes GSSAPICleanupCredentials yes ... Перезапустим службу сервера
# systemctl restart ssh
\\ ==== SUDO ===== Разрешаем **sudo** для доменных учётных записей. Создадим отдельный файл для выдачи прав выполнять **sudo** доменным учётным записям:
# nano -Y sh /etc/sudoers.d/kom-srv-linux-admins
Пример содержимого файла с одной доменной группой доступа, которой разрешено выполнять **sudo** без ограничений: %kom-servers-admins@sub.holding.com ALL=(ALL) ALL Ограничим доступ к файлу
# 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'' ... ServerAdmin webmaster@localhost DocumentRoot /var/www/html AuthType Kerberos AuthName "Kerberos Login" Krb5Keytab /etc/krb5.keytab KrbMethodK5Passwd off Require pam-account apache2 Не забываем на строне Linux-сервера настроить доступ к **keytab**-файлу
# 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~~