Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

Чтиво: установка сервера часть 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

Ответить   Thu, 4 Mar 2004 12:55:04 +0300 (#96375)