Введение в круг понятий. UNIX/Linux  
  Обзор каталогов LDAP  


Эти материалы являются объектом авторского права и защищены законами РФ и международными соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия лицензионного договора на использование этих материалов, или же вы не имеете права использовать настоящие материалы

Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только лишь истории о прошлом


Базовые понятия сервера каталогов 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
     
  • Запускаем LDAP сервер командой service ldap start
     
  • Правим в файле /usr/share/openldap/migration/migrate_common.ph параметры
    $DEFAULT_MAIL_DOMAIN = "dc=belonin,dc=ru";
    $DEFAULT_BASE = "dc=belonin,dc=ru";
     
  • Готовим файлы с начальными записями базы, используя утилиты миграции LDAP
    /usr/share/openldap/migration/migrate_base.pl > /tmp/base.ldif
    /usr/share/openldap/migration/migrate_passwd.pl /etc/group > /tmp/group.ldif
    /usr/share/openldap/migration/migrate_group.pl /etc/passwd > /tmp/passwd.ldif
     
  • Редактируем файлы. Base.ldif - на предмет удаления ненужных контейнеров - для начала можно оставить только базовый контейнер, ou=People и ou=Group. Passwd.ldif и group.ldif рекомендую выкинуть учётные записи системных пользователей и групп, т.к. они должны быть неотделимы от каждого сервера
     
  • Заливаем данные в каталог командами
    ldapadd -x -D "cn=ldapmanager,dc=belonin,dc=ru" -w пароль_администратора -f base.ldif
    ldapadd -x -D "cn=ldapmanager,dc=belonin,dc=ru" -w пароль_администратора -f group.ldif
    ldapadd -x -D "cn=ldapmanager,dc=belonin,dc=ru" -w пароль_администратора -f passwd.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
     
  • для обеспечения функциональности контроллера домена используются следующие опции конфигурирования:
    workgroup = ИМЯ_ДОМЕНА
    preferred master = yes
    domain master = yes
    local master = yes
    domain logons = yes
    
  • для принудительного выбора сервера в роли браузера сети
    os level = 255
     

Примечание: важно, что опции типа в конфигурацоинном файле Samba 'hide unreadable file = yes' резко снижают скорость реакции сервера. Автор столкнулся с этим эффектом в 2003 году в процессе перевода организации с Novell Netware на Samba. Причём одиночное использование опции не вызывает сильного эффекта, но когда "шар" несколько и каждая используется активно, наблюдается резкое торможение ответа сервера, что видно, например, на специфических графических приложениях. Для обычного хранилища документов этот эффект не существенен


Белонин С.С. (С), сентябрь 2004 года

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2024. Дата последней модификации страницы:2019-12-04 00:43:28