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
    [email protected]


    [ 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
    [email protected]


    [ 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:[email protected] 1-4 пункты.
Валентин С. Рябинин aka bass mailto:[email protected] 5 пункт.

8. Благодарности.

Всем людям с irc.rinet.ru #lrn за интересные идеи, знания, мысли и проявленное терпение.
Валентину С. Рябинину за присланный материал по 1C Бухгалтерии включенный в данное HOWTO.


Эта статья была прислана на конкурс статей.
При перепечатке ссылка на http://www.linuxrsp.ru/ обязательна.