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
На всякий случай проверим, все ли установилось?
 pkg_info | grep -E '(ldap|pam)'
Место расположения LDAP сервера (в нашем случаи контроллер(ы) домена) будем указывать по имени. В нашем конкретном случаи будем использовать имя домена. Что обеспечить отказоустойчивость при недоступности основного LDAP сервера.
Удостоверимся, что с разрешением имен у нас все Ок (имя нашего домена ltd.local):
 nslookup ltd.local
На всякий случай, привожу листинг файла /etc/resolv.conf (этот файл отвечает за разрешение имен)
  ee /etc/resolv.conf

Начинаем править конфиги:

Настраиваем openldap:
 ee /usr/local/etc/openldap/ldap.conf
Проверим, правильно ли мы все сделали. Запросим информацию о пользователе a.ya при помощи утилиты ldapsearch.
 Ключи:
  •  "(cn=a.ya)" - учетная запись, информацию о которой хотим получить
  • -D admin - доменная учетная запись от имени которой будет выполняться LDAP запрос (анонимный доступ к LDAP каталогу у нас закрыт)
  •  -W нужен для того чтобы утилита запросила пароль к учетке от имени которой будем подключаться
 ldapsearch -D admin -W "(cn=a.ya)"

Переходим к настройке nss_ldap и pam_ldap.
Приводим файлы:
  • /usr/local/etc/ldap.conf
  • /usr/local/etc/nss_ldap.conf
К следующему виду:

# Имя LDAP сервера
host ltd.local
# Домен, в нашем случаи ltd.local
base dc=ltd,dc=local
# Версия протокола
ldap_version 3
# Т.к. анонимный доступ к LDAP каталогу у наз запрещен
# указываем учетные данные пользователя, от имени которого
# будет происходить подключение к LDAP сервере.
# Не забываем предварительно его создать в AD :=)
binddn ldap_reader@ltd.local
bindpw 123@qwe1944!
# Зона поиска - искать во всем каталоге
scope sub
bind_policy soft
# Какие типы объектов будем запрашивать
pam_filter objectclass=User
# Какой атрибут в LDAP будет соответствовать атрибуту uid
pam_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?sub
nss_base_shadow dc=ltd,dc=local?sub
nss_base_group          dc=ltd,dc=local?sub
# Services for UNIX 3.5 mappings
# Соответствия атрибутов
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid uid
#nss_map_attribute uid msSFU30Name
nss_map_attribute uniqueMember msSFU30PosixMember
nss_map_attribute userPassword msSFU30Password
nss_map_attribute homeDirectory msSFU30HomeDirectory
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_objectclass posixGroup Group
pam_login_attribute msSFU30Name
pam_filter objectclass=User
pam_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 ldap
group: files ldap
group_compat: nis
hosts: files dns
networks: files
# Меняем passwd: compat -> passwd: files ldap
passwd: files ldap
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

Если все было правильно сделано, при помощи утилиты id мы будем иметь возможность запрашивать данные о пользователях AD. Протестируем:

# id a.ya
uid=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

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            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_pass
auth            required        /usr/local/lib/pam_ldap.so  no_warn try_first_pass
# account
account         required        pam_nologin.so
account         required        pam_login_access.so
# Отключаем:
# account        required        pam_unix.so
# Добавляем:
account         sufficient      pam_unix.so
account         required        /usr/local/lib/pam_ldap.so
# session
session         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_pass
password        required        /usr/local/lib/pam_ldap.so      no_warn try_first_pass

Пробуем зайти на сервер под своей доменной учеткой если пускает - все сделано правильно.
Теперь на сервер сможет зайти любой доменный пользователь у которого активированы UNIX Attributes.
Это можно исправить следующим образом в файле конфигурации sshd существует директива AllowGroups через нее можно указать список групп, которым разрешен доступ к серверу
Пример:
# cat /etc/ssh/sshd_config | grep -i group
AllowGroups 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_user
auth            include         system
# account
# Добавим
account         sufficient      /usr/local/lib/pam_ldap.so
account         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.so
password        include         system

И пропишем доменную группу, которой разрешен root доступ в /usr/local/etc/sudoers для этого воспользуемся утилитой visudo.
Для того чтобы разрешить доступ доменной группе unix_mega_admin root привелегии необходимо добавить следующую строчку:

%unix_mega_admins ALL=(ALL) ALL

Комментарии

Популярные сообщения из этого блога

FreeBSD: gpart — пример работы с дисками