This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
простой_способ_ввести_linux_в_домен [2023/02/22 09:04] val |
простой_способ_ввести_linux_в_домен [2023/02/22 15:13] val |
||
---|---|---|---|
Line 5: | Line 5: | ||
Термин 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 | ||
Line 61: | Line 61: | ||
знает местоположение контроллера домена, и этого достаточно для работы с его Kerberos подсистемой. Для чего может понадобиться регистрация Linux системы в Active Directory и как это сделать - тема отдельной статьи, а мы вернемся к нашей задаче - вход доменной учетной записью в Linux систему | знает местоположение контроллера домена, и этого достаточно для работы с его 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 | ||
+ | ... | ||
+ | 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@BMSTU.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 | ||
+ | ... | ||
+ | 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@BMSTU.RU | ||
+ | |||
+ | Valid starting Expires Service principal | ||
+ | 02/22/2023 04:14:30 02/22/2023 14:14:30 krbtgt/BMSTU.RU@BMSTU.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?]] | ||