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 15:13]
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-х годах прошлого столетия,​ работа которого ИМХО являет собой пример отличного ​программистского [[https://​royallib.com/​book/​levi_stiven/​hakeri_geroi_kompyuternoy_revolyutsii.html|хака]], в хорошем (изначальном:​) смысле этого слова. В конце статьи есть ссылка на описание его работы,​ а сейчас ​уточню, что имеется несколько реализаций этого протокола и решение из этой статьи не привязано только к 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:). Как ввести ее в домен?
  
 Да очень просто:​ Да очень просто:​
Line 23: Line 25:
 </​code><​code>​ </​code><​code>​
 [libdefaults] [libdefaults]
-        default_realm = BMSTU.RU+        default_realm = CORP.RU
 </​code>​ </​code>​
  
-Вместо ​BMSTU.RU должно быть имя домена (Kerberos сферы) Вашего предприятия+Вместо ​CORP.RU должно быть имя домена (Kerberos сферы) Вашего предприятия
  
-И все, мы в домене:+И все, можно "​входить" ​в домен:
  
 <​code>​ <​code>​
 student@debian:​~$ kinit ivanovii student@debian:​~$ kinit ivanovii
-Password for ivanovii@BMSTU.RU:+Password for ivanovii@CORP.RU:
  
 student@debian:​~$ klist student@debian:​~$ klist
 Ticket cache: FILE:/​tmp/​krb5cc_1000 Ticket cache: FILE:/​tmp/​krb5cc_1000
-Default principal: ivanovii@BMSTU.RU+Default principal: ivanovii@CORP.RU
  
 Valid starting ​      ​Expires ​             Service principal Valid starting ​      ​Expires ​             Service principal
-02/22/2023 00:​09:​13 ​ 02/22/2023 10:​09:​13 ​ krbtgt/BMSTU.RU@BMSTU.RU+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         renew until 02/23/2023 00:09:09
 </​code>​ </​code>​
  
-ivanovii - логин доменного пользователя,​ замените его на тот, который есть у Вас, можно даже использовать Administrator. В результате команды kinit была осуществлена аутентификация пользователя и получен Ticket-Granting Ticket (TGT) "​билет на выдачу билетов"​ позволяющий,​ в дальнейшем,​ получить билеты на доступ к зарегистрированным в домене сервисам,​ реализуя таким образом технологию единого входа - single sign-on (SSO). ​Можно заканчивать статью :)+ivanovii - зарегистрированный в домене логин пользователя,​ замените его на тот, который есть у Вас, можнодажеиспользовать Administrator. В результате ​работы ​команды kinit была осуществлена аутентификация пользователя и получен Ticket-Granting Ticket (TGT) "​билет на выдачу билетов"​позволяющий,​ в дальнейшем,​ получить билеты на доступ к зарегистрированным в домене сервисам,​ реализуя таким образом технологию единого входа - single sign-on (SSO). ​
  
-Постойте, ​но, например,​ в оснастке Active Directory Users and Computers ​никакой рабочей станции Linux не появилось, как же так? Да, действительно, контроллер домена по пруженному ничего не знает от нашей рабочей ​станции, фактически,​ наоборот,​ это наша рабочая станция,​ благодаря параметру default_realm = BMSTU.RU и соответствующим SRV записям в DNS +Можно заканчивать статью :)
  
-<​code>​ +Постойте,​ но, например,​ в оснастке "​Active Directory Users and Computers"​ никакой рабочей станции Linux не появилось,​ как же так? Да, действительно,​ контроллер домена по прежнему ничего не знает о нашей рабочей станции,​ фактически,​ наоборот,​ это наша рабочая станция,​ благодаря параметру default_realm ​CORP.RU и соответствующим ​SRV записям в DNS
-student@debian:​~$ nslookup -q=SRV _kerberos._udp.bmstu.ru +
-Server: ​        ​195.19.33.202 +
-Address: ​       195.19.33.202#​53+
  
-Non-authoritative answer: +<​code>​ 
-_kerberos._udp.bmstu.ru service = 1 0 88 kdc.bmstu.ru. +student@debian:​~$ nslookup ​-q=SRV _kerberos._udp.corp.ru 
- +... 
-Authoritative answers can be found from: +kdc.corp.ru    internet address = A.B.C.D
-kdc.bmstu.ru    internet address = 195.19.32.47+
 </​code>​ </​code>​
  
-знает местоположение контроллера домена,​ и этого достаточно для работы с его Kerberos подсистемой. Для чего может понадобиться регистрация Linux системы в Active Directory и как это сделать - тема отдельной статьи,​ а мы вернемся к нашей задаче - вход доменной учетной записью в Linux систему+знает местоположение контроллера домена,​ и этого достаточно для работы с его Kerberos подсистемой. Для чего может понадобиться регистрация Linux системы в Active Directory и как это сделать - тема отдельной статьи,​ а сейчас ​вернемся к нашей задаче - вход доменной учетной записью в Linux систему
  
-За процесс аутентификации пользователей при входе в Linux отвечает библиотека PAM (Pluggable Authentication Modules) использование которой я упоминал в этой статье: ​https://​habr.com/​ru/​post/​713582В нашем случае добавим в систему модуль,​ использующий Kerberos аутентификацию:​+За процесс аутентификации пользователей при входе в Linux отвечает библиотека PAM (Pluggable Authentication Modules) использование которой я упоминал в [[https://​habr.com/​ru/​post/​713582|этой статье]].  ​В нашем случае добавим в систему модуль,​ использующий Kerberos аутентификацию:​
  
 <​code>​ <​code>​
Line 71: Line 69:
 <​code>​ <​code>​
 student@debian:​~$ less /​etc/​pam.d/​common-auth student@debian:​~$ less /​etc/​pam.d/​common-auth
 +</​code><​code>​
 ... ...
 auth    [success=2 default=ignore] ​     pam_krb5.so minimum_uid=1000 auth    [success=2 default=ignore] ​     pam_krb5.so minimum_uid=1000
Line 92: Line 91:
 student@debian:​~$ sudo tail /​var/​log/​auth.log 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@BMSTU.RU+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)) Feb 22 01:18:43 debian login[1587]:​ pam_unix(login:​account):​ could not identify user (from getpwnam(ivanovii))
 ... ...
 </​code>​ </​code>​
  
-аутентификация прошла успешно,​ но больше, система ничего не знает о нашем пользователе (на UID, ни GID ни прочих атрибутов)+аутентификация прошла успешно,​ но дальше, система ничего не знает о нашем пользователе (ни UID, ни GID ни прочих атрибутов)
  
 <​code>​ <​code>​
Line 106: Line 105:
 Вот теперь мы подошли к этапу, ради которого писалась статья:​) Вот теперь мы подошли к этапу, ради которого писалась статья:​)
  
-Если начать искать решение этой задачи,​ то, скорее всего, Вы узнаете о библиотеке Name Service Switch (NSS) и модулях LDAP, WinBIND или SSSD для нее. Но что если ... просто создать учетную запись после успешной аутентификации?​+Если начать искать ​традиционное ​решение этой задачи,​ то, скорее всего, Вы узнаете о библиотеке Name Service Switch (NSS) и модулях LDAP, WinBIND или SSSD для нее. Но что если ... просто создать учетную запись после успешной аутентификации?​
  
 Оказывается,​ библиотеку PAM можно расширять своими собственными скриптами,​ используя модуль pam_script. Давайте добавим его в систему:​ Оказывается,​ библиотеку PAM можно расширять своими собственными скриптами,​ используя модуль pam_script. Давайте добавим его в систему:​
Line 125: Line 124:
 </​code>​ </​code>​
  
-Если честно,​ то такая конфигурация не только не годится для нашей задачи,​ но и очень не хорошая с точки зрения безопасности,​ легко довести ее до ситуации,​ когда будет достаточно знать логин локального пользователя,​ например root, для подключения к системе,​ пароль подойдет любой (вот за это любил FreeBSD, она за нас ничего не делает:​) Поэтому,​ поправьте ​ее расположив модули так:+Если честно,​ то такая конфигурация не только не подходит для нашей задачи,​ но и очень не хорошая с точки зрения безопасности,​ легко довести ее до ситуации,​ когда будет достаточно знать логин локального пользователя,​ например root, для подключения к системе,​ пароль подойдет любой (вот за это любил FreeBSD, она за нас ​никогда ​ничего не делает:​) Поэтому,​ поправьте ​конфигурацию ​расположив модули так:
  
 <​code>​ <​code>​
 student@debian:​~$ sudo nano /​etc/​pam.d/​common-auth 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_krb5.so minimum_uid=1000
 auth    [success=2 default=ignore] ​     pam_unix.so nullok_secure try_first_pass auth    [success=2 default=ignore] ​     pam_unix.so nullok_secure try_first_pass
Line 137: Line 136:
 </​code>​ </​code>​
  
-В этом случае,​ после успешной аутентификации учтённой записи в Kerberos, выполнение ​будет ​передано модулю pam_script. Остается только написать скрипт,​ который проверит наличие учетной записи,​ и, в случае ее отсутствия в системе - создаст:​+В этом случае,​ после успешной аутентификации учтённой записи в Kerberos, выполнение ​"перепрыгнет" ​два следующих шага и запустит ​модуль pam_script. Остается только написать скрипт,​ который проверит наличие учетной записи,​ и, в случае ее отсутствия в системе - создаст:​
  
 <​code>​ <​code>​
Line 163: Line 162:
 ivanovii@debian:​~$ klist ivanovii@debian:​~$ klist
 Ticket cache: FILE:/​tmp/​krb5cc_1001_0zzvqR Ticket cache: FILE:/​tmp/​krb5cc_1001_0zzvqR
-Default principal: ivanovii@BMSTU.RU+Default principal: ivanovii@CORP.RU
  
 Valid starting ​      ​Expires ​             Service principal Valid starting ​      ​Expires ​             Service principal
-02/22/2023 04:​14:​30 ​ 02/22/2023 14:​14:​30 ​ krbtgt/BMSTU.RU@BMSTU.RU+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         renew until 02/23/2023 04:14:30
  
 </​code>​ </​code>​
  
-Мы в системе,​ и TGT у нас в кармане:​) ​+Ну вот и все, мы в системе,​ и TGT у нас в кармане:​) ​
  
-Очевидным недостатком данного решения является то, что после удаления учётной записи пользователя из домена,​ она останется ​во всех рабочих станциях,​ за которыми он работал. Но, поскольку воспользоваться этими учтёнными записями будет невозможно,​ можно с ним смириться.+Очевидным недостатком данного решения является то, что после удаления учётной записи пользователя из домена,​ она останется ​на всех рабочих станциях,​ за которыми он работал. Но, поскольку воспользоваться этими учтёнными записями будет невозможно ​(в локальной базе пользователей они заблокированы), можно пока ​оставить ​все как есть.
  
-На этом все, спасибо,​ что дочитали до конца, посмотрите ссылки,​ буду рад комментариям,​ до новых встреч!+Спасибо,​ что дочитали до конца, надеюсь,​ было интересно, посмотрите ссылки,​ буду рад комментариям,​ до новых встреч!
  
 Ссылки: ​ Ссылки: ​
простой_способ_ввести_linux_в_домен.1677068029.txt.gz · Last modified: 2023/02/22 15:13 by val