Ссылки на остальные части: вторая, третья, четвертая, пятая
Наверное все согласятся с тем, что для начинающего интернет-проекта необходима централизованная система AAA (Authentication, Authorization, Accounting): множество пользователей, куча боевых серверов, чуть поменьше серверов разработки, svn, админки, etc…
Передо мной тоже встала такая необходимость и я хочу рассказать о том что у меня получилось.
Итак, что нам потребуется установить и настроить:
Устанавливать всё это будем хозяйство будем на недавний релиз Debian GNU/Linux Lenny.
Заранее предчувствуя вопросы «Почему не (Active|Apache|Fedora|e)Directory?» отвечаю:
Итак, поехали:
1.
Нам потребуются двы физических сервера или два виртуальных на разных физических, назовём их ldap01.habr.ru (master) и ldap02.habr.ru (slave).
Репликацию будем делать master-slave — через syncrepl.
Балансировка у нас будет работать через DNS round-robin, для этого добавляем записи в зону habr.ru:
Сначала настроим ldap01.habr.ru
apt-get install slapd ldap-utils ldapscripts phpldapadmin
Установщик спросит нас про домены, пароли — вводим habr.ru и пароль админа.
После установки нужно посмотреть, правильно ли заполнилась база — у нас должно быть две записи с правильным доменом (в etch был глюк — домен прописывался два раза, типа dc=habr,dc=ru,dc=habr,dc=ru):
Если случился глюк с доменами, или что-то неправильно ввели, то делаем следующее:
Если глюка не было, нам всё-равно придётся формировать подобный файл для пользователя cn=syncrepl,dc=habr.ru,dc=ru.
Генерируем хеш пароля для пользователя — slappasswd -h {MD5}
И создаём файл /root/syncrepl.habr.ru.ldiff:
Наверное все согласятся с тем, что для начинающего интернет-проекта необходима централизованная система AAA (Authentication, Authorization, Accounting): множество пользователей, куча боевых серверов, чуть поменьше серверов разработки, svn, админки, etc…
Передо мной тоже встала такая необходимость и я хочу рассказать о том что у меня получилось.
Итак, что нам потребуется установить и настроить:
- OpenLDAP, естественно с репликацией
- Бэкап LDAP'а — именно вторым пунктом, можно первым (-;
- phpldapadmin, планирование групп и шаблонов
- авторизация для админок — Apache HTTPD mod_ldap
- авторизация для svn (+sasl)
- авторизация для доступа по ssh — pam_ldap
Устанавливать всё это будем хозяйство будем на недавний релиз Debian GNU/Linux Lenny.
Заранее предчувствуя вопросы «Почему не (Active|Apache|Fedora|e)Directory?» отвечаю:
- Они все медленнее OpenLDAP — может оказаться решающим фактором.
- ActiveDirectory у нас нет, а если и есть, то я не настолько её знаю, чтобы «в случае чего» поднять из бэкапа на голом железе за 10 минут.
- eDirectory хорошо… но разворачивать отдельную инфраструктуру «только для» — я не готов.
- Про остальные две просто признаюсь, что совсем их не знаю (-:
Итак, поехали:
1.
Нам потребуются двы физических сервера или два виртуальных на разных физических, назовём их ldap01.habr.ru (master) и ldap02.habr.ru (slave).
Репликацию будем делать master-slave — через syncrepl.
Балансировка у нас будет работать через DNS round-robin, для этого добавляем записи в зону habr.ru:
ldap01.habr.ru. IN A 192.168.100.1
ldap02.habr.ru. IN A 192.168.100.2
ldap.habr.ru. IN A 192.168.100.1
ldap.habr.ru. IN A 192.168.100.2
Сначала настроим ldap01.habr.ru
apt-get install slapd ldap-utils ldapscripts phpldapadmin
Установщик спросит нас про домены, пароли — вводим habr.ru и пароль админа.
После установки нужно посмотреть, правильно ли заполнилась база — у нас должно быть две записи с правильным доменом (в etch был глюк — домен прописывался два раза, типа dc=habr,dc=ru,dc=habr,dc=ru):
#slapcat
dn: dc=habr,dc=ru
objectClass: dcObject
objectClass: organization
o: habr
dc: habr
structuralObjectClass: organization
entryUUID: f22558c4-8c9d-102d-95a8-73e8f6c3e453
creatorsName: cn=admin,dc=habr,dc=ru
createTimestamp: 20090211153942Z
modifiersName: cn=admin,dc=habr,dc=ru
modifyTimestamp: 20090211153942Z
dn: cn=admin,dc=habr,dc=ru
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
structuralObjectClass: organizationalRole
entryUUID: 82bbb18a-8c99-102d-8ac2-1508ef940fe8
creatorsName:
createTimestamp: 20090211150757Z
userPassword:: e0NSWVUIOS9FM25wTGQzU3FXOUE=
modifiersName: cn=admin,dc=habr,dc=ru
modifyTimestamp: 20090217023143Z
Если случился глюк с доменами, или что-то неправильно ввели, то делаем следующее:
- Сохраняем базу в файл и редактируем
#slapcat > /root/habr.ru.ldiff
- далее останавливаем slapd —
/etc/init.d/slapd stop
- удаляем старую базу —
rm /var/lib/ldap/*
- запускаем slapd —
/etc/init.d/slapd start
- Импортируем файлик —
slapadd -l /root/habr.ru.ldiff
Если глюка не было, нам всё-равно придётся формировать подобный файл для пользователя cn=syncrepl,dc=habr.ru,dc=ru.
Генерируем хеш пароля для пользователя — slappasswd -h {MD5}
И создаём файл /root/syncrepl.habr.ru.ldiff:
cat > /root/syncrepl.habr.ru.ldiff << "EOF"
dn: cn=syncrepl,dc=habr,dc=ru
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: syncrepl
description: synrepl user
structuralObjectClass: organizationalRole
userPassword:: {MD5}ICy5YqxZB1uWSwcVLSNLcA==
EOF
И загружаем его в базу — slapadd -l /root/syncrepl.habr.ru.ldiff
Конфигурационные файлы находятся в /etc/ldap/
Настройки для локального клиента:
cat > /etc/ldap/ldap.conf << "EOF"
BASE dc=habr, dc=ru
URI ldap://ldap.habr.ru
EOF
Настройки сервера:
cat > /etc/ldap/slapd.conf << "EOF"
#общие настройки
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
#без этого модуля не будет работать репликация
moduleload syncprov
sizelimit 500
tool-threads 1
backend bdb
#настройки нашей базы
database bdb
suffix "dc=habr,dc=ru"
checkpoint 512 30
rootdn "cn=admin,dc=habr,dc=ru"
# эти индексы нужны для репликации
index objectClass,entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 10 1
syncprov-sessionlog 10
directory "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
lastmod on
# Настройки прав на дерево. Аккаунт syncrepl нужен для репликации
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=habr,dc=ru" write
by dn="cn=syncrepl,dc=habr,dc=ru" read
by anonymous auth
by self write
by * none
access to *
by dn="cn=syncrepl,dc=habr,dc=ru" read
by * break
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=habr,dc=ru" write
by * read
# далее можно описать другие базы
EOF
Теперь настроим ldap02.habr.ru:
apt-get install slapd
На вопросы о паролях и доменах можно ответить что-нибудь невнятное.
Останавливаем slapd — /etc/init.d/slapd stop
Настройки для локального клиента:
cat > /etc/ldap/ldap.conf << "EOF"
BASE dc=habr, dc=ru
URI ldap://ldap.habr.ru
EOF
Настройки сервера:
cat > /etc/ldap/slapd.conf << "EOF"
# общие настройки
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel none
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500
tool-threads 1
#настройки нашей базы
database bdb
suffix "dc=habr,dc=ru"
rootdn "cn=admin,dc=habr,dc=ru"
directory "/var/lib/ldap"
syncrepl rid=0
provider=ldap://ldap01.habr.ru
type=refreshOnly
interval=00:00:00:10
searchbase="dc=habr,dc=ru"
scope=sub
bindmethod=simple
binddn="cn=syncrepl,dc=habr,dc=ru"
#пароль пользователя syncrepl
credentials="password"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
index objectClass,entryCSN,entryUUID eq
lastmod on
checkpoint 512 30
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=habr,dc=ru" write
by dn="cn=syncrepl,dc=habr,dc=ru" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=habr,dc=ru" write
by dn="cn=syncrepl,dc=habr,dc=ru" write
by * read
EOF
Запускаем slapd — /etc/init.d/slapd start
Проверить работу репликации можно остановив slapd на ldap01.habr.ru и запустив slapcat.
Также хочу обратить внимание общественности на досадный нюанс, на выявление которого я потратил почти сутки:
Если на двух нодах используются различные хранилища (backend) - bdb и hdb, то реплицируются все записи, только без паролей.
Спасибо всем, кто до сюда дочитал.
На сегодня всё, продолжение чуть позже.
[UPD] часть вторая