|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> Основы LDAP
Основы работы с LDAP.
Автор: fr33man.
Установку и настройку ldap-сервера я буду производить на freebsd:
spider# uname -a
FreeBSD shield 6.1-RELEASE-p6 FreeBSD 6.1-RELEASE-p6 #0: Sun Sep
10 14:42:40 MSD 2006 root@spider:/usr/obj/usr/src/sys/SPIDER i386
spider#
| Немного теории.
Cлужба каталогов LDAP (Light Weight Directory Access Protocol), является упрощенным вариантом DAP X.500, разработанного еще в 1988 году для нужд телекоммуникаций. В основе модели директории LDAP лежит идея размещения объектов в вершинах древовидной структуры. Группировка же объектов происходит по принципу размещения их в вершине одного поддерева, причем группироваться могут совершенно разные объекты. Для поиска некоторого объекта необходимо указать идентификатор корня соответствующего поддерева. Данные размещаются в директории в виде объектов. Каждый объект имеет несколько атрибутов, последний в свою очередь имеет название и значение фиксированного в LDAP типа. Тип определяет формат значения, вид его представления, способы сопоставления и упорядочивания.
Объекту присваивается класс (или классы) к которому он принадлежит с помощью обязательного аттрибута objectClass, значением которого является имя класса. Классы объектов объявлены в схеме директории (directory schema), где задаются имя класса, атрибуты, тип атрибутов а также указывается их обязательность или опциональность. Также могут быть указаны и родительские классы, определения которых будут наследоваться. Естественно, атрибут, который упоминался в родительском классе, как обязательный, для дочернего класса также будет обязательным. Аналогично и с опциональными атрибутами. На этой радостной ноте, предлагаю перейти к практике.
Установка LDAP-сервера.
Главный сервер slapd входит в состав пакета openldap(www.openldap.org). Ставить будем из портов:
spider# make search name='openldap-server'
Port: openldap-server-2.2.30
Path: /usr/ports/net/openldap22-server
Info: Open source LDAP server implementation
Maint: delphij@FreeBSD.org
B-deps: db42-4.2.52_4 openldap-client-2.2.30
R-deps: db42-4.2.52_4 openldap-client-2.2.30
WWW: http://www.OpenLDAP.org/
Port: openldap-server-2.3.25
Path: /usr/ports/net/openldap23-server
Info: Open source LDAP server implementation
Maint: delphij@FreeBSD.org
B-deps: db43-4.3.29 libltdl-1.5.22 libtool-1.5.22_2 openldap-client-2.3.25
R-deps: db43-4.3.29 libltdl-1.5.22 openldap-client-2.3.25
WWW: http://www.OpenLDAP.org/
Port: openldap-server-2.4.2.a_1
Path: /usr/ports/net/openldap24-server
Info: Open source LDAP server implementation
Maint: delphij@FreeBSD.org
B-deps: db43-4.3.29 libltdl-1.5.22 libtool-1.5.22_2 openldap-client-2.4.2.a
R-deps: db43-4.3.29 libltdl-1.5.22 openldap-client-2.4.2.a
WWW: http://www.OpenLDAP.org/
spider#
| Я решил установить openldap-2.3.25, так как openldap-server-2.2.30 устаревшая версия, а openldap-server-2.4.2.a_1 только alpha.
Сначала ставим openldap-client:
spider# cd /usr/ports/net/openldap23-client/
spider# make install clean
spider# rehash
| Теперь сервер:
spider# cd /usr/ports/net/openldap23-server
spider# make config
---------------------------------------------------------------------¬
¦ Options for openldap-server 2.3.25 ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦ [ ] SASL With (Cyrus) SASL2 support ¦ ¦
¦ ¦ [ ] PERL With Perl backend ¦ ¦
¦ ¦ [ ] SHELL With Shell backend (disables threading) ¦ ¦
¦ ¦ [ ] ODBC With SQL backend ¦ ¦
¦ ¦ [ ] SLP With SLPv2 (RFC 2608) support ¦ ¦
¦ ¦ [ ] SLAPI With Netscape SLAPI plugin API ¦ ¦
¦ ¦ [X] TCP_WRAPPERS With tcp wrapper support ¦ ¦
¦ ¦ [X] BDB With BerkeleyDB support ¦ ¦
¦ ¦ [ ] ACCESSLOG With In-Directory Access Logging overlay ¦ ¦
¦ ¦ [ ] AUDITLOG With Audit Logging overlay ¦ ¦
¦ ¦ [ ] DENYOP With Deny Operation overlay ¦ ¦
¦ ¦ [ ] DYNGROUP With Dynamic Group overlay ¦ ¦
¦ ¦ [ ] DYNLIST With Dynamic List overlay ¦ ¦
¦ ¦ [ ] LASTMOD With Last Modification overlay ¦ ¦
¦ ¦ [ ] PPOLICY With Password Policy overlay ¦ ¦
¦ ¦ [ ] PROXYCACHE With Proxy Cache overlay ¦ ¦
¦ ¦ [ ] REFINT With Referential Integrity overlay ¦ ¦
¦ ¦ [ ] RETCODE With Return Code testing overlay ¦ ¦
¦ ¦ [ ] RWM With Rewrite/Remap overlay ¦ ¦
¦ ¦ [ ] SYNCPROV With Syncrepl Provider overlay ¦ ¦
¦ ¦ [ ] TRANSLUCENT With Translucent Proxy overlay ¦ ¦
¦ ¦ [ ] UNIQUE With attribute Uniqueness overlay ¦ ¦
¦ ¦ [ ] VALSORT With Value Sorting overlay ¦ ¦
¦ ¦ [ ] ACI With per-object ACIs (experimental) ¦ ¦
¦ ¦ [X] DYNAMIC_BACKENDS Build dynamic backends ¦ ¦
¦ ¦ [X] SLURPD Build slurpd replication daemon ¦ ¦
+-L-----v(+)---------------------------------------------------------+
¦ [ OK ] Cancel ¦
L---------------------------------------------------------------------
| В данном случае я собирал со следующими опциями:
- С поддержкой tcp wrappers
- С поддержкой Berkeley DB
- С поддержкой динамических бэкендов(ldbm и тд.)
- С поддержкой демона репликаций slurpd <br>
Теперь собираем и устанавливаем:
spider# make install clean
... skipped ...
spider# rehash
spider#
| Установка сервера закончена, теперь переходим к его настройке.
Настройка slapd.
Главный конфигурационный файл сервера slapd находится по адресу: /usr/local/etc/openldap/slapd.conf. Его и будем редактировать:
/usr/local/etc/openldap/slapd.conf:
# Подключаем схемы, основная схема -- core.schema, она обязательна!!
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
# Pid-файл
pidfile /var/run/openldap/slapd.pid
# Файл с аргумнтами, которые были переданы slapd
argsfile /var/run/openldap/slapd.args
# Путь к модулям
modulepath /usr/local/libexec/openldap
# подгружаем модуль ldbm
moduleload back_ldbm
# описываем доступ к информации
# указываем, что к аттрибуту userPassword
# себе(под кем Вы находитесь в системе)
# разрешена запись, анонимам предлагается
# зарегистрироваться, остальным пройти идти лесом. ))
access to attrs=userPassword
by self write
by anonymous auth
by * none
# Доступ к остальной информации: себе -- писать, анонимам читать, остальным ничего.
access to *
by self write
by anonymous read
by * none
# Примечание: пользователю cn=root,dc=l1523,dc=ru разрешена запись и чтение всего!
# Тип базы
database ldbm
# Корень базы
suffix "dc=l1523,dc=ru"
# dn администратора ldap
rootdn "cn=root,dc=l1523,dc=ru"
# пароль администратора
# генерируется командой slappasswd
rootpw {SSHA}6yoQWo9e0HkAkdRGovvSff3/Kh0uzj90
# директория, где будут храниться базы
directory /var/db/openldap-data
# уровень отладки
loglevel 256
# Индексы, для ускорения поиска по базе
index objectClass eq
index cn eq
| Добавляем в rc.conf строки, для запуска slapd и собственно запускаем:
spider# echo slapd_enable=\"YES\" >> /etc/rc.conf
spider# echo slapd_flags=\'-h \"ldapi://%2fvar%2frun%2fopenldap%2fldapi/ \
? ldap://172.16.0.1/\"\' >> /etc/rc.conf
spider# echo slapd_sockets=\"/var/run/openldap/ldapi\" >> /etc/rc.conf
spider# mv /usr/local/etc/rc.d/slapd /usr/local/etc/rc.d/slapd.sh
spider# /usr/local/etc/rc.d/slapd.sh start
Starting slapd.
spider#
| Добавление, удаление, редактирование и посик объектов.
Теперь нужно создать корневой объект нашего дерева. Создадим файл base.ldif с таким содержанием:
spider# cat base.ldif
dn: dc=l1523,dc=ru
objectClass: dcObject
objectClass: organization
objectClass: top
dc:l1523
o:l1523
spider#
| Теперь добавим эту запись в ldap:
spider# ldapadd -x -D "cn=root,dc=unix" -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=l1523,dc=ru"
spider#
| Все прошло без ошибок, значит у нас есть корневой объект. Давайте создадим контейнер test:
spider# cat test.ldif
dn: ou=test,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: test
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f test.ldif
Enter LDAP Password:
adding new entry "ou=test,dc=l1523,dc=ru"
spider#
| Давайте добавим пользователя lucky:
spider# cat lucky.ldif
dn: cn=lucky,ou=test,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: lucky
sn: lucky's sername
uid: lucky
userpassword:{SSHA} *
uidNumber: 0
gidNumber: 0
gecos: Lucky User
homeDirectory: /home/lucky
spider# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -W -f lucky.ldif
Enter LDAP Password:
adding new entry "cn=lucky,ou=test,dc=l1523,dc=ru"
spider#
| Параметры запуска:
-x : не использовать sasl
-D "dn" : под каким пользователем подключаться
-W : запросить ввод пароля
-f file : имя файла из которого брать информацию о добовляемом объекте.<br><br>
Добавили. Теперь давайте поищем информацию:
spider# ldapsearch -x -LLL -b 'dc=l1523,dc=ru' 'uid=lucky'
dn: cn=lucky,ou=test,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: lucky
sn: lucky's sername
uid: lucky
uidNumber: 0
gidNumber: 0
gecos: Lucky User
homeDirectory: /home/lucky
spider# ldapsearch -x -LLL -b 'dc=l1523,dc=ru' '(&(uid=lucky)(uidNumber=0))'
dn: cn=lucky,ou=test,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: lucky
sn: lucky's sername
uid: lucky
uidNumber: 0
gidNumber: 0
gecos: Lucky User
homeDirectory: /home/lucky
spider#
| Используемые параметры:
-x : не импользовать sasl
-LLL : уменьшить кол-во выводимой информации, может быть -L или -LL
-b 'dn' : искать, начиная с конкретного объекта dn
'filter' : последний параметр указывает фильтр для поиска, в филтре могут использовать шаблоны и логические выражения.
Теперь можно попробовать отредактировать нашего пользователя, например изменив ему homeDirectory, uidNumber и добавив loginShell, а так же удалив gecos. Создаем файл modify.ldif и изменяем информацию в ldap дереве.
spider# cat modify.ldif
dn: cn=lucky,ou=test,dc=l1523,dc=ru
changetype: modify
replace: homeDirectory
homeDirectory: /dev/null
-
replace: uidNumber
uidNumber: 100
-
add: loginShell
loginShell: /dev/null
-
delete: gecos
-
spider# ldapmodify -x -D "cn=root,dc=l1523,dc=ru" -W -f modify.ldif
Enter LDAP Password:
modifying entry "cn=lucky,ou=test,dc=l1523,dc=ru"
spider#
| Теперь посмотрим на изменения:
spider# ldapsearch -x -LLL -b 'dc=l1523,dc=ru' 'uid=lucky'
dn: cn=lucky,ou=test,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: lucky
sn: lucky's sername
uid: lucky
gidNumber: 0
homeDirectory: /dev/null
uidNumber: 100
loginShell: /dev/null
spider#
| Как видите, все успешно изменилось.
Если Вы хотите удалить объект, то нужно воспользоваться утилитой ldapdelete:
spider# ldapdelete -x -D "cn=root,dc=l1523,dc=ru" \
? -W 'cn=lucky,ou=test,dc=l1523,dc=ru'
Enter LDAP Password:
spider# ldapsearch -x -LLL -b 'dc=l1523,dc=ru' 'uid=lucky'
spider#
| Последний параметр - dn имя объекта, который Вы хотите удалить.
Заключение.
Очень важно понять основы работы ldap, иначе в будущем Вы не сможете грамотно управлять им.
размещено: 2006-11-08,
последнее обновление: 2006-11-14,
автор: fr33man
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Комментарии пользователей [24 шт.]