Это старая версия документа.


Настроив PDC + LDAP и прикрутив к LDAP почтовик и авторизацию Squid я задумался о следующем, а что если мой незаменимый LDAP сервер сломается и что тогда, куча разъярённых пользователей во главе с директором оставшиеся без почты, интернета, файл сервера и возможности зайти на свой компьютер, носятся по офису с криками а ну делай что нибудь, при этом директор то и дело рассказывает что он сделает с тобой если в ближайшее время всё не заработает ;). Ситуация как говорится не из приятных. Дабы избежать подобных ситуаций я решил настроить резервный сервер.

И так, имеется свежеустановленная Ubuntu 10.04 в процессе установки был выбран LAMP сервер, в связи с этим я здесь не буду описывать настройку apache2 + php5.

Все действия в этой статье выполняются от пользователя root.

Для настройки резервного сервера LDAP нам понадобятся все схемы установленные на основном сервере, их можно взять на основном сервере, если вы не сохраняли подготовленные для установки схемы, тогда их необходимо будет создать заново. В данной статье я буду создавать необходимые схемы заново.

Скачиваем Gosa 2.6.11 с оф. сайта, это последняя версия на момент написания статьи.

wget -P /tmp http://oss.gonicus.de/pub/gosa/gosa-combined-2.6.11.tar.bz2

Распаковываем содержимое архива

tar xjf /tmp/gosa-combined-2.6.11.tar.bz2 -C /tmp

1. Приступаем к настройке LDAP

Устанавливаем необходимые пакеты

apt-get install slapd ldap-utils

Подключаем базовые схемы

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif

Теперь нужно подключить схемы которые мы подключали для работы Gosa и samba.

Копируем схему samba в каталог /etc/ldap/schema

cp /tmp/gosa-2.6.11/contrib/openldap/samba3.schema /etc/ldap/schema/

Схему samba3.schema необходимо перевести в формат ldif. Для этого переходим в каталог /etc/ldap

cd /etc/ldap

и создаём файл schema_convert.conf

> schema_convert.conf

следующего содержания:

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/openldap.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/misc.schema
include         /etc/ldap/schema/samba3.schema

Затем создадим временный каталог и конвертируем в него схему

mkdir /tmp/ldif_output
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={6}samba3,cn=schema,cn=config" > /tmp/cn=samba3.ldif

Переходим в каталог с полученной схемой

cd /tmp/

Далее приступаем к редактированию полученной схемы. Открываем схему cn=samba3.ldif в вашем любимом редакторе (я пользуюсь редактором в mc) и приводим её к следующему виду

Редактируем заголовок:

было:

dn: cn={6}samba3,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {6}samba3

стало:

dn: cn=samba3,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba3

В конце схемы удаляем строки примерно следующего содержания

structuralObjectClass: olcSchemaConfig
entryUUID: 7ffcc302-2474-102f-8b3e-d5fe493c556a
creatorsName: cn=config
createTimestamp: 20100715155056Z
entryCSN: 20100715155056.239425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100715155056Z

То есть удаляем всё начиная с structuralObjectClass: и до конца файла.

Ну и на последок копируем и переименовываем файл схемы

cp /tmp/cn\=samba3.ldif /etc/ldap/schema/samba3.ldif

Далее необходимо подобным образом отредактировать все ldif файлы находящиеся в /tmp/gosa-2.6.11/contrib/openldap/

cd /tmp/gosa-2.6.11/contrib/openldap/

К примеру возьмём файл trust.ldif.

Было:

dn: cn={13}trust
objectClass: olcSchemaConfig
cn: {13}trust
olcAttributeTypes: {0}( 5.3.6.1.1.1.1.0 NAME 'trustModel' DESC 'Access scheme'
  EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6
 .1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {1}( 5.3.6.1.1.1.1.1 NAME 'accessTo' DESC 'Access to which 
 servers user is allowed' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs
 tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: {0}( 5.3.6.1.1.1.2.0 NAME 'trustAccount' DESC 'Sets trust ac
 counts information' SUP top AUXILIARY MUST trustModel MAY accessTo )
structuralObjectClass: olcSchemaConfig
entryUUID: fbafdc48-f065-102e-960d-79233977c302
creatorsName: cn=config
createTimestamp: 20100510095600Z
entryCSN: 20100510095600.855485Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100510095600Z

Стало:

dn: cn=trust,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: trust
olcAttributeTypes: {0}( 5.3.6.1.1.1.1.0 NAME 'trustModel' DESC 'Access scheme'
  EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6
 .1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {1}( 5.3.6.1.1.1.1.1 NAME 'accessTo' DESC 'Access to which 
 servers user is allowed' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs
 tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: {0}( 5.3.6.1.1.1.2.0 NAME 'trustAccount' DESC 'Sets trust ac
 counts information' SUP top AUXILIARY MUST trustModel MAY accessTo )

Теперь копируем их в каталог /etc/ldap/schema

cp /tmp/gosa-2.6.11/contrib/openldap/*.ldif /etc/ldap/schema/ && cp /tmp/gosa-2.6.11/contrib/openldap/*.schema /etc/ldap/schema/

Подключаем схемы в следующем порядке

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/trust.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba3.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosystem.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gofon.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goto.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goto-mime.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa-samba3.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gofax.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goserver.ldif

Так как при подключении почтовика была добавлена ещё одна схема то её также необходимо будет добавить. Переходим в каталог /tmp/gosa-2.6.11/contrib/plugins/fai и редактируем файл схемы fai.ldif, так как это описывалось выше т.е.:

Строки в начале приводим к виду

dn: cn=fai,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: fai

и в конце файла удаляем всё начиная с structuralObjectClass: и до конца файла.

Добавляем эту схему в LDAP

cp /tmp/gosa-2.6.11/contrib/plugins/fai/fai.ldif /etc/ldap/schema/
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/fai.ldif

Переходим в каталог /etc/ldap

cd /etc/ldap

Создаём базу LDAP такую же как создавали для основного сервера. Для этого создаём файл db.ldif

>db.ldif 

следующего содержания:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet,userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to dn.subtree="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read

Исправьте в созданном файле имя домена на то что у вас указанно в основном сервере. Например, если у вас на основном сервере домен dc=kontora,dc=ru то и здесь замените домен dc=example,dc=com на dc=kontora,dc=ru во всём тексте.

Установите пароль администратора такой же как на основном сервере в соответствующей строке файла

olcRootPW: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==                      
в данном примере пароль будет secret

для получения шифрованного пароля была использована утилита slappasswd, использовать её надо следующим образом

slappasswd -h {<МЕТОД_ХЕШИРОВАНИЯ>} -s ПАРОЛЬ

Например

slappasswd -h {MD5} -s secret

Вывод: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

Теперь загрузим эту конфигруацию:

ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif

Далее включаем шифрование для нашего резервного LDAP.

Идём на наш основной LDAP сервер.

Создаём папку для сертификатов backup сервера и заходим в неё

mkdir /etc/ssl/ldap02-ssl && cd /etc/ssl/ldap02-ssl

Создаём ключ для резервного сервера

certtool --generate-privkey > ldap02_slapd_key.pem

Создаём файл ldap02.info следующего содержания

country = US
state = North Carolina
locality = Winston-Salem
organization = Example Company
cn = mail.example.com
tls_www_client
encryption_key
signing_key

Первые пять значений меняйте на свои.

Создаём сертификат

certtool --generate-certificate --load-privkey ldap02_slapd_key.pem \
--load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \
--template ldap02.info --outfile ldap02_slapd_cert.pem

Копируем СА сертификат

cp /etc/ssl/certs/cacert.pem .

Теперь содержимое папки ldap02-ssl необходимо скопировать на backup сервер следующим образом: файлы cacert.pem и ldap02_sldapd_cert.pem необходимо положить в папку /etc/ssl/certs на backup сервере, файл ldap02_sldapd_key.pem необходимо положить в папку /etc/ssl/private на backup сервере.

Теперь мы имеем certificate, key, и CA cert для установки, используем утилиту ldapmodify для добавления новых опций в конфигурацию.

Вводим в консоли

ldapmodify -Y EXTERNAL -H ldapi:///

затем вставляем следующее:

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap02_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap02_slapd_key.pem

После чего жмём дважды enter должна появится надпись modifying entry «cn=config» и Ctrl+D для выхода.

Далее редактируем /etc/default/slapd опцию SLAPD_SERVICES

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Теперь пользователь openldap дорлжен иметь доступ к сертификату (не забываем менять ldap02 на своё)

adduser openldap ssl-cert && chgrp ssl-cert /etc/ssl/private/ldap02_slapd_key.pem && chmod g+r /etc/ssl/private/ldap02_slapd_key.pem

Перезагружаем LDAP

/etc/init.d/slapd restart

Если после перезагрузки ldap не запустился, а в syslog присутствует main: TLS init def ctx failed: -1, это ошибка конфигурации, проверьте содержимое файла /etc/ldap/slapd.d/cn=config.ldif правильно ли в нём указаны пути и названия сертификатов и убедитесь в том что группа ssl-cert имеет возможность читать закрытый ключ /etc/ssl/private/ldap02_slapd_key.pem

Теперь добавим индексы для samba

cd /etc/ldap

Создаём samba_indexes.ldif следующего содержания:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

Добавляем в базу

ldapmodify -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif

Добавим индексы для gosa

Создаём gosa_indexes.ldif следующего содержания:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: mail eq,sub
olcDbIndex: gosaMailAlternateAddress,gosaMailForwardingAddress eq
olcDbIndex: cn,sn,givenName,ou pres,eq,sub
olcDbIndex: gosaSubtreeACL,gosaObject,gosaUser pres,eq
olcDbIndex: displayName eq
olcDbIndex: ipHostNumber eq
olcDbIndex: postfixMyDestinations eq
olcDbIndex: entryCSN eq
olcDbIndex: displayName eq
olcDbIndex: ipHostNumber eq
olcDbIndex: postfixMyDestinations eq

Добавляем в базу

ldapmodify -Y EXTERNAL -H ldapi:/// -f gosa_indexes.ldif

Редактируем /etc/ldap/ldap.conf

Указываем суффикс базы, в данном случае это dc=example,dc=com

BASE	dc=example,dc=com
URI     ldap://localhost ldaps://«hostname -f вашего сервера»
TLS_CERT        /etc/ssl/certs/ldap02_slapd_cert.pem
TLS_KEY         /etc/ssl/private/ldap02_slapd_key.pem
TLS_CACERT      /etc/ssl/certs/cacert.pem

Перезагружаем LDAP

/etc/init.d/slapd restart

2. Перенос данных с основного LDAP сервера на резервный

Переходим на основной LDAP сервер, останавливаем LDAP, делаем резервную копию данных и запускаем LDAP.

cd /etc/ldap
/etc/init.d/slapd stop
slapcat -v -l backup.ldif
/etc/init.d/slapd start

Переносим файл backup.ldif на backup сервер в папку /etc/ldap.

Переходим на backup сервер.

Останавливаем LDAP

/etc/init.d/slapd stop

Прежде чем восстановить резервную копию данных необходимо очистить всё содержимое папки /var/lib/ldap

rm -f /var/lib/ldap/*

Восстанавливаем резервную копию данных и выполняем переиндексацию

cd /etc/ldap
sudo -u openldap slapadd -v -c -l backup.ldif
sudo -u openldap slapindex -v

Запускаем LDAP

/etc/init.d/slapd start

Для проверки восстановленных данных можно выполнить поиск

ldapsearch -x -b ou=Users,dc=citramon,dc=donetsk,dc=ua "uid=*"

в данном случае должны отобразиться все пользователи, если в ответ получаем всех пользователей из основного LDAP сервера то всё ок, данные перенесены успешно.

3. Настраиваем репликацию LDAP

3.1 Настройка репликаций на основном сервере LDAP

Создать файл provider_sync.ldif следующего содержания

# Добавление индексов в основную БД.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq

#Загрузка syncprov и accesslog модулей.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog

# Создание БД Accesslog
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=example,dc=com
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart

# Добавление syncprov в БД Accesslog.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE

#  Добавление syncprov в основную БД
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE

# Добавление определения accesslog для основной БД
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# Сканировать БД accesslog каждый день, и удалять записи старше 7 дней
olcAccessLogPurge: 07+00:00 01+00:00

Вместо cn=admin,dc=example,dc=com подставьте своё значение.

Отредактируем файл /etc/apparmor.d/usr.sbin.slapd добавив в него:

/var/lib/ldap/accesslog/ r,
  /var/lib/ldap/accesslog/** rwk,

Создаём необходимую директорию, скопировать DB_CONFIG и перезагружаем профиль apparmor

sudo -u openldap mkdir /var/lib/ldap/accesslog
sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog/
sudo /etc/init.d/apparmor reload

Внесём изменения в БД LDAP

ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif

Перезагрузим LDAP

/etc/init.d/slapd restart

Всё основной сервер настроен на проведение репликаций.

3.2 Настройка репликаций на резервном сервере LDAP

Создаём файл consumer_sync.ldif следующего содержания

#Load the syncprov module.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

# syncrepl specific indices
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcSyncRepl
olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on  type=refreshAndPersist retry="60 +" syncdata=accesslog starttls=yes
-
add: olcUpdateRef
olcUpdateRef: ldap://ldap01.example.com

В olcSyncRepl следующие значения поменяйте на свои

provider=ldap://ldap01.example.com — основной LDAP сервер, вместо  ldap01.example.com можно указать IP сервера

binddn="cn=admin,dc=example,dc=com" — админ LDAP основного сервера

credentials=secret — пароль админа LDAP основного сервера (здесь пароль secret)

searchbase="dc=example,dc=com" — база для репликаций

Так же поменяйте на своё значение olcUpdateRef.

Внесём изменения в БД LDAP

ldapadd -c -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif

Перезагружаем LDAP

/etc/init.d/slapd restart

3.3 Проверка работы репликации

Допустим в LDAP присутствует пользователь test, выполним на backup сервере следующий запрос

ldapsearch -x -b ou=Users,dc=citramon,dc=donetsk,dc=ua "uid=test"

Результатом данного запроса будет информация по пользователю test, смотрим значение параметра sn оно равно test, теперь заходим в gosa на основном сервере, открываем пользователя test для редактирования и меняем значение поля Last Name значение этого поля и есть значение параметра sn в LDAP, возвращаемся на backup сервер и снова выполняем запрос указанный выше, теперь значение параметра sn должно быть таким как вы указали его в gosa. Если всё так и есть то репликация работает.

На этом настройка LDAP окончена.

4. Конфигурируем сервер на использование LDAP аутентификации

Устанавливаем необходимые пакеты

apt-get install libnss-ldap

На вопросы отвечаем следующим образом:

Should debconf manage LDAP configuration?: Yes
LDAP server Uniform Resource Identifier: ldaps://«hostname -f вашего сервера»
Distinguished name of the search base: dc=example,dc=com
LDAP version to use: 3
Make local root Database admin: Yes
Does the LDAP database require login? No
LDAP account for root: cn=admin,dc=example,dc=com
LDAP root account password: secret

Если в процессе ответов на вопросы вы ошиблись, исправить можно запустив переконфигурацию пакета ldap-auth-config командой

dpkg-reconfigure ldap-auth-config

Вносим изменения в аутентификацию на сервере

auth-client-config -t nss -p lac_ldap

Настраиваем pam аутентификацию, для этого выполняем

pam-auth-update

и активируем профили аутентификации LDAP и UNIX.

5. Конфигурируем samba

Устанавливаем необходимые пакеты

apt-get install samba samba-doc

Идём в /etc/samba и делаем копию дефолтного конфига

cp smb.conf smb.conf.orig

Ниже приведу конфиг моей самбы:

[global]
        server string =
        workgroup = EXAMPLE
        netbios name = bdc
#=================================================================================
        passdb backend = ldapsam:ldap://localhost
        obey pam restrictions = no
        security = user
        encrypt passwords = true
        unix extensions  = no
#=================================================================================
        local master = yes
        os level = 250
        domain master = no
        preferred master = yes
        time server = yes
        admin users = admins
#=================================================================================
        log level = 1
        log file = /var/log/samba/workstations/%m.log
        max log size = 50
#=================================================================================
        socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
        getwd cache = yes
        read raw = yes
        write raw = yes
        max xmit = 65536
        wins support = yes
        wins proxy = yes
        dns proxy = no
        name resolve order = wins hosts bcast lmhosts
        wide links = yes
        hosts allow = 192.168. 127.0.0.1 127.0.1.1
        hosts deny = 0.0.0.0/0
        idmap uid = 10000-20000
        idmap gid = 10000-20000
#=================================================================================
        logon script = %U.cmd
        logon path =

        ldap suffix = dc=example,dc=com
        ldap user suffix = ou=Users
        ldap group suffix = ou=Groups
        ldap machine suffix = ou=Computers
        ldap idmap suffix = ou=Idmap
        ldap admin dn = cn=admin,dc=example,dc=com
        ldap ssl = start tls
        ldap passwd sync = yes
        ldap delete dn = no
        domain logons = yes
        
        invalid users = root
        load printers = no
        enhanced browsing = Yes
        remote announce = «IP PDC сервера»/EXAMPLE
#=================================================================================
[netlogon]
        comment = Network logon service
        path = /etc/samba/netlogon
        writable = yes
        browseable = no
        guest ok = yes
#=========Шары описываем сами :)====================================================

Создаём необходимые каталоги, в моём случае это

mkdir /var/log/samba/workstations/
mkdir /etc/samba/netlogon/

Перезагружаем smbd

service smbd restart

Перезагружаем nmbd

service nmbd restart

Теперь samba необходимо указать пароль админа LDAP

smbpasswd -w secret

вместо secret поставьте ваш пароль.

Устанавливаем пароль админу samba такой же как на PDC

smbpasswd -a admins

Извлекаем SID домена EXAMPLE из главного контроллера домена

net rpc getsid

Добавляем BDC в домен EXAMPLE

net rpc join -S pdc -U admins%password
(здесь «pdc» это netbios name главного контроллера домена)

Проверяем как работает samba для этого получим список групп в домене

net groupmap list

ответом должно быть

Domain Admins (S-1-5-21-2302747472-2920907650-383109413-512) -> Domain Admins
Domain Users (S-1-5-21-2302747472-2920907650-383109413-513) -> Domain Users
Domain Guests (S-1-5-21-2302747472-2920907650-383109413-514) -> Domain Guests
Domain Computers (S-1-5-21-2302747472-2920907650-383109413-515) -> Domain Computers
Administrators (S-1-5-32-544) -> Administrators
Account Operators (S-1-5-32-548) -> Account Operators
Print Operators (S-1-5-32-550) -> Print Operators
Backup Operators (S-1-5-32-551) -> Backup Operators
Replicators (S-1-5-32-552) -> Replicators
...И все остальные группы из LDAP...

Дадим группе Domain Admins права администратора домена для этого выполним следующее:

net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SeTakeOwnershipPrivilege \
SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege \
SeAddUsersPrivilege SeDiskOperatorPrivilege -Uadmins%password

Ответом должно быть Successfully granted rights.

Всё настройка samba окончена.

6. Настраиваем PhpLdapAdmin.

Для просмотра содержимого резервного LDAP сервера будем использовать phpldapadmin (хочу отметить что именно для просмотра, все изменения необходимо производить на основном LDAP сервере).

В настройке phpldapadmin нет ничего сложного, итак приступим.

Заходим на сайт https://launchpad.net/ubuntu/+source/phpldapadmin/ и скачиваем последнюю версию phpldapadmin

wget https://launchpad.net/ubuntu/+archive/primary/+files/phpldapadmin_1.2.0.5-2ubuntu1_all.deb

Устанавливаем необходимые пакеты

apt-get install php5-ldap

Устанавливаем phpldapadmin

dpkg -i phpldapadmin_1.2.0.5-2ubuntu1_all.deb

Переходим в директорию /etc/phpldapadmin

cd /etc/phpldapadmin

Редактируем файл config.php, находим в нём следующие строки и меняем на свои

$servers->setValue('server','name','My LDAP Server'); # название вашего LDAP сервера
$servers->setValue('server','base',array('dc=example,dc=com')); # база для подключения
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com'); # админ LDAP сервера

Перезагружаем apache

/etc/init.d/apache2 restart

Теперь можно заходить в phpldapadmin по адресу

http://«Ваш сервер»/phpldapadmin

Всё настройка законченна :)

7. Перечень ссылок использованных при написании статьи:

8. Статьи по теме