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

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

За 2004-03-04

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

Настройка и использование LDAP. Часть V.

Для связки bind и LDAP необходимо научить bind понимать LDAP. В
стандартной поставке bind нет такой возможности. Зато там заранее
предусмотрен механизм "Simplified Database Interface" (sdb) с помощью
которого мы можем использовать bind с другими системами хранения
данных. Для нас благо ничего программировать не нужно. Потому что уже
все спрограммированно - необходимо только наложить патч на исходники
bind. Этот патч я взял на http://www.ldapzone.spb.ru/ . По идее все
необходимое уже есть в дереве исходных кодов (в contrib/sdb/), но там
надо немножко помучаться, следуя по шагам алгоритма (описанного там
же), в результате чего получим те же изменения, которые и делает патч.

Вообщем, распаковываю исходники bind и копирую патч

$ rpm -ihv bind-9.2.1-16asp.src.rpm
$ cp bind_ldap.patch /usr/src/asplinux/SOURCES/

Немного правлю spec-файл в /usr/src/asplinux/SPECS/. После всех
строчек с объявлением известных патчей вставляю:

Patch4: bind_ldap.patch

И в секцию %prep добавляю:

%patch4 -p1

Все. Собираю пакет:

$ rpmbuild -bb --clean bind.spec

В /usr/src/asplinux/RPMS/i386 должен появиться
bind-9.2.1-16asp.rpm. Устанавливаю его:

$ rpm -Uhv bind-9.2.1-16asp.rpm

Готово. Теперь нужно обратить внимание на LDAP. Часть данных
описывающих зоны уже занесена. Надо занести данные еще о двух зонах:
"karavay-shops.ru" и "2.168.192.in-addr.apra". Заодним, я попробую
объяснить, что именно заносится. Итак, прямая зона "karavay-shops.ru":

***********************************************************************
$TTL 86400
@ IN SOA bridge.karavay-shops.ru. root.bridge.karavay-shops.ru.
(
2003120201 28800 14400 3600000 86400 )
IN NS bridge.karavay-shops.ru.
IN A 192.168.2.254
IN MX 0 bridge.karavay-shops.ru.
bridge IN A 192.168.2.254
IN MX 0 bridge
ns IN CNAME bridge
www IN CNAME bridge
ftp IN CNAME bridge
ntp IN CNAME bridge
smtp IN CNAME bridge
pop IN CNAME bridge
nserv IN A 192.168.2.1
vika IN A 192.168.2.11
mily IN A 192.168.2.12
nina IN A 192.168.2.13
tany IN A 192.168.2.14
nata IN A 192.168.2.15
yurist IN A 192.168.2.21
admin IN A 192.168.2.100
nikolay IN A 192.168.2.130
tanya IN A 192.168.2.140
secretary IN A 192.168.2.150
***********************************************************************

Тогда в базу необходимо добавить следующие данные:

begin ou_dns_kar.ldif # Контейнер зоны
dn: zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
zoneName: karavay-shops.ru
relativeDomainName: karavay-shops.ru

# SOA запись в описании зоны
dn: relativeDomainName=@,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: @
zoneName: karavay-shops.ru
dNSClass: IN
sOARecord: bridge.karavay-shops.ru. root.bridge.karavay-shops.ru. 2004022701
28800 14400 3600000 864
00
# NS запись (Name Server)
nSRecord: bridge.karavay-shops.ru.
# A запись (Address)
aRecord: 192.168.2.254
# MX запись (Mail eXchange)
mXRecord: 0 bridge.karavay-shops.ru.

# A и MX записи для имени bridge. Здесь видно что все атрибуты для
# данного relativeDomainName относятся только к нему и не нужно отдельно
# описывать кажды атрибут
dn: relativeDomainName=bridge,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: bridge
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.254
mXRecord: 0 bridge

# CNAME записи указывающие на bridge. Это пример того, что несколько может быть
не только атрибутов-записей, но и атрибутов-имен
dn: relativeDomainName=ns,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: ns
relativeDomainName: www
relativeDomainName: ftp
relativeDomainName: ntp
relativeDomainName: smtp
relativeDomainName: pop
zoneName: karavay-shops.ru
dNSClass: IN
cNAMERecord: bridge

# Здесь и дальше обычные А записи
dn: relativeDomainName=nserv,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: nserv
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.1

dn: relativeDomainName=vika,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: vika
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.11

dn: relativeDomainName=mily,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: mily
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.12

dn: relativeDomainName=nina,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: nina
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.13

dn: relativeDomainName=tany,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: tany
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.14

dn: relativeDomainName=nata,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: nata
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.15

dn: relativeDomainName=yurist,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: yurist
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.21

dn: relativeDomainName=admin,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: admin
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.100

dn: relativeDomainName=nikolay,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: nikolay
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.130

dn: relativeDomainName=tanya,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: tanya
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.140

dn: relativeDomainName=secretary,zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: secretary
zoneName: karavay-shops.ru
dNSClass: IN
aRecord: 192.168.2.150
end ou_dns_kar.ldif Данные касающиеся описания зоны 2.168.192.in-addr.arpa

***********************************************************************
$TTL 86400
@ IN SOA bridge.karavay-shops.ru. root.bridge.karavay-shops.ru.
(
2003112102 28800 14400 3600000 86400 )
IN NS bridge.karavay-shops.ru.
1 IN PTR nserv.karavay-shops.ru.
11 IN PTR vika.karavay-shops.ru.
12 IN PTR mily.karavay-shops.ru.
13 IN PTR nina.karavay-shops.ru.
14 IN PTR tany.karavay-shops.ru.
15 IN PTR nata.karavay-shops.ru.
21 IN PTR yurist.karavay-shops.ru.
100 IN PTR admin.karavay-shops.ru.
130 IN PTR nikolay.karavay-shops.ru.
140 IN PTR tanya.karavay-shops.ru.
150 IN PTR secretary.karavay-shops.ru.
254 IN PTR bridge.karavay-shops.ru.
***********************************************************************

begin ou_dns_kar_r.ldif dn: zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: 2.168.192.in-addr.arpa

# SOA запись
dn: relativeDomainName=@,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: @
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
sOARecord: bridge.karavay-shops.ru. root.bridge.karavay-shops.ru. 2004022701
28800 14400 3600000 864
00
nSRecord: bridge.karavay-shops.ru.

# В обратной зоне почто все также как и в прямой, только вместо А
# записей - PTR (PoinTeR)
dn: relativeDomainName=1,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 1
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
# PTR -
pTRRecord: nserv.karavay-shops.ru.

dn: relativeDomainName=11,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 11
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: vika.karavay-shops.ru.

dn: relativeDomainName=12,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 12
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: mily.karavay-shops.ru.

dn: relativeDomainName=13,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 13
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: nina.karavay-shops.ru.

dn: relativeDomainName=14,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 14
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: tany.karavay-shops.ru.

dn: relativeDomainName=15,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 15
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: nata.karavay-shops.ru.

dn: relativeDomainName=21,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 21
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: yurist.karavay-shops.ru.

dn: relativeDomainName=100,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 100
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: admin.karavay-shops.ru.

dn: relativeDomainName=130,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 130
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: nikolay.karavay-shops.ru.

dn: relativeDomainName=140,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 140
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: tanya.karavay-shops.ru.

dn: relativeDomainName=150,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 150
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: secretary.karavay-shops.ru.

dn: relativeDomainName=254,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
objectClass: dNSZone
relativeDomainName: 254
zoneName: 2.168.192.in-addr.arpa
dNSClass: IN
pTRRecord: bridge.karavay-shops.ru.
end ou_dns_kar_r.ldif Сейчас я имею

...
|
|-- DNS
| |
| |-- localhost
| | |
| | |-@
| |
| |-- 0.0.127.in-addr.arpa
| | |
| | |-- @
| | |-- 1
| |
| |-- karavay-shops.ru
| | |
| | |-- @
| | |-- bridge
| | |-- ns
| | |-- nserv
| | |-- vika
| | |-- mily
| | |-- nina
| | |-- tany
| | |-- nata
| | |-- yurist
| | |-- admin
| | |-- nikolay
| | |-- tanya
| | |-- secretary
| |
| |-- 2.168.192.in-addr.arpa
| |
| |-- @
| |-- 1
| |-- 11
| |-- 12
| |-- 13
| |-- 14
| |-- 15
| |-- 21
| |-- 100
| |-- 130
| |-- 140
| |-- 150
| |-- 254
...

Как я уже писал выше, обязательно к LDAP должна быть подключена
схема, описывающая объекты и атрибуты, необходимые для работы связки
LDAP и bind.
Дело осталось за малым - в /etc/named.conf внести изменения в
описания зон:

было - зона localhost и ее обратная:

zone "localhost" IN {
type master;
file "localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "0.0.127.in-addr.arpa";
allow-update { none; };
};

стало

zone "localhost" IN {
type master;
database "ldap ldap://127.0.0.1/zoneName=localhost,ou=DNS,dc=karavay-shops,dc=ru
86400";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
database "ldap ldap://127.0.0.1/zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
86400";
allow-update { none; };
};

было - зона karavay-shops.ru и ее обратная:

zone "karavay-shops.ru" IN {
type master;
file "karavay-shops.ru";
};
// Обратная зона для домена karavay-shops.ru
zone "2.168.192.in-addr.arpa" IN {
type master;
file "2.168.192.in-addr.arpa";
};

стало

zone "karavay-shops.ru" IN {
type master;
database "ldap ldap://127.0.0.1/zoneName=karavay-shops.ru,ou=DNS,dc=karavay-shops,dc=ru
86400";
};
zone "2.168.192.in-addr.arpa" IN {
type master;
database "ldap ldap://127.0.0.1/zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=karavay-shops,dc=ru
86400";
};

Перезапускаем DNS-сервер:

$ /sbin/service named restart

Все. Желающие могут проверить через nslookup и ping.

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

   2004-03-04 16:35:07 (#96488)

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

   2004-03-04 12:56:02 (#96375)