Мы начнем эту статью с обзора некоторых основ LDAP (что это такое, где используется и почему) и покажем, как настроить сервер LDAP и настроить клиента для аутентификации против него с использованием систем Red Hat Enterprise Linux 7.

Как мы увидим, существует несколько других возможных сценариев применения, но в этом руководстве мы сосредоточимся исключительно на аутентификации на основе LDAP. Кроме того, имейте в виду, что из-за обширности темы мы здесь рассмотрим только ее основы, но вы можете обратиться к документации, описанной в резюме, для получения более подробной информации.
По той же причине вы заметите, что я решил опустить несколько ссылок на страницы руководства по инструментам LDAP ради краткости, но соответствующие объяснения находятся на расстоянии вытянутой руки (man ldapadd, например).
С этим сказано, давайте начнем.
Наша тестовая среда
Наша тестовая среда состоит из двух RHEL 7 серверов:
Server: 192.168.0.18. FQDN: rhel7.mydomain.com Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
Если хотите, вы можете использовать установленную машину в Части 12: Автоматизация установок RHEL 7 с использованием Kickstart в качестве клиента.
Что такое LDAP?
LDAP означает Lightweight Directory Access Protocol и представляет собой набор протоколов, который позволяет клиенту получать доступ к централизованной информации (например, каталогу логинов, абсолютным путям к домашним каталогам и другой типичной информации о системных пользователях), которая должна быть доступна из разных мест или для большого числа конечных пользователей (другим примером может быть каталог домашних адресов и номеров телефонов всех сотрудников компании) через сеть.
Хранение такой (и другой) информации централизованно облегчает ее обслуживание и доступ к ней для всех, кому предоставлены соответствующие разрешения.
Следующая диаграмма предлагает упрощенное изображение LDAP, которое подробно описано ниже:

Подробное объяснение вышеуказанной диаграммы.
- Запись в каталоге LDAP представляет собой отдельную единицу информации и уникально идентифицируется по так называемому различительному имени.
- Атрибут – это часть информации, связанная с записью (например, адреса, доступные контактные номера телефонов и адреса электронной почты).
- Каждому атрибуту назначается одно или несколько значений, представляющих собой список, разделенный пробелами. Уникальное значение для каждой записи называется Относительным Различительным Именем.
Итак, приступим к установке сервера и клиента.
Установка и настройка сервера и клиента LDAP
В RHEL 7, LDAP реализован с помощью OpenLDAP. Чтобы установить сервер и клиент, используйте следующие команды, соответственно:
# yum update && yum install openldap openldap-clients openldap-servers # yum update && yum install openldap openldap-clients nss-pam-ldapd
После завершения установки, есть несколько вещей, на которые мы обращаем внимание. Следующие шаги должны быть выполнены только на сервере, если не указано иное:
1. Убедитесь, что SELinux не мешает, включив следующие булевы постоянно, как на сервере, так и на клиенте:
# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
Где allow_ypbind требуется для аутентификации на основе LDAP, а authlogin_nsswitch_use_ldap может потребоваться некоторыми приложениями.
2. Включите и запустите службу:
# systemctl enable slapd.service # systemctl start slapd.service
Имейте в виду, что вы также можете отключить, перезапустить или остановить службу с помощью systemctl также:
# systemctl disable slapd.service # systemctl restart slapd.service # systemctl stop slapd.service
3. Поскольку служба slapd запускается от имени пользователя ldap (что можно проверить с помощью ps -e -o pid,uname,comm | grep slapd), этот пользователь должен владеть каталогом /var/lib/ldap, чтобы сервер мог изменять записи, созданные административными инструментами, которые могут быть запущены только от имени root (подробнее об этом чуть позже).
Перед изменением владельца этого каталога рекурсивно скопируйте файл конфигурации базы данных для slapd в него:
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap
4. Настройте административного пользователя OpenLDAP и назначьте пароль:
# slappasswd
как показано на следующем изображении:

и создайте файл LDIF (ldaprootpasswd.ldif) со следующим содержимым:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD
где:
- PASSWORD – зашифрованная строка, полученная ранее.
- cn=config указывает на глобальные параметры конфигурации.
- olcDatabase указывает на имя конкретного экземпляра базы данных и обычно находится внутри /etc/openldap/slapd.d/cn=config.
Ссылаясь на предоставленный ранее теоретический фон, файл ldaprootpasswd.ldif
добавит запись в каталог LDAP. В этой записи каждая строка представляет собой пару атрибут: значение (где dn, changetype, add и olcRootPW – атрибуты, а строки справа от каждого двоеточия – их соответствующие значения).
Вам может быть полезно иметь это в виду по мере продвижения дальше, и обратите внимание, что мы используем те же общие имена (cn=)
на протяжении всей оставшейся части этой статьи, где каждый шаг зависит от предыдущего.
5. Теперь добавьте соответствующую запись LDAP, указав URI, указывающий на сервер ldap, где разрешены только поля протокола/хоста/порта.
# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
Вывод должен быть похож на:

и импортируйте некоторые основные определения LDAP из каталога /etc/openldap/schema
:
# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. Пусть LDAP использует ваш домен в своей базе данных.
Создайте еще один файл LDIF, который мы назовем ldapdomain.ldif
, со следующим содержимым, заменив ваш домен (в компоненте домена dc=) и пароль по необходимости:
dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. Теперь пришло время добавить несколько записей в наш каталог LDAP. Атрибуты и значения разделяются двоеточием (:)
в следующем файле, который мы назовем baseldapdomain.ldif
:
dn: dc=mydomain,dc=com objectClass: top objectClass: dcObject objectclass: organization o: mydomain com dc: mydomain dn: cn=Manager,dc=mydomain,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=mydomain,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=mydomain,dc=com objectClass: organizationalUnit ou: Group
Добавьте записи в каталог LDAP:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. Создайте пользователя LDAP с именем ldapuser (adduser ldapuser), затем создайте определения для группы LDAP в ldapgroup.ldif
.
# adduser ldapuser # vi ldapgroup.ldif
Добавьте следующее содержимое.
dn: cn=Manager,ou=Group,dc=mydomain,dc=com objectClass: top objectClass: posixGroup gidNumber: 1004
где gidNumber – это GID в /etc/group для ldapuser) и загрузите его:
# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. Добавьте файл LDIF с определениями для пользователя ldapuser (ldapuser.ldif
):
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldapuser uid: ldapuser uidNumber: 1004 gidNumber: 1004 homeDirectory: /home/ldapuser userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M loginShell: /bin/bash gecos: ldapuser shadowLastChange: 0 shadowMax: 0 shadowWarning: 0
и загрузите его:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

Точно так же, вы можете удалить только что созданную запись пользователя:
# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. Разрешите общение через брандмауэр:
# firewall-cmd --add-service=ldap
11. Наконец, но не менее важно, разрешите клиенту аутентифицироваться с использованием LDAP.
Чтобы помочь нам на этом последнем шаге, мы будем использовать утилиту authconfig (интерфейс для настройки ресурсов аутентификации системы).
Используя следующую команду, домашний каталог запрашиваемого пользователя создается, если его не существует после успешной аутентификации на сервере LDAP:
# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

Summary
В этой статье мы объяснили, как настроить базовую аутентификацию против сервера LDAP. Чтобы дополнительно настроить установку, описанную в настоящем руководстве, обратитесь к Глава 13 – Конфигурация LDAP в руководстве администратора системы RHEL 7, уделяя особое внимание настройкам безопасности с использованием TLS.
Не стесняйтесь задавать любые вопросы, используя форму комментариев ниже.
Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/