User Tools

Site Tools


простой_способ_ввести_linux_в_домен

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
простой_способ_ввести_linux_в_домен [2023/02/22 07:55]
val
простой_способ_ввести_linux_в_домен [2023/02/23 15:52] (current)
val
Line 1: Line 1:
 ====== Самый простой способ ввести Linux в домен ====== ====== Самый простой способ ввести Linux в домен ======
 +
 +  * [[https://​habr.com/​ru/​post/​718632/​]]
  
 Всем привет! Всем привет!
  
-Термин Microsoft Active Directory Domain Services включает в себя множество технологий,​ поэтому сразу уточню,​ в этой статье речь пойдет про использование контроллера домена только для аутентификации пользователей. То есть в финале,​ нужна возможность любому сотруднику предприятия сесть за любую рабочую станцию Linux используя свой логин и пароль.+Термин Microsoft Active Directory Domain Services включает в себя множество технологий,​ поэтому сразу уточню,​ в этой статье речь пойдет про использование контроллера домена только для аутентификации пользователей. То есть в финале,​ нужна возможность любому сотруднику предприятия сесть за любую рабочую станцию Linuxиспользуя свой доменный логин и пароль.
  
-Начиная с Windows 2000 Server для аутентификации пользователей используется протокол Kerberos, разработанный еще в 80-х годах прошлого столетия,​ работа которого ИМХО являет собой пример отличного ​программистского хака, в хорошем (изначальном:​) смысле этого слова. В конце статьи есть ссылка на описание его работы,​ а сейчас ​уточню, что имеется несколько реализаций этого протокола и решение из этой статьи не привязано только к Microsoft Active Directory+Начиная с Windows 2000 Server для аутентификации пользователей ​домена ​используется протокол Kerberos, разработанный еще в 80-х годах прошлого столетия, ​алгоритм ​работы которогоИМХОявляет собой пример отличного ​инженерного ​[[https://​royallib.com/​book/​levi_stiven/​hakeri_geroi_kompyuternoy_revolyutsii.html|хака, в хорошем (изначальном:​) смысле этого слова]]. В конце статьи есть ссылка на описание его работы,​ а сейчас надо сказать, что имеется несколько реализаций этого протокола и решение из этой статьи не привязано только к Microsoft Active Directory
  
 IMG_1 IMG_1
  
-Итак, на предприятии уже развернут контроллер домена,​ вероятнее всего - Microsoft Active Directory и перед нами рабочая станция Linux (примеры будут для Debian, но работать будет и в других дистрибутивах и, даже, в моей любимой FreeBSD:). Как ввести ее в домен?+Итак, на предприятии уже развернут контроллер домена,​ вероятнее всего - Microsoft Active Directory и перед нами ​рабочая станция Linux (примеры будут для Debian, но работать будет и в других дистрибутивах и, даже, в моей любимой FreeBSD:). Как ввести ее в домен?
  
 Да очень просто:​ Да очень просто:​
  
 <​code>​ <​code>​
 +student@debian:​~$ sudo apt install krb5-user -y
 +</​code>​
  
 +В Debian даже не понадобится редактировать,​ но убедитесь,​ и, при необходимости укажите эти строки в файле конфигурации Kerberos клиента (достаточно только их)
 +
 +<​code>​
 +student@debian:​~$ sudo nano /​etc/​krb5.conf
 +</​code><​code>​
 +[libdefaults]
 +        default_realm = CORP.RU
 </​code>​ </​code>​
 +
 +Вместо CORP.RU должно быть имя домена (Kerberos сферы) Вашего предприятия
 +
 +И все, можно "​входить"​ в домен:
 +
 +<​code>​
 +student@debian:​~$ kinit ivanovii
 +Password for ivanovii@CORP.RU:​
 +
 +student@debian:​~$ klist
 +Ticket cache: FILE:/​tmp/​krb5cc_1000
 +Default principal: ivanovii@CORP.RU
 +
 +Valid starting ​      ​Expires ​             Service principal
 +02/22/2023 00:​09:​13 ​ 02/22/2023 10:​09:​13 ​ krbtgt/​CORP.RU@CORP.RU
 +        renew until 02/23/2023 00:09:09
 +</​code>​
 +
 +ivanovii - зарегистрированный в домене логин пользователя,​ замените его на тот, который есть у Вас, можно, даже, использовать Administrator. В результате работы команды kinit была осуществлена аутентификация пользователя и получен Ticket-Granting Ticket (TGT) "​билет на выдачу билетов",​ позволяющий,​ в дальнейшем,​ получить билеты на доступ к зарегистрированным в домене сервисам,​ реализуя таким образом технологию единого входа - single sign-on (SSO). ​
 +
 +Можно заканчивать статью :)
 +
 +Постойте,​ но, например,​ в оснастке "​Active Directory Users and Computers"​ никакой рабочей станции Linux не появилось,​ как же так? Да, действительно,​ контроллер домена по прежнему ничего не знает о нашей рабочей станции,​ фактически,​ наоборот,​ это наша рабочая станция,​ благодаря параметру default_realm = CORP.RU и соответствующим SRV записям в DNS
 +
 +<​code>​
 +student@debian:​~$ nslookup -q=SRV _kerberos._udp.corp.ru
 +...
 +kdc.corp.ru ​   internet address = A.B.C.D
 +</​code>​
 +
 +знает местоположение контроллера домена,​ и этого достаточно для работы с его Kerberos подсистемой. Для чего может понадобиться регистрация Linux системы в Active Directory и как это сделать - тема отдельной статьи,​ а сейчас вернемся к нашей задаче - вход доменной учетной записью в Linux систему
 +
 +За процесс аутентификации пользователей при входе в Linux отвечает библиотека PAM (Pluggable Authentication Modules) использование которой я упоминал в [[https://​habr.com/​ru/​post/​713582|этой статье]]. ​ В нашем случае добавим в систему модуль,​ использующий Kerberos аутентификацию:​
 +
 +<​code>​
 +student@debian:​~$ sudo apt install libpam-krb5 -y
 +</​code>​
 +
 +В Debian новый модуль добавится в конфигурацию PAM автоматически,​ сперва логин/​пароль будут проверяться в Kerberos, и, в случае неудачи,​ в локальной базе пользователей:​
 +
 +<​code>​
 +student@debian:​~$ less /​etc/​pam.d/​common-auth
 +</​code><​code>​
 +...
 +auth    [success=2 default=ignore] ​     pam_krb5.so minimum_uid=1000
 +auth    [success=1 default=ignore] ​     pam_unix.so nullok try_first_pas
 +...
 +</​code>​
 +
 +однако,​ попытка войти в систему доменным пользователем закончится неудачно:​
 +
 +<​code>​
 +student@debian:​~$ sudo login
 +debian login: ivanovii
 +Password:
 +
 +Authentication failure
 +</​code>​
 +
 +а в журнале видна причина:​
 +
 +<​code>​
 +student@debian:​~$ sudo tail /​var/​log/​auth.log
 +...
 +Feb 22 01:18:43 debian login[1587]:​ pam_krb5(login:​auth):​ user ivanovii authenticated as ivanovii@CORP.RU
 +Feb 22 01:18:43 debian login[1587]:​ pam_unix(login:​account):​ could not identify user (from getpwnam(ivanovii))
 +...
 +</​code>​
 +
 +аутентификация прошла успешно,​ но дальше,​ система ничего не знает о нашем пользователе (ни UID, ни GID ни прочих атрибутов)
 +
 +<​code>​
 +$ id ivanovii
 +id: ‘ivanovii’:​ no such user
 +</​code>​
 +
 +Вот теперь мы подошли к этапу, ради которого писалась статья:​)
 +
 +Если начать искать традиционное решение этой задачи,​ то, скорее всего, Вы узнаете о библиотеке Name Service Switch (NSS) и модулях LDAP, WinBIND или SSSD для нее. Но что если ... просто создать учетную запись после успешной аутентификации?​
 +
 +Оказывается,​ библиотеку PAM можно расширять своими собственными скриптами,​ используя модуль pam_script. Давайте добавим его в систему:​
 +
 +<​code>​
 +student@debian:​~$ sudo apt install libpam-script -y
 +</​code>​
 +
 +Здесь авторы пакета для Debian не угадали наш замысел,​ расположив модули в таком порядке:​
 +
 +<​code>​
 +student@debian:​~$ less /​etc/​pam.d/​common-auth
 +...
 +auth    [success=3 default=ignore] ​     pam_krb5.so minimum_uid=1000
 +auth    sufficient ​                     pam_script.so
 +auth    [success=1 default=ignore] ​     pam_unix.so nullok try_first_pass
 +...
 +</​code>​
 +
 +Если честно,​ то такая конфигурация не только не подходит для нашей задачи,​ но и очень не хорошая с точки зрения безопасности,​ легко довести ее до ситуации,​ когда будет достаточно знать логин локального пользователя,​ например root, для подключения к системе,​ пароль подойдет любой (вот за это любил FreeBSD, она за нас никогда ничего не делает:​) Поэтому,​ поправьте конфигурацию расположив модули так:
 +
 +<​code>​
 +student@debian:​~$ sudo nano /​etc/​pam.d/​common-auth
 +</​code><​code>​
 +auth    [success=2 default=ignore] ​     pam_krb5.so minimum_uid=1000
 +auth    [success=2 default=ignore] ​     pam_unix.so nullok_secure try_first_pass
 +auth    requisite ​                      ​pam_deny.so
 +auth    sufficient ​                     pam_script.so
 +auth    required ​                       pam_permit.so
 +</​code>​
 +
 +В этом случае,​ после успешной аутентификации учтённой записи в Kerberos, выполнение "​перепрыгнет"​ два следующих шага и запустит модуль pam_script. Остается только написать скрипт,​ который проверит наличие учетной записи,​ и, в случае ее отсутствия в системе - создаст:​
 +
 +<​code>​
 +student@debian:​~$ sudo nano /​usr/​share/​libpam-script/​pam_script_auth
 +</​code><​code>​
 +#!/bin/bash
 +
 +id "​$PAM_USER"​ &>/​dev/​null || useradd -m -s /bin/bash "​$PAM_USER"​
 +</​code><​code>​
 +student@debian:​~$ sudo chmod +x /​usr/​share/​libpam-script/​pam_script_auth
 +</​code>​
 +
 +Проверяем:​
 +
 +<​code>​
 +student@debian:​~$ sudo login
 +debian login: ivanovii
 +Password:
 +
 +...
 +
 +ivanovii@debian:​~$ id
 +uid=1001(ivanovii) gid=1001(ivanovii) groups=1001(ivanovii)
 +
 +ivanovii@debian:​~$ klist
 +Ticket cache: FILE:/​tmp/​krb5cc_1001_0zzvqR
 +Default principal: ivanovii@CORP.RU
 +
 +Valid starting ​      ​Expires ​             Service principal
 +02/22/2023 04:​14:​30 ​ 02/22/2023 14:​14:​30 ​ krbtgt/​CORP.RU@CORP.RU
 +        renew until 02/23/2023 04:14:30
 +
 +</​code>​
 +
 +Ну вот и все, мы в системе,​ и TGT у нас в кармане:​) ​
 +
 +Очевидным недостатком данного решения является то, что после удаления учётной записи пользователя из домена,​ она останется на всех рабочих станциях,​ за которыми он работал. Но, поскольку воспользоваться этими учтёнными записями будет невозможно (в локальной базе пользователей они заблокированы),​ можно пока оставить все как есть.
 +
 +Спасибо,​ что дочитали до конца, надеюсь,​ было интересно,​ посмотрите ссылки,​ буду рад комментариям,​ до новых встреч!
  
 Ссылки: ​ Ссылки: ​
-[[https://​bestprogrammer.ru/​izuchenie/​kerberos-za-5-minut-znakomstvo-s-setevoj-autentifikatsiej|Kerberos за 5 минут: знакомство с сетевой аутентификацией]]+  * [[https://​bestprogrammer.ru/​izuchenie/​kerberos-za-5-minut-znakomstvo-s-setevoj-autentifikatsiej|Kerberos за 5 минут: знакомство с сетевой аутентификацией]] 
 +  * [[https://​youtu.be/​S7QOkcznEVY|Зачем вводить системы Linux в домен Microsoft?]]
  
простой_способ_ввести_linux_в_домен.1677041744.txt.gz · Last modified: 2023/02/22 07:55 by val