15 июня 2025, 19:04:06

Новости:

Узнай первым о новых темах и ответах в Telegram канале:  @gratis_forum


D

OpenLDAP

Автор Dark_Elf, 14 февраля 2007, 20:20:41

0 Пользователей и 1 гость просматривают эту тему.

Dark_Elf

Господа! Где можно найти подробный и толковый мануал по OpenLDAP? Шоб понятно было и в тоже время в полной мере, то есть не только настройка сервера, но еще и настройка рабочих станций на разных платформах.

Заранее спасибо.

Duke

Настройка PAM_LDAP

  ВАЖНОЕ ЗАМЕЧНИЕ: ВСЕ ДЕЙСТВИЯ, ОПИСАННЫЕ В ДАННОЙ СТАТЬЕ БЫЛИ
  БОЛЕЕ-МЕНЕЕ ПРОВЕРЕНЫ НА ПРАКТИКЕ, НО В ЛЮБОМ СЛУЧАЕ - ВСЕ ВРЕМЯ
  УСТАНОВКИ ЭТИХ НАСТРОЕК Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ВАМ ИМЕТЬ ДВЕ
  ЗАПАСНЫХ (Т.Е. ТЕХ, С КОТОРЫХ ВЫ НЕ РАБОТАЕТЕ В ТЕКУЩИЙ МОМЕНТ)
  КОНСОЛИ С ПРАВАМИ СИСТЕМНОГО АДМИНИСТРАТОРА.


Что такое PAM_LDAP?

  PAM_LDAP - это модуль для подсистемы PAM (Pluggable Authentication
  Modules). NSS_LDAP - это эще один модуль, позволяющий хранить в
  каталоге LDAP единую базу системной информации - пользователей, групп,
  компьютеров, сервисов и т.д., которую могут совместно использовать
  множество Linux-систем. Хотя существуют реализации этих модулей не
  только для Linux, но и для FreeBSD, Solaris и других Unix-систем, в
  этой краткой инструкции я буду рассматривать ТОЛЬКО Linux, причем на
  примере своего дистрибутива Fedora Core 1 (впрочем, эти же инструкции
  должны естественным образом без особых изменений пойти и на других
  более-менее современных дистрибутивах). Рассматривать действия по
  настройке этих модулей я стану в комплексе, не разделяя, что делается
  для pam_ldap, и что для nss_ldap.


Необходимые условия

    * Установленный дистрибутив Fedora Core 1
    * Установленный пакет nss_ldap
    * Установленный пакет openldap-servers
    * Прямые руки :-)


Настройка сервера OpenLDAP

  Прежде всего, необходимо выбрать suffix - фактически, это полное имя
  корневого объекта вашего каталога. Обычно его связывают с доменным
  именем, например для домена pupkin.com.ru оптимальнее всего
  использовать следующий суффикс: dc=pupkin,dc=com,dc=ru. Кроме этого,
  нам потребуется имя для администраторского эккаунта в каталоге. Это
  имя получается добавлением уникального в текущей ветви дерева
  идентификатора к суффиксу. Полученное значение называют rootdn, и
  используя это имя, можно получить полный доступ к каталогу. Пусть в
  нашем примере rootdn будет cn=sysadm,dc=pupkin,dc=com,dc=ru. теперь
  укажем пароль для этой учетной записи, для чего запустим утилиту

      slappasswd: slappasswd -h '{SMD5}' -s zarazamelkaya

  Слово zarazamelkaya в данном случае и будет являться паролем. В
  приципе, можно указать пароль и открытым текстом, но этого делать не
  рекомендуется. Выданную утилитой slappasswd строку стоит записать
  куда-нибудь :-)

  Теперь приступаем к редактированию /etc/openldap/slapd.conf:

       include         /etc/openldap/schema/core.schema
       include         /etc/openldap/schema/cosine.schema
       include         /etc/openldap/schema/inetorgperson.schema
       include         /etc/openldap/schema/nis.schema
       include         /etc/openldap/schema/redhat/autofs.schema
       include         /etc/openldap/schema/openldap.schema
       include         /etc/openldap/schema/misc.schema

       pidfile /var/run/slapd.pid

       access to attrs=userPassword by self write by * auth
       access to * by peername=127.0.0.1 read by anonymous auth by users read

       database        ldbm
       suffix          "dc=pupukin,dc=com,dc=ru"
       rootdn          "cn=sysadm,dc=pupkin,dc=com,dc=ru"
       rootpw          {SMD5}hjUUf7pqdVsrpG44/Ql+hlszywY=

       directory       /var/lib/ldap

       index objectClass                       eq,pres
       index ou,cn,mail,surname,givenname      eq,pres,sub
       index uidNumber,gidNumber,loginShell    eq,pres
       index uid,memberUid                     eq,pres,sub
       index nisMapName,nisMapEntry            eq,pres,sub

  В качестве параметра для rootpw мы и указали сгенерированный хэш от
  пароля первичного администратора сервера каталога. Директивы include
  служат для подключения файлов схем LDAP, описывающих атрибуты и классы
  объектов, хранимых в каталоге. Директивы index указывают, по каким
  атрибутам нужно строить индектсы для ускорения поиска. Параметр
  database определяет бакэнд для хранения базы.

  Запускаем сервер:

       /etc/init.d/ldap start

  Создаем корневой объект каталога:

       admin$ echo -e "dn: dc=pupkin,dc=com,dc=ru
       objectClass: dcObject
       objectClass: organization
       dc: pupkin
       o: Vasya Pupkin and Co. Ltd" | ldapadd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389

  Проверяем, что сервер работает:

       ldapsearch -x -D "cn=sysadm,dc=pupkin,dc=com,dc=ru" \
          -w zarazamelkaya -s sub -b "dc=pupkin,dc=com,dc=ru" \
          "(objectClass=*)"

  Если ошибок нигде совершено не было, ldapsearch выдаст на стандартный
  вывод описание созданого командой ldapadd объекта в формате ldiff.
  Впоследствии такой ldiff-файл может быть использован для
  восстановления каталога, или для создания его двойника.


Настройка PAM и NSS для использования LDAP

  Для достижения нужного эффекта нам необходимо "довести до ума"
  конфигурационный файл для pam_ldap (называется он /etc/ldap.conf) и
  произвести настройку собственно PAM. Начинаем со второго пункта, и
  запускаем authconfig (в RedHat и подобных). Активизируем использование
  аутентификации в LDAP, НЕ ОТКЛЮЧАЯ ИСПОЛЬЗОВАВШИХСЯ РАНЕЕ ОПЦИЙ, иначе
  начнутся проблемы. Указываем в качестве адреса сервера LDAP адрес
  127.0.0.1 и в качестве basedn значение нашего suffix'а из конфигурации
  сервера:
 
       dc=pupkin,dc=com,dc=ru

  На самом деле, authconfig просто исправляет три файла:
  /etc/pam.d/system-auth /etc/ldap.conf и /etc/nsswitch.conf, при этом
  после завершения authconfig рекомендуется проверить, чтобы содержимое
  /etc/ldap.conf выглядело примерно описанным ниже образом. В принципе,
  в /etc/ldap.conf есть много очень полезных комментариев и параметров,
  но нам пока что они не интересны. Вот слегка измененная копия
  /etc/ldap.conf с работающей системы.

       host 127.0.0.1
       base dc=pupkin,dc=com,dc=ru
       rootbinddn cn=sysadm,dc=pupkin,dc=com,dc=ru
       port 389
       scope sub
       pam_filter objectclass=posixAccount
       pam_login_attribute uid
       nss_base_passwd dc=pupkin,dc=com,dc=ru?sub?objectClass=posixAccount
       nss_base_shadow dc=pupkin,dc=com,dc=ru?sub?objectClass=posixAccount
       nss_base_group  dc=pupkin,dc=com,dc=ru?sub?objectClass=posixGroup
       ssl no
       pam_password md5

  Также неоходимо создать файл /etc/ldap.secret и сохранить в нем пароль
  администратора каталога. Этот пароль будет использоваться для
  выполнения административных функций, и не будет доступен обычным
  пользователям:

       # echo "zarazamelkaya" >/etc/ldap.secret
       # chmod 600 /etc/ldap.secret
       # chmod root:root /etc/ldap.secret

  В /etc/nsswitch.conf строки, указывающие, из какого источника
  программам нужно брать данные о пользователях, паролях и группах,
  должны выглядеть аналогично следующему примеру:

       passwd:     files ldap
       shadow:     files ldap
       group:      files ldap

  Настройки PAM для использования LDAP производятся путем корректного
  вписывания pam_ldap.so в нужные файлы в /etc/pam.d - уточним, что
  нужный файл в моем любимом дистрибутиве Fedora Core 1 только один,
  зовется он /etc/pam.d/system-auth и выглядит следующим образом:

       #%PAM-1.0
       # This file is auto-generated.
       # User changes will be destroyed the next time authconfig is run.
       auth        required      /lib/security/$ISA/pam_env.so
       auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
       auth        sufficient    /lib/security/$ISA/pam_ldap.so use_first_pass
       auth        required      /lib/security/$ISA/pam_deny.so

       account     sufficient    /lib/security/$ISA/pam_unix.so
       account     sufficient    /lib/security/$ISA/pam_ldap.so

       password    required      /lib/security/$ISA/pam_cracklib.so retry=3 type=
       password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
       password    sufficient    /lib/security/$ISA/pam_ldap.so use_authtok
       password    required      /lib/security/$ISA/pam_deny.so

       session     required      /lib/security/$ISA/pam_limits.so
       session     required      /lib/security/$ISA/pam_unix.so
       session     optional      /lib/security/$ISA/pam_ldap.so

  Необходимо отметить, что если вы попытаетсь настроить все это
  используя утилиту authconfig, в рискуете получить неработспособную в
  случае отсутствия LDAP-сервера систему. Приведенный мной пример
  содержимого файла /etc/pam.d/system-auth свободен от этого недостатка
  - хотя, возможно, обладает другими ошибками. Тем не менее, поскольку
  этот файл работает и у меня дома, и на работе, я буду считать его
  подходящим. Естественно, не следует также забывать о том, что опции,
  передаваемые в pam_unix.so (md5, shadow & etc) варьируются в
  зависсимости от настроек вашей системы.


Регистрация пользователей

  Совершив данные исправления, можно приступать к тестированию, для чего
  необходимо завести пользователя. Пользователи у нас будут являться
  сочетанием двух классов - nisMailAlias и posixAccount. Почему так? Да
  потому, что я ленив - и данное сочетание удовлетворяет минимальным
  необходимым условиям: класс nisMailAlias является STRUCTURAL (т.е.
  экземпляр объекта этого класса можно породить), и требует только
  наличия атрибута cn, а класс posixAccount является AUXILIARY, и
  требует атрибутов cn, uidNumber, gidNumber и uid:

       admin$ echo "dn: cn=vasya,dc=pupkin,dc=com,dc=ru
       objectClass: nisMailAlias
       objectClass: posixAccount
       cn: vasya
       uid: vasya
       uidNumber: 1000
       gidNumber: 1000
       gecos: Vasiliy Pupkin
       loginShell: /bin/bash
       homeDirectory: /home/vasya" | ldapadd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389

       admin$ echo "dn: cn=petya,dc=pupkin,dc=com,dc=ru
       objectClass: nisMailAlias
       objectClass: posixAccount
       cn: petya
       uid: petya
       uidNumber: 1001
       gidNumber: 1000
       gecos: Petya Pupkin
       loginShell: /bin/bash
       homeDirectory: /home/petya" | ldapadd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389

       admin$ echo "dn: cn=katya,dc=pupkin,dc=com,dc=ru
       objectClass: nisMailAlias
       objectClass: posixAccount
       cn: katya
       uid: katya
       uidNumber: 1001
       gidNumber: 1000
       gecos: Katya Pupkina
       loginShell: /usr/bin/mc
       homeDirectory: /export/home/katya" | ldapadd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389

  Значения атрибутов с их привязкой к идентификаторам:
  uid==getenv("USER"), uidNumber==getuid(), gidNumber==getgid(),
  остальные поля понятны по названию. Тэк-с, пользователей мы создали -
  теперь создадим группу:

       admin$ echo "dn: cn=pupkingroup,dc=pupkin,dc=com,dc=ru
       objectClass: posixGroup
       cn: pupkingroup
       gidNumber: 1000
       description: Primary group of Pupkin-COM-RU domain
       memberUid: vasya
       memberUid: petya
       memberUid: katya" | ldapadd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389

  И напоследок установим пароли для наших пользователей:

       admin$ ldappasswd -x \
          -D "cn=sysadm,dc=pupkin,dc=com,dc=ru"
          -w zarazamelkaya
          -h localhost -p 389 -s SuperParol cn=vasya,dc=pupkin,dc=com,dc=ru

  Вот и все, осталось проверить, что пользователь vasya может
  логиниться. По крайней мере, у меня он логинился с паролем SuperParol
  :-) Есть один немаловажный аспект, в данной статье не рассмотреный -
  это настройки безопасности и контроля доступа сервера LDAP - но это
  уже тема для другой статьи.

Добавлено:
[code]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:[Для просмотра ссылки зарегистрируйтесь]). Подойдет любая но лучше брать последнюю
т.к. в ней чаще всего исправлены какие либо ошибки присутствующие в
более ранних версиях. К примеру 1C Бухгалтерия (Сетевой вариант) будет
работать или на Samba 2.0.x версиях или на Samba 2.2.5 и выше. Так же
далее в данной документации будет приведены опции для нормальной работы
этого отечественного продукта.

OpenLDAP 2.x.x (http:[Для просмотра ссылки зарегистрируйтесь]) Если не хотите проблем при установке и
настройке лучше берите 2.0.23 она стабильна и проста в установке. Я
использую LDAP сервер 2.1.8 поскольку 2.0.23 почему-то не очень хорошо
работал с SSL.

Berkeley DB 4.x (http:[Для просмотра ссылки зарегистрируйтесь]) Необходима только если вы захотите
использовать OpenLDAP 2.1.x. Ее сборка и инсталляция не рассматривается
в данном HOWTO.

nss_ldap(pam_ldap) (http:[Для просмотра ссылки зарегистрируйтесь]) Какой из модулей взять зависит от
вашего дистрибутива. Хотя при использовании pam_ldap может потребоваться
nss_ldap. Мой дистрибутив не содержит pam поэтому в HOWTO
рассматривается только случай с nss_ldap как более универсальный.

Stunnel (http:[Для просмотра ссылки зарегистрируйтесь]) SSL туннелирование обычных не ssl соединений.
Понадобился из-за того что Samba при попытке подключиться через SSL к
LDAP (2.1.8) серверу чаще всего говорила, что его там нет, хотя он
присутствовал. А через stunnel нормально подключалась.

OpenSSL ([Для просмотра ссылки зарегистрируйтесь]) Необходим для установки 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 в качестве редиректора
   # необходимо выставить в 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.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/[Для просмотра ссылки зарегистрируйтесь]
   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=[Для просмотра ссылки зарегистрируйтесь]
   emailAddress=[Для просмотра ссылки зарегистрируйтесь]


   [ 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=[Для просмотра ссылки зарегистрируйтесь]
   emailAddress=[Для просмотра ссылки зарегистрируйтесь]


   [ 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) кэшировать файл тольк

Feles

Duke
Пасибо! Клево, блин!!! Бум изучать :)

Думать надо о том, о чем надо думать, а о том, о чем не надо думать - думать не надо (с) (В.П Макаров)

Dark_Elf

Плюс еще:

[Для просмотра ссылки зарегистрируйтесь]



По всем вопросам пишите по адресу gratispp@mail.ru