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 (www.samba.org).
Подойдет любая но лучше брать последнюю т.к. в ней чаще всего исправлены
какие либо ошибки присутствующие в более ранних версиях. К примеру 1C Бухгалтерия (Сетевой
вариант) будет работать или на Samba 2.0.x версиях или на Samba 2.2.5 и выше. Так же далее
в данной документации будет приведены опции для нормальной работы этого отечественного
продукта.
OpenLDAP 2.x.x (www.openldap.org)
Если не хотите проблем при установке и настройке лучше берите 2.0.23 она стабильна
и проста в установке. Я использую LDAP сервер 2.1.8 поскольку 2.0.23 почему-то не очень
хорошо работал с SSL.
Berkeley DB 4.x (www.sleepycat.com)
Необходима только если вы захотите использовать OpenLDAP 2.1.x. Ее сборка и инсталляция
не рассматривается в данном HOWTO.
nss_ldap(pam_ldap) (www.padl.com)
Какой из модулей взять зависит от вашего дистрибутива. Хотя при использовании
pam_ldap может потребоваться nss_ldap. Мой дистрибутив не содержит pam поэтому в
HOWTO рассматривается только случай с nss_ldap как более универсальный.
Stunnel (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 утилитами
cert = /usr/local/etc/stunnel/stunnel.pem
# Отладочные опции
#debug = 7
output = /var/run/stunnel/stunnel.log
# 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
# будет открывать соединения на всех доступных
# интерфейсах.
[ldaps]
accept = 127.0.0.1:389
connect = 192.168.1.1:636
далее необходимо прописать 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
#######################################################################
TLSCertificateFile /opt/ldap/etc/openldap/ssl/slapd.pem
TLSCertificateKeyFile /opt/ldap/etc/openldap/ssl/slapd.pem
# Описывает модуль в котором хранятся данные. В 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
TLS hard
# файлы или файл с сертификатами
TLS_CERT /opt/ldap/etc/openldap/ssl/ldap.pem
TLS_KEY /opt/ldap/etc/openldap/ssl/ldap.pem
# допускать самопальные сертификаты
TLS_REQCERT allow
теперь мы имеем сконфигурированный OpenLDAP сервер и клиент.
Запустим сервер :
Для открытия ssl сокета сервером надо запускать сервер
таким образом :
slapd -h "ldaps://" - принимать только ssl соединения на всех интерфейсах
slapd -h "ldaps:// ldap://127.0.0.1" - принимать ssl соединения со всех интерфейсов
и нешифрованые соединения на localhost.
Подробнее написано в man страничке.
Если сервер не запускается запустите с ключом -d 64.
Данное значение позволяет увидеть какие файлы не смог
открыть slapd. Вероятнее всего это будет файл с SSL
сертификатом и ключом.
Приступим к генерации ключей.
Файлы необходимые для генерации сертификатов и ключей.
ldap.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
C=RU
ST=Russia
L=Linux
O=Linux LDAP
OU=LDAP SSL Key
CN=ldap.ru
emailAddress=admin@ldap.ru
[ cert_type ]
nsCertType = client
slapd.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
C=RU
ST=Russia
L=Linux
O=Linux LDAP
OU=LDAP SSL Key
CN=ldap.ru
emailAddress=admin@ldap.ru
[ cert_type ]
nsCertType = server
После создания этих файлов создайте исполняемый файл
mkldapcert
#!/bin/sh
/usr/bin/openssl req -new -x509 -days 365 -nodes -config ldap.cnf -out ldap.pem -keyout ldap.pem
/usr/bin/openssl req -new -x509 -days 365 -nodes -config slapd.cnf -out slapd.pem -keyout slapd.pem
и запустите его. *.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
### passwords & authentication & security ###
security = domain
password server = *
encrypt passwords = yes
null passwords = yes
# отключение доступа анонимных пользователей
invalid users = nobody
### domain control ###
domain logons = yes
;logon script = %U.bat
logon path = \\%L\Profiles\9x\%m\%U
logon home = \\%L\%U
;logon home = \\%L\Profiles\NT\%m\%U
logon drive = H:
### LDAP definitions ###
# С OpenLDAP 2.1.x samba отказалась работать по ssl
# ссылаясь на отсутствие сервера
# но согласилась работать через stunnel
ldap server = 127.0.0.1
# Ветка в которой хранятся samba пользователи
ldap suffix = "ou=samba,dc=ldap,dc=ru"
# Пользователь обладающий правом писать в ветку с samba пользователями.
# Пароль выставляется smbpasswd -w пароль и хранится в secrets.tdb
ldap admin dn = "ou=samba,dc=ldap,dc=ru"
# Выключаем native ssl
# Работает с OpenLDAP 2.0.23
ldap ssl = off
### winbind ###
winbind uid = 10000-65000
winbind gid = 10000-65000
winbind separator = +
### network options ###
socket options = TCP_NODELAY
### oplocks ###
# Если собираетесь ставить 1C Бухгалтерию
# или MS Access. И тому подобные базы такие же
# сетевые как 1C Бухгалтерия необходимо
# выставить эти опции как указано.
# Кроме этого надо изменить
# некоторые параметры ядра.
# Они указаны в 5 пункте.
kernel oplocks = yes
level2 oplocks = no
locking = no
oplocks = no
### log settings ###
log file = /opt/samba/var/logs/log.%m
log level = 1
max log size = 50
### shares ###
[netlogon]
path = /opt/samba/var/netlogon
locking = no
read only = yes
[profiles]
path = /opt/samba/var/profiles
read only = no
writeable = yes
create mask = 0600
directory mask = 0700
[homes]
comment = user homes
browsable = no
read only = no
writeable = yes
create mask = 0600
directory mask = 0700
Далее запустить samba
smbd -D
nmbd -D
4. Добавление пользователей.
привожу несколько ldapdiff файлов
сначала добавим пользователей и начала
ветвей админов и Samba аккаунтов.
initldap
dn: dc=ldap,dc=ru
objectclass: dcObject
objectclass: organization
dc: ldap
o: LDAP
description: LDAP root
dn: cn=admin,dc=ldap,dc=ru
objectclass: organizationalRole
cn: admin
dn: ou=samba,dc=ldap,dc=ru
objectclass: organizationalUnit
ou: samba
description: Samba LDAP Unit
userPassword: password
dn: ou=NIS,dc=ldap,dc=ru
objectclass: organizationalUnit
ou: NIS
description: NIS LDAP Unit
dn: cn=sadmin,cn=admin,dc=ldap,dc=ru
objectclass: person
cn: sadmin
sn: root
description: SysAdmin
userPassword: password
Эти 2 пользователя должны быть!
Видимо для совместимости с NT 4.0 Server там при свежей инсталляции
они только и наблюдаются
smbldap
# собственно samba account
dn: uid=Administrator, ou=samba,dc=ldap,dc=ru
objectclass: sambaAccount
cn: Administrator
uid: Administrator
pwdLastSet: 0
logonTime: 0
logoffTime: 0
kickoffTime: 0
pwdCanChange: 0
smbHome: \\%N\
homeDrive: U:
profilePath: \\%N\profile
rid: 500
primaryGroupID: 512
lmPassword: 37D00B8EA7069F96385257124DB42069
ntPassword: 38605B8AB8F6D30AEFE8388E7D2BE319
acctFlags: [U ]
# а это то что обычно лежит в passwd
# в LDAP это можно найти только благодаря nss_ldap
# что и позволяет полную интеграцию с LDAP, хотя и является
# своего рода хинтом.
dn: uid=Administrator, ou=NIS,dc=ldap,dc=ru
cn: Administrator
objectclass: posixAccount
uid: Administrator
uidNumber: 1005
gidNumber: 4
homeDirectory: /smb/home/admin
dn: uid=nobody, ou=samba,dc=ldap,dc=ru
cn: nobody
objectclass: sambaAccount
uid: nobody
pwdLastSet: 0
logonTime: 0
logoffTime: 0
kickoffTime: 0
pwdCanChange: 0
smbHome: \\%N\
homeDrive: U:
profilePath: \\%N\profile
rid: 501
primaryGroupID: 514
lmPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
ntPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
acctFlags: [NU ]
dn: uid=nobody, ou=NIS,dc=ldap,dc=ru
cn:nobody
objectclass: posixAccount
uid: nobody
uidNumber: 1006
gidNumber: 4
homeDirectory: /home/ftp
Теперь добавляем эти файлы при помощи ldapadd в LDAP базу.
slapd должен быть запущен если вы используете stunnel как я
он тоже должен быть запущен.
ldapadd -D "cn=admin,dc=ldap,dc=ru" -W -f файл
сначала первый затем второй.
Теперь можно добавлять пользователей :
сначала нужно добавить запись
вида
dn: uid=geco, ou=NIS,dc=ldap,dc=ru
cn:nobody
objectclass: posixAccount
uid: nobody
uidNumber: 1006
gidNumber: 4
homeDirectory: /smb/geco
в 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 (основные)
fs/file-max=131070
net/core/rmem_default=1048576
net/core/rmem_max=1048576
net/core/wmem_default=1048576
net/core/wmem_max=1048576
kernel/shmmax=167772160
vm/bdflush=100 1000 128 256 500 6000 6000 2048 2
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.
Эта статья была прислана на
конкурс статей.
При перепечатке ссылка на
www.linuxrsp.ru обязательна.