Эти материалы являются объектом авторского права и защищены законами РФ и международными
соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия
лицензионного договора на использование этих
материалов, или же вы не имеете права использовать настоящие материалы
Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда
продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только
лишь истории о прошлом
Базовые понятия сервера каталогов LDAP несколько обособлены от других UNIX сервисов, что обуславливает сложность начального вхождения в тему. В общем случае каталог - это
централизованное хранилище данных, доступных многим клиентам. Хороший пример таких данный - учетные записи пользователей или групп, каждая из которых является фактически
объектом с набором атрибутов-значений. Например учетная запись пользователя может содержать отдельные атрибуты для хранения логина, имени, фамилии, домашнего каталога,
командной оболочки и т.д. Каталог можно воспринимать как разновидность не реляционной базы данных, в которой объекты различных типов хранятся в виде иерархического дерева
Сервер OpenLDAP при загрузке загружает файлы схем, содержащие описания именованных атрибутов с указанием типа из предустановленного перечня, а также содержащих описание
классов - именованных групп из части описанных ранее атрибутов. Фактически каждый класс может быть объявлен как образующий (SUB) или вспомогательный (AUX), а атрибуты могут
быть объявлены обязательными либо необязательными, а также многострочными или однострочными. Атрибуты и классы - базовые понятия о хранении информации в объектах каталога
Еще одним важным понятием является собственно иерархия объектов, наиболее часто реализуемая в OpenLDAP последовательностью атрибутов типа directory component (dc),
organization (o) и organization unit (ou). Из этих элементов обычно формируется корневое имя каталога, а также формируется последующая иерархия каталога. Наиболее часто
используются схемы построения иерархии по DNS имени, или же по имени организации и подразделений. Примером первого варианта может служить корневое имя dc=ourorbits,dc=org
и контейнер для учетных записей пользователей ou=People,dc=ourorbits,dc=org. Примером второго варианта является корневое имя o=mycompany и иерархический контейнер
ou=it,o=mycompany
Получив данные о поддерживаемых атрибутах и классах из файлов схем, а также данные о разграничении доступа, корневом имени каталога и методе хранения данных, сервер OpenLDAP
готов принимать запросы на создание объектов, а также запросы на выборку данных об объектах из каталога. Наполнение каталога происходит методом отправки запросов на создание
объектов, содержащих подмножество описанных в файлах схем образующих и, возможно, вспомогательных классов, и, в том числе, значений всех или некоторых атрибутов этих классов.
Запросы могут описываться в обычных текстовых файлах по описанному в документации синтаксису и скармливаться идущим в составе сервера OpenLDAP утилитам ladpadd, ldapmodify,
ldapsearch и другим
Каждый объект в каталоге определяется уникальным именем (distinguished name - DN), состоящим из последовательно расположенных идентифицирующего атрибута объекта (обычно это
обязательный атрибут образующего (SUB) класса объекта, его называют также относительным уникальным именем, relative distinguished name, RDN), иерархического пути от корня и
корневого имени каталога. Для того, чтобы объект с неким DN мог располагаться не в корне, а в глубине сформированной иерархии, должны быть созданы отдельные объекты со своими
RDN, формирующими такую иерархию своим существованием. Примером может служить уникальное имя учетной записи пользователя uid=zerot,ou=People,dc=ourorbits,dc=org, где uid -
обязательный атрибут образующего (SUB) класса объекта, ou=People - иерархический путь от корневого имени, существующий в силу предварительного создания объекта Organizational
Unit с RDN атрибутом ou=People, а dc=ourorbits,dc=org - корневое имя каталога. Уникальное имя и иерархия - также основные понятия
Здесь важно понимать, что иерархия формируемся из атрибутов, описанных в файлах схем, путем простого последовательного (от корневого имени) создания в каталоге объектов,
содержащих классы с соответствующими атрибутами, выбранными в качестве RDN. Формально DN описавается как последовательность разделенных запятой пар имя_атрибута=значение,
отсортированных СПРАВА НАЛЕВО от корня через ветви (иерархию) к идентифицирующему атрибуту конкретного объекта. В общем случае также нужно помимать, что выбор RDN атрибута
может быть достаточно произвольным. Например, автор успешно строил и эксплуатировал каталоги, у которых в качестве RDN для учетных записей групп использовались как атрибут
common name (cn, используется по умолчанию), так и атрибут gid, в то же время для учетных записей пользователей использовался атрибут uid (по умолчанию) или common name
(cn)
Атрибуты созданных объектов могут модифицироваться запросами на модификацию, а запросы на выборку позволяют при наличии соответствующих полномочий получить значения атрибутов
для запрошенных объектов. Именно эту функциональность реализуют иерархические каталоги E-Directory от Novell, Active Directory от Microsoft, Oracle Internet Directory от Oracle
и другие, являющиеся по сути каталогами LDAP с дополнительным функционалом
В заключение можно сказать, что в настоящее время в Интернет появилось много русскоязычной информации по посторению каталога LDAP и настройке OpenLDAP в частности
Конфигурирование LDAP каталога OpenLDAP
Быстрый старт с LDAP под CentOS Linux
Не самая приятная новость заключается в том, что компания Red Hat, начав продвижения своего сервиса каталогов, поддерживает довольно старую версию наиболее распространённой
свободной реализации под названием OpenLDAP (2.3 вместо 2.4, существующего уже несколько лет). Конечно можно сконфигурировать OpenLDAP из исходников, однако это не тема быстрого
старта. На мой взгляд наибольшим отличием является смена механизма репликации, всвязи с чем рассматривать в этой статье репликацию мы не будем - материалы есть в Интернет.
Однако базовый функционал вполне себе работает, сконцентрируемся на его конфигурировании
Проверяем и по необходимости устанавливаем пакеты: openldap-clients, nss_ldap, openldap-servers, openldap
Выбираем имя домена LDAP и правим в /etс/openldap/ldap.conf, например
BASE dc=belonin,dc=ru
Правим имя LDAP домена, администратора и пароль в /etс/openldap/slapd.conf, например
suffix "dc=belonin,dc=ru"
rootdn "cn=ldapmanager,dc=belonin,dc=ru"
rootpw password_where
Редактируем файлы. Base.ldif - на предмет удаления ненужных контейнеров - для начала можно оставить только базовый контейнер, ou=People и ou=Group. Passwd.ldif и group.ldif
рекомендую выкинуть учётные записи системных пользователей и групп, т.к. они должны быть неотделимы от каждого сервера
Настраиваем PAM авторизацию с учётом LDAP, используя консольную команду setup->Настройка авторизации. В появившемся окне в разделе «информация пользователя» включаем опцию
«использовать LDAP», в разделе «Аутентификация» включаем опцию «использовать аутентификацию через LDAP» и жмём «Далее». В следующем окне указываем имя LDAP домена, например
dc=belonin,dc=ru и путь к серверу, например ldap://192.168.0.1
Альтерналивой является использование графической утилиты system-config-authentication, или же ручная правка конфигурационных файлов - как минимум /etc/nsswitch.conf,
/etc/ldap.conf, /etc/openldap/ldap.conf, /etc/pam.d/system-auth, что в настоящей статье опускается
Если всё сделано верно, можно авторизоваться с использованием LDAP каталога
Важно, что каталог LDAP может хранить пароли в различном виде - например открытый текст, хэш MD5, хэш CRYPT. Механизмы PAM и NSS коннекторов к LDAP каталогу (штатно
используются разработки компании PADL) также могут сконфигурированы на ожидание того или иного типа представления пароля. Также и утилиты, используемые для наполнения и
редактирования каталога LDAP могут быть сконфигурированы на заполнение поля пароля в том или ином виде. В выстраиваемой вами инфраструктуре, использующей каталог LDAP
необходимо выбрать один вид представления пароля и для коннекторов, и для утилит администрирования каталога LDAP
При запуске консольных утилит типа ps вы можете столкнуться с ситуацией, когда процессы. запущенные под учётными записями из каталога LDAP не разресолвливаются в имена, но
отображаются в виде цифрового идентификатора. Причём другие утилиты, например ls, отображают имена сетевых учётных записей вполне корректно
Что касается Samba
После развёртывания OpenLDAP, миграции прикладных пользователей и групп и настройке аутентификации через LDAP
создать ветвь ou=Computers
прописать параметры коннекта r LDAP в конфиге самбы - проще всего через SWAT
прописать пароль LDAP коннектора (админа) командой 'smbpasswd -W'
развернуть и настроить KUser (в т.ч. получить SID домена командой 'net getlocalsid' и прописать в KUser, утилита обеспечит текущее управление пользователями и группами,
а вот компьютеры добавляются в домен мерез механизмы более низкого уровня) и GQ для детального управоения
добавить к конфигурации nssldap в /etc/ldap.conf строки по аналогии:
# важно, что аккаунты компьютеров охватываются тоже
nss_base_passwd ou=Computers,dc=zerot,dc=ru?one
nss_base_passwd ou=People,dc=zerot,dc=ru?one
nss_base_shadow ou=People,dc=zerot,dc=ru?one
nss_base_group ou=Group,dc=zerot,dc=ru?one
развернуть скрипты поддержки LDAP (http://sourceforge.net/projects/ldapscripts/, требуют пакета sharutils) и сконфигурировать их, создать группы и пользователей и прверить
доступность из ОС (опционально настроить в PAM автодобавление домашнего каталога)
добавить использование этих скриптов Samba
add user script = /usr/local/bin/ldapadduser '%u' people
rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew'
delete user script = /usr/local/bin/ldapdeleteuser '%u'
add group script = /usr/local/bin/ldapaddgroup '%g'
delete group script = /usr/local/bin/ldapdeletegroup '%g'
add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
add machine script = /usr/local/bin/ldapaddmachine '%u' computers
добавить доменные группы
net groupmap add unixgroup=smbadmins rid=512 type=domain
net groupmap add unixgroup=smbusers rid=513 type=domain
net groupmap add unixgroup=nobody rid=513 type=domain
net groupmap add unixgroup=computers rid=515 type=domain
net groupmap list
важным аспектом является настройка корректного отображения национальных символов, для чего используются следующие опции конфигурирования (с учётом локальной специфики)
dos charset = CP866
character set = UTF-8
display charset = CP1251
для обеспечения функциональности контроллера домена используются следующие опции конфигурирования:
для принудительного выбора сервера в роли браузера сети
os level = 255
Примечание: важно, что опции типа в конфигурацоинном файле Samba 'hide unreadable file = yes' резко снижают скорость реакции сервера. Автор столкнулся с этим эффектом в 2003
году в процессе перевода организации с Novell Netware на Samba. Причём одиночное использование опции не вызывает сильного эффекта, но когда "шар" несколько и каждая используется
активно, наблюдается резкое торможение ответа сервера, что видно, например, на специфических графических приложениях. Для обычного хранилища документов этот эффект не
существенен