Слайд 3Служба каталогов
Служба каталогов (Directory Service)
Централизованное (единое) хранилище
Хранит ресурсы – один или
![Служба каталогов Служба каталогов (Directory Service) Централизованное (единое) хранилище Хранит ресурсы –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-2.jpg)
более классов, есть набор свойств (атрибутов)
Иерахическое (tree) представление
Слайд 4Что такое LDAP?
Lightweight Directory Access Protocol
Облегчённый вариант DAP (входит в X.500)
Кратенько: RFC
![Что такое LDAP? Lightweight Directory Access Protocol Облегчённый вариант DAP (входит в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-3.jpg)
4510..4533, плюс ещё ~10..20
Но это не страшно!
Кто читал весь стандарт SQL?
А всё RFC по DNS?
Это бинарный протокол (TCP тоже такой :)
Слайд 5Глобальные сущности
Directory Information Model (DIM)
Набор схем, которые описывают классы и атрибуты
Directory Information
![Глобальные сущности Directory Information Model (DIM) Набор схем, которые описывают классы и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-4.jpg)
Tree (DIT)
Собственно хранилище ресурсов (directory entries) – объектов и aliases (грубо: symlinks)
Слайд 6Концепции: классы
Каждый объект относится как минимум к одному классу. Классы наследуются.
Два вида:
Структурные
![Концепции: классы Каждый объект относится как минимум к одному классу. Классы наследуются.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-5.jpg)
(structural)
Вспомогательные (auxiliary)
Содержат обязательные (MUST) и вспомогательные (MAY) атрибуты
Слайд 7Пример: класс
objectclass (
0.9.2342.19200300.100.4.5
NAME 'account'
SUP top STRUCTURAL
MUST userid
MAY
![Пример: класс objectclass ( 0.9.2342.19200300.100.4.5 NAME 'account' SUP top STRUCTURAL MUST userid](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-6.jpg)
( description $ seeAlso $
localityName $ organizationName $
organizationalUnitName $ host
) )
Слайд 8Концепции: атрибуты
Атрибут определяется через:
Имя и OID-идентификатор
Синтаксис (syntax)
Правила (matching rules)
Сравнения, поиска подстроки
Упорядочивания (сортировки)
Тип
![Концепции: атрибуты Атрибут определяется через: Имя и OID-идентификатор Синтаксис (syntax) Правила (matching](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-7.jpg)
значения: множественное или единственное (SINGLE)
Слайд 9Пример: атрибут
attributetype ( 2.5.4.9
NAME ( 'street' 'streetAddress' )
DESC 'RFC2256: street
![Пример: атрибут attributetype ( 2.5.4.9 NAME ( 'street' 'streetAddress' ) DESC 'RFC2256:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-8.jpg)
address of object'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128}
)
Слайд 10Схема(-ы)
Схема задаёт набор атрибутов и классов
Набор загружаемых файлов схем образуют схему DIT
![Схема(-ы) Схема задаёт набор атрибутов и классов Набор загружаемых файлов схем образуют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-9.jpg)
(или просто DIM).
Схемы есть:
Предопределённые (системные)
Внешние (application)
Ваши собственные
Слайд 11И снова про DS
Cтруктурированное, иерархическое хранилище
Оптимизация на массовое чтение,
редкие записи
Это НЕ реляционная
![И снова про DS Cтруктурированное, иерархическое хранилище Оптимизация на массовое чтение, редкие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-10.jpg)
модель!
Может быть разбито на поддеревья
Рассчитано на распределённое
использование (referrals)
Слайд 12DS на пальцах
Аналог – DNS
Но! DNS – это простая lookup служба
Служба каталогов
![DS на пальцах Аналог – DNS Но! DNS – это простая lookup](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-11.jpg)
– куда круче!
Некоторая симметрия
Реплики и поддеревья – зоны
DNS записи как объекты
Master и slave сервера
И т.п.
Слайд 13Кусочек дерева
o=company
ou=users
cn=vpupkin
...
DN: cn=vpupkin,ou=users,o=company
![Кусочек дерева o=company ou=users cn=vpupkin ... DN: cn=vpupkin,ou=users,o=company](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-12.jpg)
Слайд 15Кусочек дерева
o=company
ou=users
cn=vpupkin
...
DN: cn=vpupkin,ou=users,o=company
![Кусочек дерева o=company ou=users cn=vpupkin ... DN: cn=vpupkin,ou=users,o=company](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-14.jpg)
Слайд 16LDIF – текстовый формат
dn: uid=vpupkin,ou=users,o=company
objectClass: person
objectClass: inetLocalMainRecipient
cn: Vasily Pupkin
userPassword: {SSHA}XXXXXX
mail: vasya@pupkin.ru
![LDIF – текстовый формат dn: uid=vpupkin,ou=users,o=company objectClass: person objectClass: inetLocalMainRecipient cn: Vasily](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-15.jpg)
Слайд 17Схема расширяема
Решить, надо ли вам это
Достаточно:
Прочесть раздел «Extending Schema»
RFC 4512, и немного
![Схема расширяема Решить, надо ли вам это Достаточно: Прочесть раздел «Extending Schema»](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-16.jpg)
других :)
Зарегистрировать OID в IANA
Слайд 18Стандартные классы
Системные:
organization organizationalUnit groupOfUniqueNames
Пользователи:
account inetOrgPerson inetLocalMailRecipient
Сеть:
domain ipHost ipNetwork bootableDevice ieee802Device
UNIX-related:
posixAccount
![Стандартные классы Системные: organization organizationalUnit groupOfUniqueNames Пользователи: account inetOrgPerson inetLocalMailRecipient Сеть: domain](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-17.jpg)
posixGroup sudoRole ldapPublicKey
Слайд 19Что ещё важного?
Поиск – через т.н. фильтры
Достаточно мощный язык запросов
Расширения протокола через
![Что ещё важного? Поиск – через т.н. фильтры Достаточно мощный язык запросов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-18.jpg)
controls
Примеры: Paged Results, Modify Password
Безопасность
TLS, SASL, и т.п.
Слайд 21Поставленные цели
Единое центральное хранилище
Управление учётными записями сотрудников
Управление почтой (aliases, листы рассылки)
Учёт сетевых
![Поставленные цели Единое центральное хранилище Управление учётными записями сотрудников Управление почтой (aliases,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-20.jpg)
ресурсов (сетей, хостов)
Единая, прозрачная аутентификация и авторизация
Конфигурация (в т.ч. ACL) для приложений
Слайд 22Цель: управление доступом
Единая точка управления доступом:
К host’ам по SSH; управление sudoers
К веб-ресурсам:
![Цель: управление доступом Единая точка управления доступом: К host’ам по SSH; управление](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-21.jpg)
intranet, wiki, bugzilla, otrs, SVN, webdav-folders, внутренние приложения…
К прочим ресурсам: SMTP/IMAP/POP3;
KVM / IPMI, …
К почтовым рассылкам (в т.ч. архивам – через IMAP shared folders)
Слайд 23Цель: инвентаризация
Отправная точка для инвентаризации:
Информация о хостах, сетях
Ссылки во внешние системы учёта
Точка
![Цель: инвентаризация Отправная точка для инвентаризации: Информация о хостах, сетях Ссылки во](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-22.jpg)
синхронизации с DNS:
DNS-зоны доменов генерятся частично из LDAP
Мониторинг:
Начальную информацию берёт из LDAP
(без всяких auto-discovery)
Слайд 24Выбор software
OpenLDAP
Стабильный, быстрый, функциональный
Opensource
Альтернативы
Novell eDirectory; Microsoft Active Directory
Apache Directory Server; Fedora Directory
![Выбор software OpenLDAP Стабильный, быстрый, функциональный Opensource Альтернативы Novell eDirectory; Microsoft Active](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-23.jpg)
Server
И ещё чуть меньше десятка
Слайд 25Реализация: сервера
Master-серверы:
FreeBSD 7.1; OpenLDAP 2.4.16
2 сервера в MirrorMode
CARPed
Consumer-серверы в отдельных ДЦ
чтение локально
записи
![Реализация: сервера Master-серверы: FreeBSD 7.1; OpenLDAP 2.4.16 2 сервера в MirrorMode CARPed](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-24.jpg)
перенаправляются на masters
Слайд 26Типичный LDAPified host
OS: *nix (у нас в массе FreeBSD)
pam_ldap – PAM смотрит
![Типичный LDAPified host OS: *nix (у нас в массе FreeBSD) pam_ldap –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-25.jpg)
сначала в LDAP:
nss_ldap – интеграция NSS с LDAP
users, groups, passwd
openssh+LPK – SSH-ключ смотрится в атрибуте sshPublicKey учётной записи пользователя
sudo+ldap – sudoers полностью находится в LDAP; локальный sudoers у нас запрещён
Слайд 27DIT крупным планом
cn=company-log
o=company
ou=users
ou=groups
ou=mail
ou=networks
ou=sites
![DIT крупным планом cn=company-log o=company ou=users ou=groups ou=mail ou=networks ou=sites](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-26.jpg)
Слайд 28Учётные записи: DIT
o=company
ou=users
cn=vpupkin
...
ou=retired
ou=locked
ou=system
![Учётные записи: DIT o=company ou=users cn=vpupkin ... ou=retired ou=locked ou=system](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-27.jpg)
Слайд 29Учётные записи: типы
ext-user
person, inetOrgPerson, inetLocalMailRecipient, extraPerson
uid, cn, givenName, sn, mail, userPassword, icqNumber,
![Учётные записи: типы ext-user person, inetOrgPerson, inetLocalMailRecipient, extraPerson uid, cn, givenName, sn,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-28.jpg)
jabber, birthday
plain-user
+ organizationalPerson, intraPerson
title, roomNumber, telephoneNumber, shirtSize
account-user
+ posixAccount, shadowAccount, ldapPublicKey, intraAccount
uidNumber, gidNumber, loginShell, sshPublicKey, loginClass
Слайд 30Почта: DIT
o=company
ou=mail
dc=spylog.ru
ou=aliases
cn=mOrketing
ou=lists
cn=changes
cn=read
cn=write
![Почта: DIT o=company ou=mail dc=spylog.ru ou=aliases cn=mOrketing ou=lists cn=changes cn=read cn=write](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-29.jpg)
Слайд 31Почта: пример
dn: cn=changes, ou=lists, dc=spylog.ru,ou=mail,o=company
objectClass: nisMailAlias
rfc822MailMember: vasya@pupkin.ru
owner: uid=vpupkin,ou=users,o=company
![Почта: пример dn: cn=changes, ou=lists, dc=spylog.ru,ou=mail,o=company objectClass: nisMailAlias rfc822MailMember: vasya@pupkin.ru owner: uid=vpupkin,ou=users,o=company](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-30.jpg)
Слайд 32LDAP + SMTP
SMTP-auth пользователей – через LDAP
Exim, при получении письма для домена
![LDAP + SMTP SMTP-auth пользователей – через LDAP Exim, при получении письма](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-31.jpg)
dc=XXX,ou=mail,обрабатывает целевой адрес:
В ou=lists (атрибут rfc822MailMember): обрабатывает как рассылку – в т.ч. передаётся в Cyrus в shared folder
В ou=aliases (атрибут rfc822MailMember): раскрывает как почтовый алиас
В ou=users (атрибут mailLocalAddress): передаёт в Cyrus в соотв. папку
Слайд 33LDAP + IMAP
Аутентификация пользователей – через LDAP
Специальный Perl-backend (в отдельном consumer-сервере) ловит
![LDAP + IMAP Аутентификация пользователей – через LDAP Специальный Perl-backend (в отдельном](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-32.jpg)
всё изменения в дереве и отражает их в Cyrus
slapd-perl(5)
Cyrus::IMAP::Admin
При добавлении пользователя или при добавлении атрибута mail, содержащего домен, который находится в dc=XXX,ou=mail – в Cyrus создаётся соответствующий почтовый ящик.
Слайд 34LDAP + IMAP: рассылки
При добавлении рассылки в ou=lists,dc=XXX,ou=mail создаётся соотв. shared folder
![LDAP + IMAP: рассылки При добавлении рассылки в ou=lists,dc=XXX,ou=mail создаётся соотв. shared](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-33.jpg)
в Cyrus
При изменении прав на рассылку (добавление/удаление пользователей из дочерних объектов cn=read, cn=write) – соответственно обновляются ACL на shared folder’е
Слайд 35Учёт сетей
Сети – их много!
Много внутренних (10.0.0.0/8)
Немало внешних (выделенных в RIPE)
Их надо
![Учёт сетей Сети – их много! Много внутренних (10.0.0.0/8) Немало внешних (выделенных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-34.jpg)
учитывать, хранить в едином месте:
Основные параметры (адрес и маску)
RIPE-данные
VLAN, routing, etc.
Слайд 36Сети: DIT
o=company
ou=networks
cn=10.0.0.0/8
cn=10.99.0.0/16
cn=88.55.66.0-88.55.66.255
...
![Сети: DIT o=company ou=networks cn=10.0.0.0/8 cn=10.99.0.0/16 cn=88.55.66.0-88.55.66.255 ...](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-35.jpg)
Слайд 37Сети: пример
dn: cn=10.99.0.0/16,…,ou=networks,o=company
objectClass: ipNetwork, intraNetConfig
ipNetworkNumber: 10.99.0.0
ipNetmaskNumber: 255.255.0.0
vlanNumber: 555
defaultRoute: 10.99.0.1
owner: uid=vpupkin,ou=users,o=company
![Сети: пример dn: cn=10.99.0.0/16,…,ou=networks,o=company objectClass: ipNetwork, intraNetConfig ipNetworkNumber: 10.99.0.0 ipNetmaskNumber: 255.255.0.0 vlanNumber:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-36.jpg)
Слайд 38Сайты (sites)
Сайт – это scope of administration
Содержит ресурсы, объединённые по логическому (corp,
![Сайты (sites) Сайт – это scope of administration Содержит ресурсы, объединённые по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-37.jpg)
devel, infra) или проектному (hosting, spylog) принципу
Ресурсы:
хосты, группы доступа,
настройки для приложений
Слайд 39Сайты: DIT
o=company
ou=sites
ou=foobar
ou=hosting
ou=infra
ou=spylog
...
![Сайты: DIT o=company ou=sites ou=foobar ou=hosting ou=infra ou=spylog ...](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-38.jpg)
Слайд 40Типичный сайт: DIT
o=company,ou=sites,ou=foobar
ou=hosts
ou=groups
ou=shellusers
ou=web
ou=virtual
ou=sudoers
![Типичный сайт: DIT o=company,ou=sites,ou=foobar ou=hosts ou=groups ou=shellusers ou=web ou=virtual ou=sudoers](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-39.jpg)
Слайд 41Хосты
Хостов ещё больше чем сетей
Их часто просто теряют
Выделяют повторно одни и те
![Хосты Хостов ещё больше чем сетей Их часто просто теряют Выделяют повторно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-40.jpg)
же ip-адреса
Не всегда ясна связь с реальным железом, со складским учётом и бухгалтерией
Инвентаризация – нужна!
Хочется хранить доп. параметры (carp vhid)
Слайд 42Сайты: хосты
o=company,ou=sites,ou=foobar
ou=hosts
ou=jails
cn=www01.int.foobar.ru
ou=mgmt
cn=x0666.mgmt
ou=carp
![Сайты: хосты o=company,ou=sites,ou=foobar ou=hosts ou=jails cn=www01.int.foobar.ru ou=mgmt cn=x0666.mgmt ou=carp](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-41.jpg)
Слайд 43Хост: mainhost
dn: cn=x0666,ou=mgmt,ou=hosts, ou=foobar,ou=sites,o=company
objectClass: device,ieee802Device,ipHost,intraHost
cn: x0666.mgmt
ipHostNumber: 10.99.10.4
macAddress: 00:35:1A:15:17:42
hostType: main
datacenterServerID: srv_01018
l: ДЦ Алтуфьево
![Хост: mainhost dn: cn=x0666,ou=mgmt,ou=hosts, ou=foobar,ou=sites,o=company objectClass: device,ieee802Device,ipHost,intraHost cn: x0666.mgmt ipHostNumber: 10.99.10.4 macAddress:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-42.jpg)
Слайд 44Хост: jailhost
dn: cn=www01.int.foobar.ru,ou=jails,ou=hosts, ou=foobar,ou=sites,o=company
objectClass: ipHost, intraHost
cn: www01.int.foobar.ru
ipHostNumber: 10.99.20.2
hostType: jail
owner: cn=x0666,ou=mgmt,ou=hosts,ou=foobar,ou=sites,o=company
manager: uid=vpupkin,ou=users,o=company
![Хост: jailhost dn: cn=www01.int.foobar.ru,ou=jails,ou=hosts, ou=foobar,ou=sites,o=company objectClass: ipHost, intraHost cn: www01.int.foobar.ru ipHostNumber: 10.99.20.2](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-43.jpg)
Слайд 45Хосты и DNS
Хосты заводятся в LDAP одной командой
# ldap_ctl --create --host XXX
![Хосты и DNS Хосты заводятся в LDAP одной командой # ldap_ctl --create](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-44.jpg)
…
Далее – перегенерятся зоны:
# dns_ctl
--process foobar.zone
--process 10.99.10.0-24
Думаем (!), коммитим в SVN, выкатываем обновления на authorative NS servers
Слайд 46Хосты и DNS
Если откуда-то надо срочно понять что это за хост:
# host
![Хосты и DNS Если откуда-то надо срочно понять что это за хост:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-45.jpg)
–t TXT www01.int.foobar.ru
www01.int.foobar.ru descriptive text
"manager: uid=vpupkin,ou=users,o=company“
www01.int.foobar.ru descriptive text
"mainhost: cn=x0666,ou=mgmt,ou=hosts,
ou=foobar,ou=sites,o=company"
Слайд 47Группы доступа
Группы доступа - самый популярных способ в реализации авторизации
Контроль доступа к:
Хостам
![Группы доступа Группы доступа - самый популярных способ в реализации авторизации Контроль](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-46.jpg)
(по SSH)
Веб-приложениям (например, всё Apache-based)
Используем класс groupOfUniqueNames
Слайд 48Сайты: хосты
o=company,ou=sites,ou=foobar
ou=groups
ou=shellusers
cn=mgmt-dev
ou=web
cn=bugzilla
![Сайты: хосты o=company,ou=sites,ou=foobar ou=groups ou=shellusers cn=mgmt-dev ou=web cn=bugzilla](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-47.jpg)
Слайд 49Группа: пример
dn: cn=mgmt-dev,ou=shellusers,ou=groups, ou=foobar,ou=sites,o=company
objectClass: groupOfUniqueNames
cn: mgmt-dev
uniqueMember: uid=vpupkin,ou=users,o=company
description: Доступ на dev mainhosts
![Группа: пример dn: cn=mgmt-dev,ou=shellusers,ou=groups, ou=foobar,ou=sites,o=company objectClass: groupOfUniqueNames cn: mgmt-dev uniqueMember: uid=vpupkin,ou=users,o=company description: Доступ на dev mainhosts](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-48.jpg)
Слайд 50PAM
/etc/pam.d/sshd , /etc/pam.d/system
# auth
auth sufficient /usr/local/lib/pam_ldap.so
no_warn try_first_pass
auth required pam_unix.so
no_warn try_first_pass
# account
account required /usr/local/lib/pam_ldap.so
ignore_authinfo_unavail ignore_unknown_user
account required pam_unix.so
/etc/nsswitch.conf
passwd:
![PAM /etc/pam.d/sshd , /etc/pam.d/system # auth auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass auth](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-49.jpg)
cache files ldap
Слайд 51nss_ldap
/usr/local/etc/nss_ldap.conf
base ou=users,o=company
uri ldap://ldap.company.ru
binddn uid=pam,ou=virtual,ou=foobar,ou=sites,o=company
bindpw 26a9e1b8df74606eaafa2dde8f8964c1
pam_login_attribute uid
pam_member_attribute uniqueMember
pam_groupdn cn=mgmt-dev,ou=shellusers,ou=groups,
ou=foobar,ou=sites,o=company
sudoers_base ou=sudoers,ou=foobar,ou=sites,o=company
![nss_ldap /usr/local/etc/nss_ldap.conf base ou=users,o=company uri ldap://ldap.company.ru binddn uid=pam,ou=virtual,ou=foobar,ou=sites,o=company bindpw 26a9e1b8df74606eaafa2dde8f8964c1 pam_login_attribute uid](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-50.jpg)
Слайд 52OpenSSH
/usr/local/etc/ssh/sshd_config
UseLPK yes
LpkLdapConf /usr/local/etc/nss_ldap.conf
LpkServers ldap://ldap.company.ru
LpkForceTLS yes
LpkUserDN ou=users,o=company
LpkBindDN uid=pam,ou=virtual,ou=foobar,ou=sites,o=company
LpkBindPw 26a9e1b8df74606eaafa2dde8f8964c1
![OpenSSH /usr/local/etc/ssh/sshd_config UseLPK yes LpkLdapConf /usr/local/etc/nss_ldap.conf LpkServers ldap://ldap.company.ru LpkForceTLS yes LpkUserDN ou=users,o=company LpkBindDN uid=pam,ou=virtual,ou=foobar,ou=sites,o=company LpkBindPw 26a9e1b8df74606eaafa2dde8f8964c1](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-51.jpg)
Слайд 53Sudo + LDAP
Sudo – стандарт де-факто для контроля выдачи привилегий (в т.ч.
![Sudo + LDAP Sudo – стандарт де-факто для контроля выдачи привилегий (в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-52.jpg)
под root’ом)
Настройки файла sudoers можно хранить в LDAP
Почти без потери функциональности
При этом для надёжности локальный файл sudoers можно просто запретить читать
Слайд 54Сайты: sudoers
o=company,ou=sites,ou=foobar
ou=sudoers
cn=defaults
cn=root@mgmt-dev
cn=%www@dev-web
![Сайты: sudoers o=company,ou=sites,ou=foobar ou=sudoers cn=defaults cn=root@mgmt-dev cn=%www@dev-web](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-53.jpg)
Слайд 55Sudo: defaults
dn: cn=defaults,ou=sudoers, ou=foobar,ou=sites,o=company
objectClass: sudoRole
cn: defaults
sudoOption: !env_reset
sudoOption: ignore_local_sudoers
![Sudo: defaults dn: cn=defaults,ou=sudoers, ou=foobar,ou=sites,o=company objectClass: sudoRole cn: defaults sudoOption: !env_reset sudoOption: ignore_local_sudoers](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-54.jpg)
Слайд 56Sudo: пример
dn: cn=root@mgmt-dev,ou=sudoers, ou=foobar,ou=sites,o=company
objectClass: sudoRole
cn: root@mgmt-dev
sudoCommand: ALL
sudoHost: x0666.mgmt
sudoOption: !authenticate
sudoRunAs: root
sudoUser: vpupkin
![Sudo: пример dn: cn=root@mgmt-dev,ou=sudoers, ou=foobar,ou=sites,o=company objectClass: sudoRole cn: root@mgmt-dev sudoCommand: ALL sudoHost:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-55.jpg)
Слайд 57Виртуальные пользователи
В LDAP пользователь – это тот, кто:
Есть как объект в DIT
Имеет
![Виртуальные пользователи В LDAP пользователь – это тот, кто: Есть как объект](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-56.jpg)
пароль в атрибуте userPassword
Как следствие он:
Может делать bind к DIT
Т.е. получает доступ к дереву с некими правами
Слайд 58Сайты: вирт. users
o=company,ou=sites,ou=foobar
ou=virtual
uid=inventory-bot
uid=pam
uid=wiki-bind
uid=jabber-notifier
![Сайты: вирт. users o=company,ou=sites,ou=foobar ou=virtual uid=inventory-bot uid=pam uid=wiki-bind uid=jabber-notifier](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-57.jpg)
Слайд 59Вирт. user: пример
dn: uid=pam,ou=virtual, ou=foobar,ou=sites,o=company
objectClass: account, simpleSecurityObject
uid: pam
userPassword: {SSHA}TgTWBI+nMOOYC8OMLIZaHufQjFDsS2UHzbx12Q==
description: PAM binding
![Вирт. user: пример dn: uid=pam,ou=virtual, ou=foobar,ou=sites,o=company objectClass: account, simpleSecurityObject uid: pam userPassword: {SSHA}TgTWBI+nMOOYC8OMLIZaHufQjFDsS2UHzbx12Q== description: PAM binding](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-58.jpg)
Слайд 60Apache + LDAP: Subversion
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion"
AuthLDAPBindDN uid=apache-svn,ou=virtual,ou=devel,ou=sites,o=company
AuthLDAPBindPassword 09a5f58cdd4fbd038d86703d0984d604
AuthLDAPURL ldaps://ldap.company.ru/ou=users,o=company?uid?sub
AuthLDAPGroupAttribute uniqueMember
AuthLDAPGroupAttributeIsDN on
Require ldap-group
cn=subversion,ou=groups,ou=devel,ou=sites,o=company
AuthLDAPRemoteUserAttribute uid
AuthzLDAPAuthoritative on
AuthzSVNAccessFile /usr/local/etc/subversion/access.conf
![Apache + LDAP: Subversion AuthBasicProvider ldap AuthType Basic AuthName "Subversion" AuthLDAPBindDN uid=apache-svn,ou=virtual,ou=devel,ou=sites,o=company](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-59.jpg)
Слайд 61OpenLDAP: подсистемы
OpenLDAP Software 2.4 Administrator's Guide
Backend - hdb
Overlays:
accesslog – протоколирование изменений (в
![OpenLDAP: подсистемы OpenLDAP Software 2.4 Administrator's Guide Backend - hdb Overlays: accesslog](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-60.jpg)
отдельное поддерево)
unique – гарантия уникальности объекта:
uid, uidNumber, mail, mailLocalAddress,
ipHostNumber
memberof – автоматические backlink ссылки
Слайд 62OpenLDAP: ACL
Rule-based Access Control Lists - очень мощный синтаксис
«Access Control», slapd.access(5)
Можно делать
![OpenLDAP: ACL Rule-based Access Control Lists - очень мощный синтаксис «Access Control»,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-61.jpg)
тесты
slapacl(8)
Есть экспериментальные ACI - контроль доступа на уровне объекта(ов), когда ACL хранятся прямо в дереве. Не рекомендую.
Слайд 63OpenLDAP: репликация
Replication:
LDAP Sync Replication
Delta-syncrepl replication
N-Way Multi-Master replication
MirrorMode replication
Syncrepl Proxy
Мы используем MirrorMode
Есть куда
![OpenLDAP: репликация Replication: LDAP Sync Replication Delta-syncrepl replication N-Way Multi-Master replication MirrorMode](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-62.jpg)
расти
Слайд 64Инструментарий
Command line forever!
ldapsearchldapsearch, ldapaddldapsearch, ldapadd, ldapmodify, ldapdelete, …
ldapvi – вся мощь Vim
![Инструментарий Command line forever! ldapsearchldapsearch, ldapaddldapsearch, ldapadd, ldapmodify, ldapdelete, … ldapvi –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-63.jpg)
для LDAP!
Apache Directory Studio – Java GUI
Внутренние разработки:
ldap_ctl, perl backends, …
Слайд 66Где использовать LDAP ?
Все реализации LDAP оптимизированы на массовые чтения (в отличии
![Где использовать LDAP ? Все реализации LDAP оптимизированы на массовые чтения (в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-65.jpg)
от SQL)
Dynamic Directory Services – это извращение
Хорошая репликация
Время «запрос-ответ» можно уменьшать
Это служба каталогов, а не lookup сервис (в отличии от DNS)
Т.е. удобство схем, мощный поиск
Слайд 67Почему не SQL ?
SQL – это реляционная модель
out-of-box:
Много полезных и de-facto стандартных
![Почему не SQL ? SQL – это реляционная модель out-of-box: Много полезных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-66.jpg)
схем
Аудит, репликация
Стандартный протокол – много software и hardware его умеют
Это служба каталогов, а не lookup сервис (в отличии от DNS)
Т.е. удобство схем, мощный поиск
Слайд 68Где мы не используем LDAP
Хранение в LDAP полностью зон DNS
Есть схемы: DNSZone,
![Где мы не используем LDAP Хранение в LDAP полностью зон DNS Есть](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-67.jpg)
DNSDomain2
Поддерживается в BIND, PowerDNS
Очень неудобно править *YMMV
Интеграция с DHCP
Пока не было нужно, возможно будет для PXE
Слайд 69Что в планах
Хранение в LDAP корпоративных PGP Keys
gnupg 2.x так умеет
Реализация шаблонов
![Что в планах Хранение в LDAP корпоративных PGP Keys gnupg 2.x так](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476728/slide-68.jpg)
(templates) для заведения учётной записи / её upgrad’а
PKI – хранить внутренние SSL-сертификаты