From: Шипицын Анатолий Владимирович <http://sauron.opennet.ru>
Newsgroups: email
Date: Mon, 18 Nov 2003 14:31:37 +0000 (UTC)
Subject: Samba полная интеграция с LDAP сервером.
Samba full integration with LDAP.
Samba полная интеграция с LDAP сервером.
1. Введение.
2. Необходимые пакеты.
3. Установка пакетов.
4. Добавление пользователей.
5. 1C Бухгалтерия и Samba.
6. Проекты.
7. Авторы.
8. Благодарности.
1. Введение.
Данное HOWTO написано на основе Samba-LDAP-HOWTO из пакета Samba и
прозрачных намеков как организовать полную интеграцию с LDAP. Что дает с
последним пакетом Samba полнофункциональный NT Server (насколько он
полнофункциональный сказать не могу т.к. не работал с большими доменами
на основе NT) и возможность перевести пользователей с NT Server 4.0 на
Samba сервер в качестве PDC без каких либо усилий со стороны
пользователей.
Перед прочтением рекомендуется прочитать документацию идущую с Samba
пакетом т.к. я подразумеваю ваше знание что такое Samba.
2. Необходимые пакеты.
Samba 2.2.x (http://www.samba.org). Подойдет любая но лучше брать последнюю
т.к. в ней чаще всего исправлены какие либо ошибки присутствующие в
более ранних версиях. К примеру 1C Бухгалтерия (Сетевой вариант) будет
работать или на Samba 2.0.x версиях или на Samba 2.2.5 и выше. Так же
далее в данной документации будет приведены опции для нормальной работы
этого отечественного продукта.
OpenLDAP 2.x.x (http://www.openldap.org) Если не хотите проблем при установке и
настройке лучше берите 2.0.23 она стабильна и проста в установке. Я
использую LDAP сервер 2.1.8 поскольку 2.0.23 почему-то не очень хорошо
работал с SSL.
Berkeley DB 4.x (http://www.sleepycat.com) Необходима только если вы захотите
использовать OpenLDAP 2.1.x. Ее сборка и инсталляция не рассматривается
в данном HOWTO.
nss_ldap(pam_ldap) (http://www.padl.com) Какой из модулей взять зависит от
вашего дистрибутива. Хотя при использовании pam_ldap может потребоваться
nss_ldap. Мой дистрибутив не содержит pam поэтому в HOWTO
рассматривается только случай с nss_ldap как более универсальный.
Stunnel (http://www.stunnel.org) SSL туннелирование обычных не ssl соединений.
Понадобился из-за того что Samba при попытке подключиться через SSL к
LDAP (2.1.8) серверу чаще всего говорила, что его там нет, хотя он
присутствовал. А через stunnel нормально подключалась.
OpenSSL (www.openssl.org) Необходим для установки SSL соединений. Обычно
уже присутствует в системе, но для rpm дистрибутивов необходимо
установить devel пакет к OpenSSL (набор include файлов). Его установка
не рассматривается в данном HOWTO.
3. Установка пакетов.
3.1 Stunnel.
Скачиваем (берем с диска), распаковываем. Компилируем:
configure
make install
Конфигурационный файл:
/usr/local/etc/stunnel/stunnel.conf
# Сертификат для предоставления серверу должен быть.
# Генерится при установке (make install) openssl утилитами
# Uid и Gid под которыми будет работать процесс.
setuid = nobody
setgid = nogroup
# Установка корня процесса. Директория обычно не существует.
# Поэтому ее необходимо создать. Не забудьте изменить
# права чтобы stunnel с uid и gid выставленными выше мог туда писать.
chroot = /var/run/stunnel/
# PID is created inside chroot jail
pid = /stunnel.pid
# Если вы используете stunnel в качестве редиректора
# необходимо выставить в yes. No необходимо если вы
# хотите использовать stunnel в качестве принимающего
# ssl соединения и передающего их службам по умолчанию не
# умеющих создавать ssl соединения. К примеру pop3s -> pop3.
client = yes
# Service-level configuration
# Описывает пере адресацию с не ssl соединения на
# ssl соединение. Я обычно настраиваю stunnel чтобы
# он открывал сокет на localhost и передавал уже
# через ssl туннель на другую машину. Как это
# сделано тут. Если же убрать IP то stunnel
# будет открывать соединения на всех доступных
# интерфейсах.
далее необходимо прописать stunnel в стартовые файлы системы. rc.inet1
rc.M и т.д. (примеры файлов из Slackware BSD Init ). но перед этим
желательно запустить stunnel от root и посмотреть не возникают ли
ошибки. Если вы все правильно сделали у вас появится stunnel.pid и
stunnel.log в каталоге /var/run/stunnel/.
3.2 OpenLDAP 2.x.x.
ВНИМАНИЕ! Я собирал OpenLDAP БЕЗ SASL. По этому если у вас возникают
проблемы с LDAP server из-за SASL, не спрашивайте у меня почему не
работает. Я сам не знаю. Если вы обладаете информацией о том как
установить и заставить правильно работать OpenLDAP с SASL, напишите мне.
Я добавлю методику настройки OpenLDAP c SASL и самой библиотеки SASL в
HOWTO (с указанием автора конечно).
Скачиваем (берем с диска), распаковываем. Какие опции я использовал для
конфигурации перед сборкой (configure скрипт).
configure --prefix=/opt/ldap --enable-cache
prefix - указывает куда ставить OpenLDAP server по умолчанию ставится в
/usr/local.
enable-cache - включить кэш полезно если у вас есть какой либо
пользователь без пароля aka анонимус.
Все остальные опции на ваше усмотрение мне хватает и этих.
Компилируем:
configure --prefix=/opt/ldap --enable-cache
make depend
make install
После этого получаем OpenLDAP сервер собранный но не совсем
работоспособный.
Конфигурационный файл сервера slapd.conf :
# Используемые схемы core содержит userPassword и organizationalUnit
# samba.schema не поставляется вместе с OpenLDAP ее можно взять в
# Samba пакете. Ее можно поместить к остальным схемам.
include /opt/ldap/etc/openldap/schema/core.schema
include /opt/ldap/etc/openldap/schema/nis.schema
include /opt/ldap/etc/openldap/schema/samba.schema
# pidfile файл содержащий pid slapd процесса.
# argsfile файл содержащий аргументы с которыми был запущен slapd (OpenLDAP сервер).
pidfile /opt/ldap/var/slapd.pid
argsfile /opt/ldap/var/slapd.args
# Данная опция необходима только при использовании OpenLDAP 2.1.x.
# Дело в том что OpenLDAP 2.1.x по умолчанию использует только
# протокол LDAPv3.Для добавления LDAPv2 необходимо указать возможность
# такого подключения. У меня включена из-за LDAP реализации в postfix 1.1.11
# Так-как возможно Samba тоже использует тоже протокол LDAPv2 лучше ее включить.
allow bind_v2
# ACL - ограничение доступа к OpenLDAP дереву
# Ветка ou=samba,dc=ldap,dc=ru - отвечает как раз за Samba аккаунты.
# Данные права позволяют писать/читать/искать данные
# админам, Samba процессам.
access to dn=".*,ou=samba,dc=ldap,dc=ru"
by dn=".*,cn=admin,dc=ldap,dc=ru" write
by dn="ou=samba,dc=ldap,dc=ru" write
by self write
by anonymous auth
# Ветка ou=NIS,dc=ldap,dc=ru - отвечает за posix аккаунты аналог записи в passwd
# Данные права позволяют писать/читать/искать данные
# админам, Samba процессам, а так же пользователям изменять свои данные.
# Если админ выставил пользователю пароль доступа.
access to dn=".*,ou=NIS,dc=ldap,dc=ru"
by dn=".*,cn=admin,dc=ldap,dc=ru" write
by dn="ou=samba,dc=ldap,dc=ru" write
by self write
by anonymous auth
# Закрывает доступ к паролям всем кроме админов.
# Пользователи могут читать и изменять только свой пароль что удобно.
access to attr=userPassword
by self write
by anonymous auth
by dn=".*,cn=admin,dc=ldap,dc=ru" write
by * none
# Доступ на все остальное открыт только админам
# И опять же пользователям и только к записи описывающая
# пользователя.
access to *
by dn=".*,cn=admin,dc=ldap,dc=ru" write
by self write
by anonymous auth
#######################################################################
# TLS файлы скрипт генерящий данные файлы есть в пакете с HOWTO
#######################################################################
# Описывает модуль в котором хранятся данные. В OpenLDAP 2.1.x используется
# Berkeley DB 4.x.
database bdb
# Префикс - корень всей базы от которого она будет начинаться
# Можно описать несколько веток причем с разными базами
suffix "dc=ldap,dc=ru"
# Местный супер пользователь присутствует только в версии без SASL.
# Лучше хранить похешированный пароль чем открытый.
# Похешировать пароль можно с помощью slappasswd к примеру MD5 алгоритмом или SHA1
rootdn "cn=admin,dc=ldap,dc=ru"
rootpw secret
# директория где лежит база
directory /opt/ldap/var/openldap-data
# выставление индексации в базе
# может позволить увеличить скорость доступа
# и поиска.
index uid pres,eq
index cn,sn pres,eq,approx,sub
index objectClass eq
ldap.conf
# указывает откуда начинать искать
BASE dc=ldap,dc=ru
# URL до LDAP сервера. Возможны следующие префиксы
# ldaps:// - ssl соединение , ldapi:// - ipsec,
# ldap:// - нешифрованое соединение
# Я использую stunnel из-за глюков у postfix при указании
# здесь ldaps:// он перестает соединяться с LDAP сервером.
# В документации по postfix рекомендуют использовать stunnel.
URI ldap://127.0.0.1
# эти опции необходимы только при указании в URI префикса
# ldaps://
# всегда требовать TLS
теперь мы имеем сконфигурированный OpenLDAP сервер и клиент.
Запустим сервер :
Для открытия ssl сокета сервером надо запускать сервер таким образом :
slapd -h "ldaps://" - принимать только ssl соединения на всех интерфейсах
slapd -h "ldaps:// ldap://127.0.0.1" - принимать ssl соединения со всех интерфейсов
и нешифрованые соединения на localhost.
Подробнее написано в man страничке.
Если сервер не запускается запустите с ключом -d 64. Данное значение
позволяет увидеть какие файлы не смог открыть slapd. Вероятнее всего это
будет файл с SSL сертификатом и ключом.
Приступим к генерации ключей.
Файлы необходимые для генерации сертификатов и ключей.
и запустите его. *.cnf файлы должны лежать в той же директории что и
mkldapcert на выходе получите 2 файла *.pem это файлы с сертификатами и
ключами. Пропишите ldap.pem клиенту, а slapd.pem серверу.
В результате получите доступность ssl соединений с обоих сторон, что
рекомендуем так же как использование вместо telnet ssh.
3.3 nss_ldap.
Наиболее сложный для установки пакет. Рекомендую брать наиболее
последний. Я использовал 187 версию и на ее установку и настройку убил
около 2 часов. На самом деле использовать данный пакет для полной
интеграции самбы с LDAP равносильно забиванию микроскопом гвоздей. Им
вполне можно заменить NIS/NIS+ так как LDAP дает большую гибкость чем
даже NIS+, а так же обеспечивает ( путем ssl-соединений ) довольно
хорошую безопасность а так же может быть использован не только в LAN
сетях, но и в глобальных сетях. Теперь перейдем собственно к
инсталляции. Выкачиваем, распаковываем.
Сборка :
configure --with-ldap-dir=/opt/ldap --with-ldap-conf-file=/opt/ldap/etc/samba/ldap.conf
--with-ldap-secret-file=/opt/ldap/etc/samba/ldap.secret
make
make install
теперь обращаю ваше внимание на то что хотя ldap.conf прописан в другое
место файл конфигурации(документации) лежит в /etc зайдите и перенесите.
Так же там появился файл nsswitch.ldap его так же можно удалить это файл
с примером что надо сделать с nsswitch.conf чтобы nss_ldap заработал.
ldap.conf ( Для nss_ldap а не для ldap клиентов! Это разные файлы. )
# Указываем IP где крутится OpenLDAP.
# Я использую ssl-тунелизацию.
host 127.0.0.1
# Если указываете URI host указывать не надо. Хотя как это работает не проверял
URI ldap://127.0.0.1
# Базовая ветка где будет лежать NIS информация о Samba пользователях.
# uid gid home dir и т.д.
base ou=NIS,dc=ldap,dc=ru
# Используемая версия протокола по умолчанию 3 что верно для OpenLDAP 2.1.x.
# Для OpenLDAP 2.0.x лучше использовать 2.
ldap_version 3
# Используется для только чтения
# rootbinddn - используется для записи
# В данном контексте запись не нужна.
# rootbinddn можно не использовать но лучше выставить в тоже что и binddn
binddn ou=samba,dc=ldap,dc=ru
# Используется для только чтения
# rootbindpw - который используется для записи и хранится отдельно в ldap.secret
bindpw sambapw
# Ветка используемая для записи в LDAP в контексте нашей задачи можно не использовать.
# Если хотите использовать ldap в качестве замены NIS/NIS+ необходимо чтобы пользователь
# обладал правами на запись и присутствовал в файле настройки.
# Пароль rootbindpw хранится в ldap.secret. Не знаю можно ли использовать
# похешированный пароль, если можно напишите мне.
rootbinddn ou=samba,dc=ldap,dc=ru
# далее идут различные параметры тонкой настройки
# интеграция с MS AD и т.п.
# смотрите сами что вам надо.
# У nss_ldap и pam_ldap могут использовать один и тот-же файл конфигурации.
Теперь идет системный файл /etc/nsswitch.conf. Он есть во всех системах
Linux и Solaris и по идее должен присутствовать в остальных UNIX
системах. В этом файле для функционирования Samba+LDAP необходимо
изменить строку :
passwd: compat files
на
passwd: compat files ldap
проще говоря добавить в строку с passwd ldap. Это разрешит системе при
поиске пользователя заходить в LDAP.
3.4 Samba 2.2.x
Теперь приступим к установке Samba. Скачиваем последнюю стабильную
версию, распаковываем.
Установка:
configure --prefix=/opt/samba --with-ldapsam
make install
Это только необходимые опции. Я устанавливаю пакеты обычно в /opt
директорию, что бы не забыть что и когда я ставил.
with-ldapsam - включаю поддержку LDAP.
ВНИМАНИЕ! Если ldap стоит как у меня в папке /opt/ldap а не в /usr/local
то необходимо сделать линки из /opt/ldap/include (к примеру) в
/usr/local/include, а таже из /opt/ldap/lib /usr/local/lib. Это
необходимо чтобы конфигурационный скрипт configure нашел ldap в вашей
системе. Поэтому если вы компилируете пакеты впервые лучше не трогать
опцию prefix.
После того как Samba собралась идем в директорию /opt/samba/lib. Как ни
странно но конфигурационный файл Samba по умолчанию лежит здесь.
Привожу smb.conf
Поясню только опции касающиеся LDAP и 1C Бухгалтерии и некоторые мало
понятные опции. Приму и добавлю все действительно оптимизирующие Samba
опции.
[global]
### smb options ###
workgroup = LDAP
server string = Samba Server with full LDAP support
netbios name = server
announce version = 5.1
### file systems settings ###
character set = KOI8-R
client code page = 866
hide unreadable = yes
### network browsing ###
# Если собираетесь ставить 1C Бухгалтерию на PDC
# То os level должен быть выставлен в 255.
# Если он стоит в 128 XP даже professional отберет мастер браузер
# что приведет к тормозам и глюкам в сети как при ее просмотре
# так и при скачивании чего либо. А так же возникнут глюки при работе с 1C Бухгалтерией.
# В XP очень крива сетевая часть. Что странно при скорость 6 кб/с с Win9x
# с Samba дает стабильно в двое меньше чем Win9x с Samba, обычно 230 кб/с (10 Mbit сеть).
# Наиболее прямой реализацией SMB сети является WinNT.
# Win2k к сожалению не наблюдал.
os level = 255
local master = yes
domain master = yes
preferred master = yes
### WINS & name resolution ###
wins support = yes
;wins server = w.x.y.z
dns proxy = yes
### oplocks ###
# Если собираетесь ставить 1C Бухгалтерию
# или MS Access. И тому подобные базы такие же
# сетевые как 1C Бухгалтерия необходимо
# выставить эти опции как указано.
# Кроме этого надо изменить
# некоторые параметры ядра.
# Они указаны в 5 пункте.
kernel oplocks = yes
level2 oplocks = no
locking = no
oplocks = no
# а это то что обычно лежит в passwd
# в LDAP это можно найти только благодаря nss_ldap
# что и позволяет полную интеграцию с LDAP, хотя и является
# своего рода хинтом.
в LDAP далее sambaAccount можно добавить с помощью smbpasswd -a geco. В
результате Samba не станет матюгаться что нет такого пользователя а
честно добавит его.
5. 1C Бухгалтерия и Samba.
Для samba версии меньшей чем 2.2.7a Для этой самбы все танцы с бубном
отпадают.
Причины некорректной работы и обрушения индексных файлов:
1) железо
2) файловая система
3) samba и её настройки
4) default параметры ядра
5) настройки клиента
Оговорюсь сразу, это метод не панацея, это один из возможных вариантов.
Природа работы 1С не изучена и вряд ли кто-нибудь поймёт почему при
практически аналогичных условиях (версии, клиенты и тп.) в первом случае
всё работает на ура, во втором ни в какую. В моём случае все работает
только в таких рамках
Для начала внимательно man smb.conf Приведу свой вольный перевод
механизма блокировок: В случае с термином "шара" не смог найти краткий и
ёмкий заменитель на русском языке.
# kernel oplocks
Булева опция используется только для UNIX где ядро поддерживает механизм
oplocks (в настоящее время только IRIX и Linux 2.4.x). kernel oplocks
позволяет обходить samba oplocks при обращении локального процесса или
NFS операции к файлу с которым уже работает клиент Samba. Это позволяет
как бы одновременно (последовательным доступом) SMB, NFS и локальными
процессам совместно работать с данными (из мана: very cool feature ((:
). По умолчанию: kernel oplocks = True Не трогать эту опцию на системах,
не поддерживающих ядерную блокировку. См. также: oplocks и level2
oplocks
# level2 oplocks
Эта опция управляет поддержкой read-only oplocks на шаре. Level2
позволяют клиентам Windows NT открывшим oplock файл снизить права с
read-write на read-only при открытии этого файла вторым клиентом, вместо
реализации полного oplocks для второго клиента. Это позволяет вновь
открывшим файл (с выставленным level2 oplocks) кэшировать файл только
для чтения (т.е. они не могут кэшировать запись или блокировать запросы
на файл). Это не влияет на скорость доступа к не записываемым и
исполняемым файлам (типа .exe). Как только один из клиентов, который
имеет read-only oplock записывает этот файл, остальные клиенты
предупреждаются на уровне системы (не требуется ответа о полученном
предупреждении), снимается oplock с файла и он стирается из read-only
кэша. Рекомендуется, чтобы этот параметр был включен, для ускорения
доступа при совместном использовании данных. Больше информации по level2
oplocks см. CIFS спецификации. Обратите внимание, oplocks параметр
должен быть установлен на "Истина" при использовании "Истина" у этого
параметра.
# oplocks
Булева опция (Yes/No или True/False) сообщает smbd, включать/выключать
oplocks на запрашиваемые файлы с какой-либо шары. Включенные oplocks
улучшают скорость доступа к файлам на шарах Samba примерно на 30%,
позволяя клиентам локально кэшировать файлы. Возможно отключение этой
опции для ненадежных сетевых сред (это включено по умолчанию в Серверах
Windows NT [*] ). Для получения дополнительной информации см. файл
Speed.txt в документации к Samba. Oplocks может быть выборочно выключен
на некоторых файлах шары. cм. опцию veto oplock. В некоторых системах
oplocks выставляются за основу работы с файлами самой ОС. Это позволяет
синхронизацию данных между всеми доступами к oplocks файлам (Samba, NFS
или локальный процесс UNIX).
См. опцию kernel oplocks.
По умолчанию: oplocks = True
Теперь всё это осмыслим и вас введёт в заблуждение механизм блокировок
как на уровне ядра, так и на уровне samba. Очень большое подозрение на
неправильную документацию продукта микрософт, либо 1С сама выключает эту
блокировку на winNT, что нам не известно [*], и как следствие полностью
повторенные куски документации в samba, где идёт сравнение механизмов.
Решение:
1) Убедимся что память не битая, винт без бэдов, для ide оттюнен hdparm.
Cетевые карты не должны сбоить. прокачайте по ftp и samba на сервер и
обратно 1Gb файл несколько раз, при подвисании/падении скорости до
значительных величин и ошибках/варнингах ядра на сетевые карты, они
должны быть заменены немедленно. Лучше если каждая 1С база лежит на
отдельной партиции. Файл-сервер должен содержать достаточное кол-во
памяти.
2) Поставим журналируемую фс, чем решим очень много проблем. у меня базы
лежат на cgi xfs и reiserfs хинт: партицию монтируйте с опцией noatime
3) Категорически настаиваю на обновлении samba до 2.2.5 [на время
написание документа, это последняя версия ветки 2.2]
blocking locks = yes
kernel oplocks = yes
locking = no
oplocks = no
level2 oplocks = no
posix locking = yes
strict locking = no
share modes = yes
хинт: при таком раскладе невозможно пользоваться 1С:Монитор для сброса
пользователей (показывает нереальное кол-во пользователей). тогда
прибегнем к: smbcontrol smbd close-share mybasa у вас ведь каждая база в
отдельной шаре? ;) шара не пропадёт из виду и может быть спокойно
задействована при обращении к ней
Обратите внимание, если 1С шара лежит на PDC:
у вас не должно быть перевыборов в сети никогда:
os level = 255
включите WINS:
wins support = yes
и пропишите на клиентах
4) если у вас базы большие, man sysctl категорически рекомендуем. вот
мой /etc/sysctl.conf на работу с ~40 клиентами базы в 150-250Mb
(основные)
5) Конечно, сами клиенты должны иметь хорошее железо, особенно в сетевой
части. Рихтовка win98 клиентов: Устранение неполадок -> Файловая система
-> Новая семантика блокировок С w2k всё ок.
6. Проекты.
Приглашаются люди к созданию проекта "Урбос".
Цели преследуемые проектом:
1. Полная интеграция с OpenLDAP всех возможных сервисов. Это HOWTO
является частью пакета документации по интеграции с LDAP. Ранее было
написано HOWTO по созданию Postfix+courier-imap+OpenLDAP в связи с
выходом новой версии courier-imap и собственно с неудобочитаемостью
сейчас находится переработке.
2. Построение на основе OpenLDAP единых доменов аля NIS/NIS+. Возможные
варианты через nss_ldap или pam_ldap. Я пока не понял как заставить
добавлять пользователям shadow пароли так, чтобы это действительно
работало.
3. Создание Web-интерфейса направленного на эффективное управление
сервисами и LDAP доменом. На основе java и tomcat-серевера. Как наиболее
универсального и технологичного языка для написания web-приложений.Что
позволит установить сервер на какой угодно платформе. Главное была бы
java машина.
7. Авторы.
Анатолий В. Шипицын aka norguhtar mailto:sauron@e-xo.com 1-4 пункты.
Валентин С. Рябинин aka bass mailto:bass@edinstvo.com 5 пункт.
8. Благодарности.
Всем людям с irc.rinet.ru #lrn за интересные идеи, знания, мысли и
проявленное терпение.
Валентину С. Рябинину за присланный материал по 1C Бухгалтерии
включенный в данное HOWTO.