Серия RHCSA: Настройка аутентификации на основе LDAP в RHEL 7 – Часть 14

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

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

Как мы увидим, существует несколько других возможных сценариев применения, но в этом руководстве мы сосредоточимся исключительно на аутентификации на основе 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 Diagram

Подробное объяснение вышеуказанной диаграммы.

  1. Запись в каталоге LDAP представляет собой отдельную единицу информации и уникально идентифицируется по так называемому различительному имени.
  2. Атрибут – это часть информации, связанная с записью (например, адреса, доступные контактные номера телефонов и адреса электронной почты).
  3. Каждому атрибуту назначается одно или несколько значений, представляющих собой список, разделенный пробелами. Уникальное значение для каждой записи называется Относительным Различительным Именем.

Итак, приступим к установке сервера и клиента.

Установка и настройка сервера и клиента 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

как показано на следующем изображении:

Set LDAP Admin Password

и создайте файл LDIF (ldaprootpasswd.ldif) со следующим содержимым:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

где:

  1. PASSWORD – зашифрованная строка, полученная ранее.
  2. cn=config указывает на глобальные параметры конфигурации.
  3. 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 Configuration

и импортируйте некоторые основные определения LDAP из каталога /etc/openldap/schema:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
LDAP Definitions

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
LDAP Domain Configuration

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
Add LDAP Domain Attributes and Values

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
LDAP User Configuration

Точно так же, вы можете удалить только что созданную запись пользователя:

# 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
LDAP Client Configuration

Summary

В этой статье мы объяснили, как настроить базовую аутентификацию против сервера LDAP. Чтобы дополнительно настроить установку, описанную в настоящем руководстве, обратитесь к Глава 13 – Конфигурация LDAP в руководстве администратора системы RHEL 7, уделяя особое внимание настройкам безопасности с использованием TLS.

Не стесняйтесь задавать любые вопросы, используя форму комментариев ниже.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/