Чтиво: установка сервера часть 030

Настройка и использование LDAP. Часть IV.
Для поиска информации в базе LDAP используется утилита ldapsearch,
но для ее использования необходимо настроить параметры подключения к
LDAP серверу в файле /etc/openldap/ldap.conf (помимо него настройки
могут содержаться в файле $HOME/.ldaprc - домашнем каталоге
пользователя, который осуществляет запросы к базе). Итак,
begin ldap.conf # Определяет базу, действия с которой будут осуществляться по умолчанию
BASE dc=karavay-shops, dc=ru
# Определяет адрес LDAP-сервера, через ":" может указываться порт
# соединения
URI ldap://127.0.0.1
end ldap.conf Запросе к базе может состоять из двух полей: фильтра и списка
атрибутов, которые необходимо вывести. Фильтр состоит (подробнее man
ldap_serach) из типа атрибута и значения атрибута заключенных в круглые
скобки. В фильтре могут стоять логические операнды: and - "&", or -
"|", not - "!". Между атрибутом и значением атрибута может стоять одно
из значений, определяющих тип фильтра: "=", "~=", "<=", ">=". Если
сейчас я выполню:
$ ldapsearch -x "(objectClass=*)"
Enter LDAP Password:
version: 2
#
# filter: (objectClass=*)
# requesting: ALL
#
# search result
search: 2
result: 0 Success
# numResponses: 1
То результат поиска, как видно, будет нулевой. Даже если я
авторизуюсь в LDAP, как
$ ldapsearch -x -W -D uid=koal,ou=users,dc=karavay-shops,dc=ru \
"(objectClass=*)"
Результат поиска также будет нулевым. Это из-за ACL. Напомню, что
сейчас ACL представлен как:
access to attr=userPassword
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by self write
by anonymous auth
access to *
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
Где видно, что cn=admin, может иметь доступ ко всему, но доступ к
полю userPassword разрешается еще и авторизованным пользователям. Т.е.
команда:
$ ldapsearch -x -W -D cn=admin,dc=karavay-shops,dc=ru "(objectClass=*)"
выдаст содержимое всей базы.
Изменю немного ACL:
access to attr=userPassword
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by self write
by anonymous auth
access to dn=".*,ou=users,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by dn="cn=postfix,ou=services,dc=karavay-shops,dc=ru" read
by dn="cn=courier,ou=services,dc=karavay-shops,dc=ru" read
by self write
by anonymous auth
access to dn=".*,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
access to *
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
Видно, что к доступ содержимому "users" могут теперь получить:
cn=postfix и cn=courier на чтение, а авторизованный пользователь на
запись/чтение в свой объект. Причем первым двум объектам не будет
выведено значение поля userPassword, ибо это не разрешено (т.е.
запрещено) первым правилом.
$ /sbin/service ldap restart
Теперь
$ ldapsearch -x "(objectClass=*)"
Не даст никаких результатов, зато
$ ldapsearch -x -W -D uid=koal,ou=users,dc=karavay-shops,dc=ru \
"(objectClass=*)"
Выведет содержимое собственного контейнера. Сразу же рассмотрю
работу со списком атрибутов:
$ ldapsearch -x -W -D uid=koal,ou=users,dc=karavay-shops,dc=ru \
"(objectClass=*)" uid cn gecos userPassword
Выведет содержимое только перечисленных атрибутов.
Произведу окончательное изменение ACL:
access to attr=userPassword
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by dn="cn=courier,ou=services,dc=karavay-shops,dc=ru" read
by self write
by anonymous auth
access to dn=".*,ou=DNS,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by dn="cn=postfix,ou=services,dc=karavay-shops,dc=ru" read
by * read
access to dn=".*,ou=mail,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by dn="cn=postfix,ou=services,dc=karavay-shops,dc=ru" read
by * none
access to dn=".*,ou=users,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by dn="cn=postfix,ou=services,dc=karavay-shops,dc=ru" read
by dn="cn=courier,ou=services,dc=karavay-shops,dc=ru" read
by self write
by anonymous auth
access to dn=".*,dc=karavay-shops,dc=ru"
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
access to *
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
В результате, к контейнеру "DNS" имеют доступ все, даже анонимные
пользователи (правда, только на чтение) , а к "mail" на чтение имеет
доступ только cn=postfix (замечу, что к "users" еще и cn=courier).
Также доступ на чтение к userPassword появился у cn=courier.
$ /sbin/service ldap restart
$ ldapsearch -x "(objectClass=*)"
Выведет только содержимое "DNS"
$ ldapsearch -x -W -D uid=koal,ou=users,dc=karavay-shops,dc=ru \
"(objectClass=*)"
Выведет содержимое своего контейнера и "DNS"
$ ldapsearch -x -W -D cn=postfix,ou=services,dc=karavay-shops,dc=ru \
"(objectClass=*)"
Выведет "users" (без отображения значения атрибута "userPassword"),
"mail" и "DNS".
$ ldapsearch -x -W -D cn=courier,ou=services,dc=karavay-shops,dc=ru \
"(objectClass=*)"
Выведет "users", отображая значение атрибута "userPassword", и
"DNS".
Допустим, я хочу узнать про содержимое не всего "DNS" а только
конкретной ветки "0.0.127.in-addr.arpa", тогда запрос будет построен
следующим образом:
$ ldapsearch -x -b zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=karavay-shops\
,dc=ru "(objectClass=*)"
Или я хочу узнать все локальные транспорты:
$ ldapsearch -x -W -D cn=postfix,ou=services,dc=karavay-shops,dc=ru \
-b ou=transports,ou=mail,dc=karavay-shops,dc=ru \
"(&(objectClass=mailDomainTransport)(mailTransport=local))"
Еще сложнее запросы:
$ ldapsearch -x -W -D cn=admin,dc=karavay-shops,dc=ru \
"(&(|(objectClass=mailAccount)(objectClass=mailRecipient)\
(mailBox=myvirual.mydo*))"
$ ldapsearch -x "(objectClass=*)! (objectClass=organizationalUnit)"
C уважением, Kolotov Alexandr aka mr. Эбола
отвечать: akmypo***@m*****.ru
ICQ: 100349254
| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.kirovlug-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.kirovlug--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru