LXF142:OpenLDAP
|
|
|
Содержание |
OpenLDAP как замена ActiveDirectory
- Свободная реализация готова заменить проприетарный аналог – как минимум, во многих типичных случаях. Андрей Андреев обозревает службы каталогов.
Всем известен тот факт, что в операционных системах MS Windows для организации централизованного хранения и управления ресурсами сети используется Active Directory (AD), которая являет собой средство иерархического представления ресурсов, принадлежащих некоторой отдельно взятой организации, и информации об этих ресурсах. Под этим понятием могут подразумеваться материальные ресурсы, персонал, сетевые ресурсы и т. д. Но, несмотря на все наработки Microsoft (например, GPO), AD есть не что иное, как служба каталогов, работающих по протоколу LDAP (упрощенный протокол DAP). Соответственно, любая служба каталогов, работающая по данному протоколу, может частично или полностью заменить AD в зависимости от хранящихся в базе службы каталогов данных. В мире СПО существует несколько действительно стоящих реализаций служб каталогов: OpenLDAP, Red Hat Directory Server, Mandriva Directory Server. На Linux давно портированы многие коммерческие продукты этого класса – например, Novell eDirectory; но наиболее гибкая из них в использовании – OpenLDAP. Её мы сегодня и рассмотрим.
Что такое OpenLDAP?
Итак, OpenLDAP – это служба каталогов, которая позволяет нам работать с различными сетевыми ресурсами (пользователями, компьютерами, принтерами, зонами DNS, а также всем, что необходимо вам для работы).
Вся работа осуществляется по протоколу LDAP (англ. Lightweight Directory Access Protocol). Это сетевой протокол для доступа к службе каталогов X.500, разработанный IETF как облегчённый вариант ITU-T протокола DAP. LDAP – относительно простой протокол, использующий TCP/IP и позволяющий производить операции авторизации [bind], поиска [search] и сравнения [compare], а также операции добавления, изменения или удаления записей.
Любая запись в каталоге LDAP состоит из одного или нескольких атрибутов и обладает уникальным именем (DN – англ. Distinguished Name). Уникальное имя состоит из одного или нескольких относительных уникальных имен, разделённых запятой. Относительное уникальное имя имеет вид «Имя Атрибута=значение». На одном уровне каталога не может существовать двух записей с одинаковыми относительными уникальными именами. В силу такой структуры уникального имени записи в каталоге можно легко представить в виде дерева. Вся информация хранится в базе данных, а доступ к ней осуществляется по протоколу LDAP.
В OpenLDAP для хранения информации используется база данных Berkeley DB, что накладывает ряд ограничений на количество записей, хранимых нами. Эмпирически выявлено, что для 400 – 500 записей базы данных Berkeley DB достаточно. Однако, если количество наших записей в службе каталогов более 500, предпочтительней использовать базы данных SQL. Как следствие, можно уменьшить время запроса.
Для работы с SQL необходимо в основном конфигурационном файле slapd.conf подключить необходимый модуль back_sql.la, раскомментрировав его, а также путь к модулям. После этого вместо типа базы данных bdb укажите sql в параметре database и подготовьте таблицы SQL. Подробнее с этим можно познакомиться в HowTo http://darold.net/projects/ldap_pg/HOWTO/index.html.
Установка и настройка
Устанавливать OpenLDAP мы будем в дистрибутиве CentOS. Для установки выполним команду
# sudo yum install openldap*
Основной конфигурационный файл находится в каталоге /etc/openldap/ и называется slapd.conf. Для первоначальной настройки достаточно указать значения следующим параметрам: suffix, rootdn, rootpw.
Пример:
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # modulepath /usr/lib/openldap # modules available in openldap-servers-sql RPM package: # moduleload back_sql.la database bdb suffix “dc=lw,dc=lan” rootdn “cn=Manager,dc=lw,dc=lan” rootpw secret directory /var/lib/ldap index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub
Следует отметить, что в примере представлен не весь конфигурационный файл, а только его часть.
Запустим службу каталогов:
#/etc/init.d/ldap start
Для работы нам необходимо занести в базу OpenLDAP необходимую минимальную информацию – например, запись администратора каталога. Но предварительно рассмотрим структуру хранения записей LDAP:
- Самый верхний уровень («корень» дерева ):
dc=lw,cd=lan
Здесь объект класса dc – Domain Controller, как это принято и в AD.
- Следующий уровень ou – Organization Unit («ветвь» дерева, контейнерный объект), в которой по умолчанию создаются объекты, представляющие пользователей:
ou=People,dc=lw,dc=lan
- Сами пользователи будут представлены в виде объектов следующего вида:
uid=user,ou=People,dc=lw,dc=lan
Структура записей представляется в виде дерева, с корневым элементом dc=lw,dc=lan. Доступ ко всем веткам дерева имеет только администратор каталога или пользователь, наделенный соответствующими правами. Например, пользователь user не имеет прав на просмотр содержимого каталога выше ветки ou=People,dc=lw,dc=lan.
Итак, перейдем к практике и создадим файл test.ldif.
dn: dc=lw,dc=lan //корень каталога, suffix, наш домен dc: lw objectClass: top objectClass: dcObject objectClass: organization o: test dn: cn=Manager,dc=lw,dc=lan // администратор каталога; // если рассматривать objectClass: top // относительно файла slapd.conf, это rootdn objectClass: organizationalRole cn: Manager dn: ou=people,dc=lw,dc=lan // ветка people ( в AD ветка // называется Users) ou: people objectClass: top objectClass: organizationalUnit dn: uid=user,ou=people,dc=lw,dc=lan //наш первый пользователь uid: user cn: User objectClass: account objectClass: posixAccount objectClass: top uidnumber: 1001 gidnumber: 1001 homedirectory: /home/user gecos: User userpassword: 123456
На первый взгляд здесь не всё так просто. Однако всё гораздо легче, чем кажется. dn указывает на начало новой ветки в нашем дереве структуры каталога, а дальше идет описание объектных классов и атрибутов записи.
Где взять объектные классы и соответствующие атрибуты? Для этого существуют специальные файлы-схемы с расширением *.schema, которые расположены в каталоге /etc/openldap/schema/. Рассмотрим часть такой схемы, поскольку там много интересной информации.
Взять, к примеру, файл /etc/openldap/schema/core.schema:
attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' ) DESC 'RFC2256: organization this object belongs to' SUP name ) … objectclass ( 2.5.6.4 NAME 'organization' DESC 'RFC2256: an organization' SUP top STRUCTURAL MUST o MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) …
Для рассмотрения мы взяли только один атрибут и один класс, содержащий этот атрибут. Описание атрибутов начинается с зарезервированного слова attributetype. Далее в круглых скобках идут указания параметров, обязательных и нет: OID (Object Identifier), имя атрибута NAME, комментарий DESC и SUP (зависимости от других атрибутов). Описание атрибутов всегда пишут выше описания классов. Затем идет описание класса, где используется этот атрибут.
Описание классов начинается с зарезервированного слова objectclass, а далее в круглых скобках OID, имя класса NAME, комментарий, SUP, обязательный атрибут со значением MUST, необязательные атрибуты MAY.
Где взять OID для написания своих схем? Есть два решения этого вопроса:
- Зарезервировать за своей организацией определенный OID в соответствующих учреждениях.
- Использовать специальный диапазон значений согласно официальной документации (http://www.openldap.org/doc/admin24/schema.html).
Создав свою собственную схему, в файле slapd.conf, в разделе include, необходимо подключить свою схему по аналогии со стандартными и перезапустить службу каталогов.
Чтобы добавить нашу запись в каталог, необходимо выполнить команду ldapadd:
# ldapadd -x -D “cn=Manager,dc=lw,dc=lan” -w secret -f test.ldif
А для просмотра содержимого каталога можно воспользоваться командой ldapsearch:
# ldapseach -x -D “cn=Manager,dc=lw,dc=lan” -W -b “dc=lw,dc=lan”
Как видно из примера, были выбраны suffix dc=lw,dc=lan, где lan – сокращение от указания типа сети (подразумевалось локальная сеть), а lw – сокращение от LinuxWizard (один из немногих разработчиков сетевых решений на базе технологии службы каталогов в России). Rootdn cn=Manager,dc=lw,dc=lan, а rootpw secret – пароль администратора каталога.
Помимо команд ldapsearch и ldapadd, есть еще ldapmodify (изменение данных каталога) и ldapdelete (удаление записей).
Более детальное описание всех команд можно посмотреть в документации на сайте http://www.openldap.org/doc. Отметим, что для всех команд надо указать, кем подключаться (в нашем случае –Manager’ом) и куда подключаться, точнее, в какую ветку дерева каталога (-b "dc=lw,dc=lan", а может быть, "ou=people,dc=lw,dc=lan", если у пользователя нет прав доступа к более верхним веткам).
Чтобы ваш пароль, указанный в явном виде, никто не увидел «из-за плеча», на экране монитора заменяем параметр команд «-w secret» на «-W» и вводим пароль при запросе.
Обратите внимание на то, что командой ldapsearch можно просмотреть содержимое не только службы каталогов OpenLDAP, но и RHDS подобных служб каталогов, а также MS Active Directory. Так как в MS не всё как у людей, параметры видоизменены, но смысл их тот же. Приведем пример просмотра содержимого AD:
#ldapsearch -x -D Administrator@example.com -w password -b ‘’dc=example,dc=com’’ -h host
Занеся в каталог всю информация по организации, можно настраивать различные службы на аутентификацию и авторизацию через LDAP. Подробнее о том, какие это службы и как их настраивать, будет рассмотрено во второй части данной статьи.
Приведенные шаги хороши для тех случаев, когда необходимо настроить все с нуля. Что же делать, когда существует уже настроенная и работающая служба каталогов? Для этого имеются специальные скрипты для миграции данных. Существуют как стандартные скрипты, так и сторонние. Стандартные скрипты расположены в каталоге /usr/share/openldap/migration/, а сторонние входят в состав Windows to Linux Migration Toolkit (http://sourceforge.net/projects/w2lmt/files/w2lmt/w2lmt-0.3.1/w2lmt-0.3.1.tar.gz/download). Скрипты w2lmt очень полезны для миграции с Active Directory.
В состав w2lmt входят скрипты, написанные на Perl, и файлы настройки для скриптов. Основные скрипты – это w2lmt-migrate-dns и w2lmt-migrate-smbauth. Они предназначены для переноса информации DNS и параметров аутентификации соответственно. Для работы нам понадобятся samba3 и smbldap-tools.
Указав свои настроек сервера AD в файлах настройки migrate-smbauth.conf и migrate-dns.conf, можно запускать скрипты:
#./ w2lmt-migrate-dns -f migrate-dns.conf #./ w2lmt-migrate-smbauth -f migrate-smbauth.conf
Подробнее использование скриптов w2lmt описано в книге Дэвида Аллена «Переход с Windows на Linux» и в статье «Замена Microsoft AD на OpenLDAP+Samba3» (http://linux.mkrovlya.ru/book/замена-microsoft-ad-на-openldapsamba3).
Помимо явной миграции, есть возможность создания проксирования AD, маппинга атрибутов. Т. е. все необходимые службы можно настроить на работу с OpenLDAP, а он, в свою очередь, будет обращаться (перенаправлять запрос) к AD. Это используется в тех случаях, когда без AD совсем не обойтись.
Репликация
OpenLDAP имеет различные конфигурации для создания реплики. Ранее, до версии 2.4, существовал механизм, позволяющий «главному» [master] серверу получать обновления службы каталогов с различных других клиентов, а «второстепенные» [slave] сервера получали обновления только с «главного», указанного в конфигурации. Структура репликации была строго определена, и любая база данных могла выполнять только одну роль: или master, или slave. Начиная с версии 2.4, OpenLDAP поддерживает различные топологии репликации. Вместо понятий master-сервер и slave-сервер используются «провайдер» [provider] и «потребитель» [consumer]. «Провайдер» реплицирует обновления каталога «потребителю», а «потребитель» получает обновления от «провайдера». В отличие от строго определенных ролей master/slave, роли provider/consumer не являются строго определенными. Обновления репликации, полученные одним «потребителем», могут быть отправлены другому серверу, таким образом, «потребитель» действует одновременно как «провайдер». В роли «потребителя» может быть не только сервер LDAP, но и клиент LDAP.
Подробнее об использовании и настройке различных топологиях репликации можно ознакомиться в официальной документации (http://www.openldap.org/doc/admin24/replication.html), а мы для примера рассмотрим syncrepl – это механизм репликации со стороны «потребителя». Конфигурация syncrepl определяется в файле slapd.conf на «сервере-потребителе». Начальная репликация может быть выполнена запуском механизма syncrepl без синхронизации cookie или загрузкой файла LDIF, созданного как резервное копирование «провайдера». Syncrepl автоматически синхронизирует «потребительскую» копию с текущим содержимым «провайдера», позволяя не останавливать «провайдер», во избежания несогласованности копий. На стороне «провайдера» в slapd.conf, основной конфигурационный файл OpenLDAP, добавляем строки
database bdb suffix dc=lw,dc=lan rootdn dc=lw,dc=lan directory /var/ldap/db index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100
Syncprov-checkpoint отвечает за тестирование контрольных точек после операции записи. 100 – это количество операций, 10 – это минуты. Syncprov-sessionlog отвечает за ведение лога, и параметр 100 – это размер лога. На стороне «потребителя» основной конфигурационный файл slapd.conf выглядит так:
database hdb suffix dc=lw,dc=lan rootdn dc=lw,dc=lan directory /var/ldap/db index objectclass,entryCSN,entryUUID eq syncrepl rid=123 provider=ldap://provider.lw.lan:389 type=refreshOnly interval=01:00:00:00 searchbase=”dc=lan,dc=lw” filter=”(objectClass=organizationalPerson)” scope=sub attrs=”cn,sn,ou,telephoneNumber,title,l” schemachecking=off bindmethod=simple binddn=”cn=syncuser,dc=lw,dc=lan” credentials=secret
В этом примере «потребитель» будет подключаться к «провайдеру» по порту 389 для выполнения запроса синхронизации один разв день. Он будет связываться [bind] как cn=syncuser,dc=lw,dc=lan с использованием простой аутентификации по паролю «secret».
Управление доступом cn=syncuser,dc=lw,dc=lan должно быть установлено на провайдере. Для запуска синхронизации не надо перезагружать «провайдера» – достаточно запустить «потребителя».
Системы управления
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Администрирование службы каталогов OpenLDAP – достаточно сложная задача для человека, только что познакомившегося с ней. Для упрощения задач администрирования существуют различные системы управления, например, Ebox, GOsa, Webmin, phpLDAPadmin и другие. Их основная задача – избавить вас от прямого обращения к атрибутам и объектным классам. Согласитесь, так гораздо проще!
Все системы управления можно разделить на три категории:
- Низкоуровневые средства редактирования данных
- Системы управления, интегрированные в службу каталогов
- Системы управления с графическим интерфейсом
Рассмотрим их подробнее. К низкоуровневыем средствам редактирования данных относятся WebMin, phpLDAPadmin, Lume. Особенность данных средств заключается в том, что у вас нет ограничений в управлении службой каталогов, но вы опять же напрямую связаны с атрибутами и объектными классами. Интегрированные системы управления относятся к Red Hat Directory Server и подобных ему (Centos DS, 389 DS). Здесь существуют две реализации системы управления: web-интерфейс и клиент-серверная реализация на Java. Как правило, интегрированные системы управления дают мало возможностей и неудобны в пользовании для тех, кто не привык к службе каталогов. Графические системы позволяют наглядно визуализировать объекты, находящиеся в LDAP-каталоге, и избавляют вас от поиска необходимых атрибутов и объектных классов при создании записей. Чаще всего графическая система управления представляет собой не что иное, как web-интерфейс к службе каталога.
В ходе анализа различных существующих графических систем управления можно отдельно выделить GOsa (рис. 1). Эта графическая система управления проста в использовании и настройке. Выбор системы управления основывался по таким критериям, как
- контроль доступа в интернет (DHCP, DNS, Squid);
- управление почтовым сервером и сетевым фильтром;
- поддержка плагинов и телефонии;
- тонкий клиент (FAI);
- Posix- и Kolab-аккаунт.
Помимо GOsa, существует еще ряд различных систем управления, например, Ebox (рис.2). Важно отметить, что отображение объектов в GOsa происходит только в том случае, если в их описании присутствует какой-либо из специальных классов, зарегистрированных в схемах GOsa. Такой подход позволяет использовать другие проекты, работающие с LDAP-каталогом, без существенной их модификации. Соответственно, если планируется использовать базу LDAP только для администрирования пользовательских учетных записей в локальной сети и для интеграции с Samba, то лучшего средства администрирования просто не найти. Из рис. 3 видно, что знание атрибутов и объектных классов необязательно для создания какой-либо записи.
Для работы GOsa в дистрибутиве CentOS необходимо обновить PHP до версии 5.2. Это можно сделать, добавив репозиторий ius. Для установки и настройки службы каталогов OpenLDAP и системы управления GOsa можно воспользоваться скриптом gosa.sh, который вы найдете на диске. Что же именно делает наш скрипт?
Для начала создается файл ius.repo, который нам понадобится при обновлении PHP. Помимо PHP, необходимо установить perl-LDAP, perl-Crypt-SmbHash, httpd и, как само собой разумеющееся, службу каталогов OpenLDAP. После чего смело можно установить систему управления GOsa. Скрипт скачивает и устанавливает 3 пакета: gosa-2.6.9‑1.noarch.rpm, gosa-schema-2.6.9‑1.noarch.rpm, gosa-help-en-2.6.9‑1.noarch.rpm. Так как в стандартном пакете gosa-schema-2.6.9‑1.noarch.rpm нет схемы gosa-custom.schema, которая содержит полезные атрибуты и классы, создадим его сами.
После установки необходимых пакетов можно приступать к настройке OpenLDAP. Для этого запишем в файл slapd.conf параметры: suffix, rootdn, rootpw, а также необходимые индексы для GOsa. Теперь почти всё готово; осталось задать параметры PHP для системы управления GOsa, отредактировав файл php.ini. Для работоспособности всего, что мы делали, запускаем службу ldap и службу httpd. Финальный штрих – открываем Mozilla Firefox, в адресной строке вводим http://localhost/gosa и задаем необходимые параметры «конфигуратору» GOsa. Помимо использованных здесь трех пакетов GOsa, существует немало плагинов для хранения данных DNS, Samba, Squid и т. д. Все они доступны по адресу http://oss.gonicus.de/pub/gosa/, где можно скачать исходники или пакеты для RedHat-дистрибутивов и для Debian-дистрибутивов.
Итог
В итоге мы имеем службу каталогов с графической системой управления, позволяющую хранить всю необходимую информацию о ресурсах сети. Именно это и является основной задачей любой службы каталогов. Данное решение на текущем этапе не сможет заменить AD, т. к. для этого необходимо настроить службы аутентификации (PAM), файлового сервера (Samba), почтового сервера (Postfix и Dovecot), прокси-сервера (Squid) и т. д. Данный этап настройки будет рассмотрен в следующей статье – «Службы, которые могут аутентифицироваться по LDAP».
Плюсы:
- Открытость решения и расширенный функционал.
- Возможность полной или частичной замены AD, а следовательно, возможность прямой экономии в рублях.
Минусы:
- Главный и единственный – отсутствие групповых политик.
Данной проблематикой ныне занимается кафедра открытых информационных технологий и информатики Петербургского госуниверситета аэрокосмического приборостроения, где ведутся разработки создания аналога групповых политик на ОС GNU/Linux и других решений на базе СПО и службы каталогов.
Служба каталогов: Как это работает?
Для более ясного понимания, что же такое служба каталогов, можно привести сравнение службы каталогов OpenLDAP с телефонным или адресным справочниками (в англоязычном варианте – каталогами, directory). Если вам понадобилось найти телефон Ивана Ивановича Иванова, то, открыв телефонный справочник на странице N, вы найдёте искомое. Но вот незадача! Представьте, что на одной странице совсем рядом оказалось сразу два, а может, и три Ивана Ивановича Ивановых! Что же делать? Как определиться с тем, кто нам нужен?
Именно для такой ситуации и вводится понятие уникального имени – distinguished name (dn). Distinguished name дословно переводится как отличительное имя; соответственно, его назначение – отличать одну запись от других записей. Любая служба каталогов строится на уникальных именах ресурсов сети и описании их свойств. Преимущество службы каталогов в том, что мы можем записывать не только фамилию человека (название компании, организации) и его телефон, а всё, что пожелаем! Для создания записи о компании достаточно указать уникальное имя и использовать объектный класс (objectClass) organization с выбранными в нем атрибутами (attribytetype).
Запись в телефонном справочнике:
Organization Name: Acme Services Street Address: 123 West First Street City: Chicago State: Illinois Postal Code: 60616-1234 Country: USA Phone Number: +1 773 555 8943 Phone Number: +1 800 555 9834
Запись в службе каталогов:
dn: o=Acme Services, l=Chicago, st=Illinois, c=US o: Acme Services postalAddress: 123 West First Street l: Chicago st: Illinois postalCode: 60616-1234 c: US telephoneNumber: +1 773 555 8943 telephoneNumber: +1 800 555 9834 objectclass: organization
Итак, мы создали уникальную запись об организации с информацией из телефонного справочника. Это и есть основа службы каталогов – уникальные имена (DN), описанные с помощью классов (objectClass) и атрибутов (attributetype).