LDAP аутентификация в домене MS AD
При работе с linux или Unnix подобными системами, которые введены в MS AD, что бы постоянно не придумывать разные пароли и просто для удобства, на предприятиях используют LDAP аутентификацию.Для начала обновим порты
# portsnap fetch && portsnap update |
Нам понадобится:
- nss_ldap
- pam_ldap
- pam_mkhomedir
Ставим:
# cd /usr/ports/net/nss_ldap# make install clean# cd /usr/ports/security/pam_ldap # make install clean# cd /usr/ports/security/pam_mkhomedir# make install clean |
Удостоверимся, что с разрешением имен у нас все Ок (имя нашего домена ltd.local):
Начинаем править конфиги:
Настраиваем openldap:Ключи:
- "(cn=a.ya)" - учетная запись, информацию о которой хотим получить
- -D admin - доменная учетная запись от имени которой будет выполняться LDAP запрос (анонимный доступ к LDAP каталогу у нас закрыт)
- -W нужен для того чтобы утилита запросила пароль к учетке от имени которой будем подключаться
Переходим к настройке nss_ldap и pam_ldap.
Приводим файлы:
- /usr/local/etc/ldap.conf
- /usr/local/etc/nss_ldap.conf
# Имя LDAP сервераhost ltd.local# Домен, в нашем случаи ltd.localbase dc=ltd,dc=local# Версия протоколаldap_version 3# Т.к. анонимный доступ к LDAP каталогу у наз запрещен# указываем учетные данные пользователя, от имени которого # будет происходить подключение к LDAP сервере.# Не забываем предварительно его создать в AD :=)binddn ldap_reader@ltd.localbindpw 123@qwe1944!# Зона поиска - искать во всем каталогеscope subbind_policy soft# Какие типы объектов будем запрашиватьpam_filter objectclass=User# Какой атрибут в LDAP будет соответствовать атрибуту uidpam_login_attribute uid# Update Active Directory password, by# creating Unicode password and updating# unicodePwd attribute.pam_password ad# Где будем искать пользователей, их пароли, группы# в нашем случаи во всем LDAP каталогеnss_base_passwd dc=ltd,dc=local?subnss_base_shadow dc=ltd,dc=local?subnss_base_group dc=ltd,dc=local?sub# Services for UNIX 3.5 mappings# Соответствия атрибутов nss_map_objectclass posixAccount Usernss_map_objectclass shadowAccount Usernss_map_attribute uid uid#nss_map_attribute uid msSFU30Namenss_map_attribute uniqueMember msSFU30PosixMembernss_map_attribute userPassword msSFU30Passwordnss_map_attribute homeDirectory msSFU30HomeDirectorynss_map_attribute homeDirectory msSFUHomeDirectorynss_map_objectclass posixGroup Grouppam_login_attribute msSFU30Namepam_filter objectclass=Userpam_password ad |
На этом настройка ldap окончена. Для того чтобы все заработало необходимо "научить" систему читать данные о пользователях из LDAP каталога. За это отвечают два модуля операционной системы: PAM и NSS.
Настраиваем NSS.
Приводим файл /etc/nsswitch.conf к следующему виду:
## nsswitch.conf(5) - name service switch configuration file# $FreeBSD: release/9.0.0/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $## Меняем group: compat -> group: files ldapgroup: files ldapgroup_compat: nishosts: files dnsnetworks: files# Меняем passwd: compat -> passwd: files ldappasswd: files ldappasswd_compat: nisshells: filesservices: compatservices_compat: nisprotocols: filesrpc: files |
Если все было правильно сделано, при помощи утилиты id мы будем иметь возможность запрашивать данные о пользователях AD. Протестируем:
# id a.yauid=10006(a.ya) gid=10002(unix_mega_admins) groups=10002(unix_mega_admins),10006(it-gw),10007(unix_sudo) |
Настройка SSH сервера.
Для того чтобы включить LDAP аутентификацию в sshd, необходимо привести файл /etc/pam.d/sshd к следующему виду:
/etc/pam.d/sshd
# authauth sufficient pam_opie.so no_warn no_fake_promptsauth requisite pam_opieaccess.so no_warn allow_local# Отключаем:# auth required pam_unix.so no_warn try_first_pass# Добавляем:auth sufficient pam_unix.so no_warn try_first_passauth required /usr/local/lib/pam_ldap.so no_warn try_first_pass# accountaccount required pam_nologin.soaccount required pam_login_access.so# Отключаем:# account required pam_unix.so# Добавляем:account sufficient pam_unix.soaccount required /usr/local/lib/pam_ldap.so# sessionsession required pam_permit.so# Подключаем автоматическое создание домашних директорийsession required /usr/local/lib/pam_mkhomedir.so# password# Отключаем:# password required pam_unix.so no_warn try_first_pass# Добавляем:password sufficient pam_unix.so no_warn try_first_passpassword required /usr/local/lib/pam_ldap.so no_warn try_first_pass |
Пробуем зайти на сервер под своей доменной учеткой если пускает - все сделано правильно.
Теперь на сервер сможет зайти любой доменный пользователь у которого активированы UNIX Attributes.
Это можно исправить следующим образом в файле конфигурации sshd существует директива AllowGroups через нее можно указать список групп, которым разрешен доступ к серверу
Пример:
# cat /etc/ssh/sshd_config | grep -i groupAllowGroups ssh_users it-gw unix_gw_admins unix_mega_admins |
Таким же образом доменному пользователю можно предоставить root доступ к нашему серверу.
Для этого нам понадобиться sudo.
Эта утилита по умолчанию отсутствует во Free BSD - установим:
# cd /usr/ports/security/sudo# make install && make clean |
Сначала поправим настройки pam модуля:
# PAM configuration for the "sudo" service## auth# Добавим auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass ignore_unknown_userauth include system# account# Добавим account sufficient /usr/local/lib/pam_ldap.soaccount include system# session# XXX: pam_lastlog (used in system) causes users to appear as though# they are no longer logged in in system logs.session required pam_permit.so# password# Добавим account sufficient /usr/local/lib/pam_ldap.sopassword include system |
И пропишем доменную группу, которой разрешен root доступ в /usr/local/etc/sudoers для этого воспользуемся утилитой visudo.
Для того чтобы разрешить доступ доменной группе unix_mega_admin root привелегии необходимо добавить следующую строчку:
%unix_mega_admins ALL=(ALL) ALL
Комментарии
Отправить комментарий