Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> Samba (PDC+BDC)

Samba (PDC+BDC)+ LDAP (Master+Slave replica)

Автор: aleksey.kravchenko.


    Прочитав статью "samba_pdc + ddns + dhcp - с хранением всех данных в LDAP", решил избавиться от виндового контроллера домена навсегда и перевести домен на FreeBSD. И, как оказалось, сделал правильный выбор. Сейчас у меня на LDAP-е завязано практически все:
1. домен (Samba);
2. прокси (Squid);
3. почта (Postfix);
4. ftp (ProFTPd);
5. http (Apache);
6. vpn (OpenVPN).
Не получилось только с DNS и DHCP, но это, я думаю, скоро тоже решу.


Задача: Поднять главный (офис) и резервный (филиал) контроллер домена на базе Samba и OpenLDAP, организовать синхронизацию и репликацию между ними. Запись в LDAP должена выполняться только на PDC.

Условия: В организации есть офис и филиал. Уже настроены оба шлюза на FreeBSD и между ними настроен туннель на базе IPSec. Таким образом, репликация будет выполняться по шифрованному туннелю.

Офис


1. Маршрутизатор
ОС: FreeBSD 6.2
реальный IP: 11.11.11.11
серый IP:    192.168.1.1

2. Главный контроллер домена
ОС: FreeBSD 6.2
серый IP: 192.168.1.2

Филиал


1. Маршрутизатор
ОС: FreeBSD 6.2
реальный IP: 22.22.22.22
серый IP:    192.168.2.1

2. Резервный контроллер домена
ОС: FreeBSD 6.2
серый IP: 192.168.2.2
                     

Настройка Главного Контроллера Домена


1. Установка программ



Шаг 1
Установите OpenLDAP сервер из портов:
# cd /usr/ports/net/openldap23-server/
# make config

Выберите: TCP_WRAPPERS, BDB, DYNAMIC_BACKENDS, SLURPD.
# make install clean
# rehash

Шаг 2
Установите nss_ldap из портов:
# cd /usr/ports/net/nss_ldap/
# make install clean
# rehash

Шаг 3
Установите из портов набор скриптов для работы с LDAP:
# cd /usr/ports/net/ldapscripts/
# make install clean
# rehash

Шаг 4
Установите Samba из портов:
# cd /usr/ports/net/samba3/
# make config

Выберите: LDAP, CUPS, WINBIND, QUOTAS, UTMP, POPT
# make install clean
# rehash

                              2. Настройка программ
http://www.lissyara.su/?id=1487
Шаг 1
Отредактируйте конфигурационный файл OpenLDAP сервера
/usr/local/etc/openldap/slapd.conf:
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/samba.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

modulepath      /usr/local/libexec/openldap
moduleload      back_ldbm

#######################################################################
# BDB database definitions
#######################################################################

database        ldbm
suffix          "dc=mycompany,dc=local"
rootdn          "cn=root,dc=mycompany,dc=local"
rootpw          
loglevel        256
directory       /var/db/openldap-data
index   objectClass,uid,uidNumber,gidNumber     eq
index   cn,mail,surname,givenname               eq,subinitial

index   sambaSID                                eq
index   sambaPrimaryGroupSID                    eq
index   sambaDomainName                         eq

access to attrs=userPassword
    by self write
    by anonymous auth
    by * none

access to attrs=sambaLMPassword,sambaNTPassword
    by dn="cn=root,dc=mycompany,dc=local" write
    by * none

access to *
    by self write
    by anonymous read
    by * none

Шаг 2
Создайте хеш пароля:
# slappasswd
New password:
Re-enter new password:
{SSHA}3jMclJIUbFWn2WnkUpSlgInvoGBmlx2D

Шаг 3
Вставьте созданный хеш пароля в файл /usr/local/etc/openldap/slapd.conf:
rootpw          {SSHA}3jMclJIUbFWn2WnkUpSlgInvoGBmlx2D

Шаг 4
Установите права на директорию с данными LDAP:
# chmod 0700 /var/db/openldap-data
# chmod 0700 /var/db/openldap-slurp

Шаг 5
Отредактируйте конфигурационный файл nss_ldap - /usr/local/etc/nss_ldap.conf:
host 127.0.0.1
base dc=mycompany,dc=local
ldap_version 3
port 389
scope one
timelimit 30
bind_timelimit 10
bind_policy soft
nss_connect_policy persist
idle_timelimit 3600
nss_paged_results yes
pagesize 1000
nss_base_passwd         ou=users,dc=mycompany,dc=local?one
nss_base_group          ou=groups,dc=mycompany,dc=local?one
nss_base_passwd         ou=computers,dc=mycompany,dc=local?one
nss_base_shadow         ou=users,dc=mycompany,dc=local?one

Шаг 6
Отредактируйте файл /etc/nsswitch.conf:
group: files ldap
group_compat: nis
hosts: files dns
networks: files
passwd: files ldap
passwd_compat: nis
shells: files

Шаг 7
Отредактируйте конфигурационный фал ldapscripts -
/usr/local/etc/ldapscripts/ldapscripts.conf
SERVER="localhost"
BINDDN="cn=root,dc=mycompany,dc=local"
BINDPWD="password"

SUFFIX="dc=mycompany,dc=local"
GSUFFIX="ou=groups"
USUFFIX="ou=users"
MSUFFIX="ou=computers"

GIDSTART="10000"
UIDSTART="10000"
MIDSTART="20000"

USHELL="/bin/sbin/nologin"
UHOMES="/home/samba/homes/%u"
ASKGECOS="no"
CREATEHOMES="yes"
HOMESKEL="/etc/skel"
HOMEPERMS="700"

# Одна строка
PASSWORDGEN="head -c8 /dev/random | uuencode -m - | sed 
-n -e '2s|=*$||;2p' | sed -e 's|+||g' -e 's|/||g'"

RECORDPASSWORDS="yes"
PASSWORDFILE="/var/log/ldapscripts_passwd.log"
LOGFILE="/var/log/ldapscripts.log"
LDAPSEARCHBIN="/usr/local/bin/ldapsearch"
LDAPADDBIN="/usr/local/bin/ldapadd"
LDAPDELETEBIN="/usr/local/bin/ldapdelete"
LDAPMODIFYBIN="/usr/local/bin/ldapmodify"
LDAPMODRDNBIN="/usr/local/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/local/bin/ldappasswd"

GETENTPWCMD=""
GETENTGRCMD=""

Шаг 8
Установите права на конфигурационный файл ldapscripts:
# cd /usr/local/etc/ldapscripts
# chmod 0640 ldapscripts.conf
# chown root:wheel ldapscripts.conf

Шаг 9
Скопируйте схему samba.schema в /usr/local/etc/openldap/schema/
# cp /usr/local/share/examples/samba/LDAP/samba.schema \
? /usr/local/etc/openldap/schema/samba.schema

Шаг 10
Отредактируйте главный конфигурационный файл Samba -  /usr/local/etc/smb.conf:
#======================= Global Settings =====================================
[global]
    workgroup = mycompany
    netbios name = pdc
    server string =
    security = user
    encrypt passwords = yes
    load printers = no
    admin users = kravchenko
    hosts allow = 192.168.1. 192.168.2. 127.
    log file = /var/log/samba/samba.log
    max log size = 50000
    passdb backend = ldapsam:ldap://127.0.0.1
    ldap suffix = dc=mycompany,dc=local
    ldap user suffix = ou=users
    ldap group suffix = ou=groups
    ldap machine suffix = ou=computers
    ldap admin dn = "cn=root,dc=mycompany,dc=local"
    ldap delete dn = no
    ldap ssl = off
    winbind uid = 10000-20000
    winbind gid = 10000-20000
    winbind separator = @
    winbind use default domain = yes
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    local master = yes
    os level = 255
    domain master = yes
    preferred master = yes
    domain logons = yes

# Пустое значение - неперемещаемые профили.
    logon path =

    logon home = \\%L\homes
    logon drive = H:
    add machine script = /usr/local/bin/ldapaddmachine '%u' computers
    add user script = /usr/local/bin/ldapadduser '%u' users
    add group script = /usr/local/bin/ldapaddgroup '%g'
    add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
    delete user script = /usr/local/bin/ldapdeleteuser '%u'
    delete group script = /usr/local/bin/ldapdeletegroup '%g'
    delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
    set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
    rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew
    wins support = yes
    wins proxy = yes
    dns proxy = no
    display charset = koi8-r
    unix charset = koi8-r
    dos charset = cp866
    time server = yes

#============================ Share Definitions ==============================
[homes]
 comment = Home Directories
 path = /home/samba/homes/%U
 browseable = no
 writable = yes
 public = no
 read only = no
 create mask = 0600
 directory mask = 0700
 valid users = %S

[netlogon]
 comment = Network Logon Service
 path = /usr/local/etc/samba/netlogon
 browseable = no
 guest ok = yes
 writable = no
 share modes = no
 volume = NETLOGON

[profiles]
 create mode = 0600
 directory mode = 700
 path = /home/samba/profiles/%u
 browseable = no
 guest ok = yes
 writeable = yes

[pub]
 comment = Папка общего пользования
 path = /home/samba/pub
 valid users = @users
 create mode = 666
 directory mode = 777
 public = yes
 writable = yes
 printable = no
 browseable = yes

[IPC$]
 path = /tmp
 hosts allow = 192.168.1.0/24 192.168.2.0/24 127.0.0.1
 hosts deny = 0.0.0.0/0

Шаг 11
Создайте директории, указанные в конфигурационном файле samba.
# mkdir /usr/local/etc/samba/netlogon
# chmod 777 /usr/local/etc/samba/netlogon
# cd /home/samba/
# mkdir homes profiles
# chown root:users *
# ll
drwxr-xr-x  32  root  wheel  512 12 фев 10:28 homes 
drwxr-xr-x   2  root  wheel  512 12 фев 10:28 profiles

Шаг 12
Добавьте в /etc/rc.conf такие строки:
slapd_enable="YES" 
# Одна строка
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ 
ldap://192.168.1.2/ ldap://127.0.0.1/"' 

slapd_sockets="/var/run/openldap/ldapi" 
samba_enable="YES" 
winbindd_enable="YES" 

                                     3. Тестирование и отладка

Шаг 1
Запустите OpenLDAP сервер:
# usr/local/etc/rc.d/slapd start
Starting slapd.

Шаг 2
Проверьте наличие процесса slapd:
# ps ax | grep slap 

Шаг 3
Запустите Samba сервер:
# usr/local/etc/rc.d/samba start

Шаг 4
Проверьте процесс smb:
# ps ax | grep smb

Шаг 5
Установите Samba пароль от пользователя, которго мы указали в конфигурационном файле Samba как "ldap admin dn":
# smbpasswd -w password
Setting stored password for "cn=root,dc=mycompany,dc=local" in secrets.tdb

Шаг 6
Создайте администратора Samba (
admin users - kravchenko):
# smbpasswd -a kravchenko
New SMB password:
Retype new SMB password:
Added user kravchenko.

Шаг 7
Создайте файл /usr/local/etc/openldap/base.ldif. Внесите в него ваши начальные данные:
dn: dc=mycompany,dc=local 
objectClass: dcObject 
objectClass: organization 
objectClass: top 
dc:mycompany 
o:mycompany 

dn: ou=users,dc=mycompany,dc=local 
objectClass: top 
objectClass: organizationalUnit 
ou: users 

dn: ou=groups,dc=mycompany,dc=local 
objectClass: top 
objectClass: organizationalUnit 
ou: groups 

dn: ou=computers,dc=mycompany,dc=local 
objectClass: top 
objectClass: organizationalUnit 
ou: computers 

Шаг 9
Внесите содержимое созданного файла в базу OpenLDAP:
# ldapadd -W -x -D "cn=root,dc=mycompany,dc=local" -f \
? /usr/local/etc/openldap/base.ldif
adding new entry "dc=mycompany,dc=local"
adding new entry "ou=users,dc=mycompany,dc=local"
adding new entry "ou=groups,dc=mycompany,dc=local"
adding new entry "ou=computers,dc=mycompany,dc=local"

Шаг 8
Добавьте группы в OpenLDAP:
# ldapaddgroup admins
Successfully added group admins to LDAP
# ldapaddgroup users
Successfully added group people to LDAP
# ldapaddgroup computers
Successfully added group computers to LDAP
# ldapadduser kravchenko admins
Successfully added user kravchenko to LDAP
Successfully set password for user kravchenko
Successfully created home directory for user kravchenko

Шаг 9
Сделайте сопоставление групп группам NT
# net groupmap add ntgroup="Domain Admins" \
? unixgroup=admins rid=512 type=domain
Successfully added group admins to the mapping db as a domain group
# net groupmap add ntgroup="Domain Users" \
? unixgroup=users rid=513 type=domain
Successfully added group users to the mapping db as a domain group
# net groupmap add ntgroup="Domain Computers" \
? unixgroup=computers rid=515 type=domain
Successfully added group computers to the mapping db as a domain group

Шаг 10
Добавьте Samba в свой домен:
# net rpc join -S pdc -U kravchenko%password

Шаг 11
Для администрирования скачайте программу LdapAdmin с http://ldapadmin.sourceforge.net/
Добавьте пользователей.

Шаг 12
Создайте домашние папки для пользователей. Они должны быть с правами 0700, группа - users.
# cd /home/samba/homes/
# mkdir user1
# chown user1:users user1/
# mkdir user2
# chown user2:users user2/
. . . . . . 
# mkdir user32
# chown user32:users user32/ 
# ll 
total 46 
drwxr-xr-x  2 user1     users   512 12 фев 09:25 user1 
drwxr-xr-x  2 user2     users   512 12 фев 08:58 user2
drwxr-xr-x  2 user3     users   512 12 фев 08:48 user3
.......................................................
drwxr-xr-x  2 user32    users   512 12 фев 09:21 user32

Шаг 13
Введите компьютеры в домен. В Windows XP: правый клик на Мой компьютер -> Свойства -> Имя компьютера ->,  
является членом домена mycompany, вводим имя и пароль администратора (kravchenko).



                            Настройка Резервного Контроллера Домена

                                 1. Установка программ
Шаг 1
Установите все программы как и для Главного Контроллера Домена

                                  2. Настройка программ

Шаг 1
Выполните настроку программ как и для PDC, кроме:
1. Конфигурационный файл Samba для BDC - /usr/local/etc/smb.conf:
#======================= Global Settings =====================================
[global]
    workgroup = mycompany
    netbios name = bdc
    server string =
    security = user
    encrypt passwords = yes
    load printers = no
    admin users = kravchenko
    hosts allow = 192.168.1. 192.168.2. 127.
    log file = /var/log/samba/samba.log
    max log size = 50000
    passdb backend = ldapsam:ldap://127.0.0.1
    ldap suffix = dc=mycompany,dc=local
    ldap user suffix = ou=users
    ldap group suffix = ou=groups
    ldap machine suffix = ou=computers
    ldap admin dn = "cn=root,dc=mycompany,dc=local"
    ldap delete dn = no
    ldap ssl = off
    ldap replication sleep = 5000
    winbind uid = 10000-20000
    winbind gid = 10000-20000
    winbind separator = @
    winbind use default domain = yes
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    local master = yes
    os level = 65
    domain master = no
    preferred master = yes
    domain logons = yes
    logon path =
    logon home = \\%L\homes
    logon drive = H:
    add machine script = /usr/local/bin/ldapaddmachine '%u' computers
    add user script = /usr/local/bin/ldapadduser '%u' users
    add group script = /usr/local/bin/ldapaddgroup '%g'
    add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
    delete user script = /usr/local/bin/ldapdeleteuser '%u'
    delete group script = /usr/local/bin/ldapdeletegroup '%g'
    delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
    set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
    rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew
    wins support = no
    wins server = 192.168.1.2
    wins proxy = yes
    dns proxy = no
    display charset = koi8-r
    unix charset = koi8-r
    dos charset = cp866
    time server = yes

    load printers = no
    enhanced browsing = Yes
    remote announce = 192.168.1.2/mycompany

#============================ Share Definitions ==============================
[homes]
 comment = Home Directories
 path = /home/samba/homes/%U
 browseable = no
 writable = yes
 public = no
 read only = no
 create mask = 0600
 directory mask = 0700
 valid users = %S

[netlogon]
 comment = Network Logon Service
 path = /usr/local/etc/samba/netlogon
 browseable = no
 guest ok = yes
 writable = no
 share modes = no
 volume = NETLOGON

[profiles]
 create mode = 0600
 directory mode = 700
 path = /home/samba/profiles/%u
 browseable = no
 guest ok = yes
 writeable = yes

[pub]
 comment = Папка общего пользования
 path = /home/samba/pub
 valid users = @users
 create mode = 666
 directory mode = 777
 public = yes
 writable = yes
 printable = no
 browseable = yes

[IPC$]
 path = /tmp
 hosts allow = 192.168.1.0/24 192.168.2.0/24 127.0.0.1
 hosts deny = 0.0.0.0/0

2. /etc/rc.conf для BDC:
slapd_enable="YES" 
# Одна строка
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ 
ldap://192.168.2.2/ ldap://127.0.0.1/"' 
slapd_sockets="/var/run/openldap/ldapi" 
samba_enable="YES" 
winbindd_enable="YES"

                             
                               3. Тестирование и отладка

Шаг 1
Запустите Slave OpenLDAP сервер:
# usr/local/etc/rc.d/slapd start
Starting slapd.

Шаг 2
Проверьте наличие процесса slapd:
# ps ax | grep slap 

Шаг 3
Запустите BDC Samba сервер:
# usr/local/etc/rc.d/samba start

Шаг 4
Проверьте процесс smb:
# ps ax | grep smb

Шаг 5
Установите Samba пароль от пользователя, которго мы указали в конфигурационном файле Samba как "ldap admin dn":
# smbpasswd -w password
Setting stored password for "cn=root,dc=mycompany,dc=local" in secrets.tdb

Шаг 6
Создайте администратора Samba (
admin users - kravchenko):
# smbpasswd -a kravchenko
New SMB password:
Retype new SMB password:
Added user kravchenko.

Шаг 7
Извлеките SID домена mycompany из главного контроллера домена:
# net rpc getsid

Шаг 8
Добавьте BDC в домен mycompany:
# net rpc join -S pdc -U kravchenko%password

                                Настройка Репликации
Руководствовался статьей http://www.luxter.ru/content/view/116/26/
Шаг 1
Отредактируйте конфигурационный файл OpenLDAP на Master - /usr/local/etc/openldap/slapd.conf:
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/samba.schema
include         /usr/local/etc/openldap/schema/mail.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

allow bind_v2

modulepath      /usr/local/libexec/openldap
moduleload      back_ldbm

#######################################################################
# BDB database definitions
#######################################################################

database        ldbm
suffix          "dc=mycompany,dc=local"
rootdn          "cn=root,dc=mycompany,dc=local"
rootpw          {SSHA}mu1MPXqqGNqPp9SV9DY4jSFbfxNqhoWt
loglevel        5
directory       /var/db/openldap-data
index   objectClass,uid,uidNumber,gidNumber     eq
index   cn,mail,surname,givenname               eq,subinitial

index   sambaSID                                eq
index   sambaPrimaryGroupSID                    eq
index   sambaDomainName                         eq

replogfile /var/log/ldap/replica.log
	
replica uri=ldap://192.168.2.2:389
  binddn="uid=replicator,ou=users,dc=mycompany,dc=local"
  bindmethod=simple 
  credentials=password


access to attrs=userPassword
    by self write
    by anonymous auth
    by * none

access to attrs=sambaLMPassword,sambaNTPassword
    by dn="cn=root,dc=mycompany,dc=local" write
    by * none

access to *
    by self write
    by anonymous read
    by * none

Шаг 2
Создайте каталог и файл для логов репликации на Master сервере:
# mkdir /var/log/ldap
# touch /var/log/ldap/replica.log
# chown –R ldap:ldap /var/log/ldap/

Шаг 3
Создайте файл пользователя replicator на Master сервере:
# vi /usr/local/etc/openldap/replicator.ldif
dn: uid=replicator,ou=users,dc=mycompany,dc=local
objectClass: inetOrgPerson
sn: REPLICATOR SN
cn: replicator
userPassword: {SSHA}uTr0blaJnJxJ5jk84WwMVPJes8pLge2m

Хеш пароля создаем так:
# /usr/local/sbin/slappasswd
New password:
Re-enter new password:
{SSHA}uTr0blaJnJxJ5jk84WwMVPJes8pLge2m

Шаг 4
Добавьте пользователя replicator в БД LDAP Master сервера:
# ldapadd -W -x -D "cn=root,dc=mycompany,dc=local" -f \ 
? /usr/local/etc/openldap/replicator.ldif

Шаг 5
Отредактируйте конфигурационный файл OpenLDAP на Slave - /usr/local/etc/openldap/slapd.conf:
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/samba.schema
include         /usr/local/etc/openldap/schema/dnszone.schema
include         /usr/local/etc/openldap/schema/dhcp.schema
include         /usr/local/etc/openldap/schema/mail.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

allow bind_v2

modulepath      /usr/local/libexec/openldap
moduleload      back_ldbm

#######################################################################
# BDB database definitions
#######################################################################

database        ldbm
suffix          "dc=mycomapny,dc=local"
rootdn          "cn=root,dc=mycompany,dc=local"
rootpw          {SSHA}jVIuaP7Xpz+cpdFwH+dgLNzctfGngHx0
loglevel        5
directory       /var/db/openldap-data
index   objectClass,uid,uidNumber,gidNumber     eq
index   cn,mail,surname,givenname               eq,subinitial

index   sambaSID                                eq
index   sambaPrimaryGroupSID                    eq
index   sambaDomainName                         eq

updatedn "uid=replicator,ou=users,dc=mycompany,dc=local"
updateref ldap://192.168.1.2:389

access to attrs=userPassword
    by self write
    by dn="uid=replicator,ou=users,dc=mycompany,dc=local" write
    by anonymous auth
    by * none

access to attrs=sambaLMPassword,sambaNTPassword
    by dn="cn=root,dc=mycompany,dc=local" write
    by dn="uid=replicator,ou=users,dc=mycompany,dc=local" write
    by * none

access to *
    by dn="uid=replicator,ou=users,dc=mycompany,dc=local" write
    by self write
    by anonymous read
    by * none

Шаг 6
Перезапустите slapd на Slave сервере:
# /usr/local/etc/rc.d/slapd restart

Шаг 7
Добавьте на Master сервере в /etc/rc.conf строку:
slurpd_enable="YES"

Шаг 8
Запускаем slurpd на Master сервере, заодно перезагрузим slapd:
# /usr/local/etc/rc.d/slapd restart
# /usr/local/etc/rc.d/slurpd start

Шаг 9
Теперь экспортируем БД Master сервера в файл ldif:
# ldapsearch -W -x -D "cn=root,dc=mycompany,dc=local" \
? -b "dc=mycompany,dc=local" > /home/krav/backup/my-LDAP/mycompany.ldif
# chown krav:wheel /home/krav/backup/my-LDAP/mycompany.ldif

Цитата: "Теперь этот файл является резервной копией, его можно положить в надежное место и ограничить к нему доступ. Так же важно понимать, что теперь нельзя вносить изменения в основную базу до того, как мы не настроим репликацию."

Шаг 10
Скопируйте файл mycompany.ldif на Slave сервер:
# scp /home/krav/backup/ldap/mycompany.ldif \ 
? krav@192.168.2.2:/home/krav/
Password:
mycompany.ldif                               100% 24678     4.6KB/s   00:00

Шаг 11
Восстановите БД LDAP на Slave из скопированного файла:
# mv /home/krav/mycompany.ldif /usr/local/etc/openldap/
# chown root:wheel /usr/local/etc/openldap/mycompany.ldif
# chmod 400 /usr/local/etc/openldap/mycompany.ldif
# ldapadd -W -x -D "cn=root,dc=mycompany,dc=local" -f \ 
? /usr/local/etc/openldap/mycompany.ldif

Примечание! В случае обрыва связи между PDC и BDC, изменения, которые должны быть внесены в БД Slave, сохранятся в каталоге /var/db/openldap-slurp. И после восстановления связи изменения немедленно будут внесены в БД на Slave сервер.



размещено: 2008-07-16,
последнее обновление: 2009-02-03,
автор: aleksey.kravchenko


OLD, 2008-07-16 в 11:26:31

Дальнейшее управление доменом производить с помощью LDAP Account Manager (lam)
/usr/ports/sysutils/ldap-account-manager

IMHO

corky, 2008-07-18 в 16:16:28

Задача виндового контроллера домена не только в хранении информации об объектах сети, будь то хосты или юзеры... В первую очередь это гибкое управление GPO. Притом не в разрезе, с какого хоста куда ходить можно, какой у тебя префикс в названии почтового ящика и т.п., а функционал на самом виндовом хосте, интегрированном в ОС. Таким образом, с виндового DC можно управлять поведением клиентской ОС, назначать запреты. Кроме того, авторизация между виндовыми сервером и клиентом происходит посредством хешей, которые при перехвате надо ещё расшифровать… Посему не вижу подтверждения слов в начале статьи: «И, как оказалось, сделал правильный выбор». Есть постановка задачи и её решение. Тема выигрыша от данной схемы не раскрыта…:-)

Linxpro, 2008-07-21 в 20:10:07

Согласен с corky! Конечно винда
дороговата,но для DC луче использовать её, если есть необходимость держать юзеров на цепи!!!

-----------------------------------------------------------
А в остальном статья актуальна!!!

f0s, 2008-08-06 в 17:24:45

отличная статья. надо будет попробовать замутится с BDC

KaMa-CyTpA, 2008-08-06 в 18:05:49

Практически все запреты - это изменения в реестре.
Уже писал что имею файл EXCEL в котором приведены все соответствия групповой политики записям в реестре.
Делаем start.vbs заставляем выполнять при входе в сеть - и все.
Это все ерунда - главное в нашем деле не это.
Главное быстро поднять упавший сервер, а падения бывают разные.
Я пока только ACRONIS-ом спасался......

lissyara, 2008-08-06 в 19:26:49

Писал, писал.
А я тебе писал с просьбой поделиться.
Ни ответа ни привета...

KaMa-CyTpA, 2008-08-06 в 19:41:02

Тутже отправил по запросу.
Кидаю повторно.

opt1k, 2008-08-06 в 23:07:15

2corky выигрыш в том что если у вас почта, прокси,... на фряхе, то используя фряху как DC вы получаете единую точку отсчёта.
А вот на счёт хэшей это интерестно. Я сам мало чего понимаю в архитектуре DC как М$ так и LDAP+samba, но тем не менее хотелось бы реализовать шифрование, даже с тем учётом что в моей сетке даже не шифрованное никто читать не собирается.

Leo, 2008-08-11 в 6:05:46

Опять start.vbs ...
Что, все пользователи у себя админы?
А вот перевести иксельную простыню в хтмл и зарядить статьёй?..

константин, 2008-08-15 в 22:36:35

спасибо за статью

BliZZ, 2008-10-03 в 12:49:02

2 Leo
-=> Опять start.vbs ... <=-
причем тут пользователи ? админ пишет логон скрипты и они выполняються при входе юзера.

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

princeps, 2008-10-05 в 21:24:03

2 Opt1k: в AD для обеспечения безопасности аутентификации используется керберос. Вообще ничего не мешает использовать его с OpenLDAP'ом.
Статья рульная. Как видим, Samba+OpenLDAP+Kerberos+стартовые скрипты ничем не уступают AD по функционалу и масштабируемости, а по управляемости - превосходят.

adre, 2008-10-06 в 6:39:20

так че это работает или нет? =) просто по тестить не успею ....

Vjacheslav, 2008-10-18 в 11:39:00

круто блин.

WS, 2008-10-24 в 15:52:23

slapd при старте выдаёт ошибку
eval: 1: Syntax error: Unterminated quoted string

конфиги переписывал руками, потом скопипастил...
не вышло

подскажите куда смотреть дабы отследить в каком моменте ошибка

Oloremo, 2008-10-24 в 15:58:45

Ну кинь хоть конфиг ЛДАПа для сообщества телепатов.

Вот таким образом:
grep -v # /usr/local/etc/openldap/slapd.conf | egrep -v '^$'

WS, 2008-10-24 в 16:24:25

include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/samba.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

modulepath      /usr/local/libexec/openldap
moduleload      back_ldbm

#######################################################################
# BDB database definitions
#######################################################################

database        ldbm
suffix          "dc=cifropark,dc=ru"
rootdn          "cn=root,dc=cifropark,dc=ru"
rootpw          {SSHA}Ss8PgKryTW3xxxxx
loglevel        256
directory       /var/db/openldap-data
index   objectClass,uid,uidNumber,gidNumber     eq
index   cn,mail,surname,givenname               eq,subinitial

index   sambaSID                                eq
index   sambaPrimaryGroupSID                    eq
index   sambaDomainName                         eq

access to attrs=userPassword
   by self write
   by anonymous auth
   by * none

access to attrs=sambaLMPassword,sambaNTPassword
   by dn="cn=root,dc=cifropark,dc=ru" write
   by * none

access to *
   by self write
   by anonymous read
   by * none

Проверка дала
# slaptest -u
config file testing succeeded
#slaptest
WARNING: No dynamic config support for database ldbm

/var/log/debug.log
NSSWITCH(nss_method_lookup): ldap, passwd, endpwent, not found

заранее наверное прошу прощения за тупость, первый раз собираю...

Oloremo, 2008-10-24 в 16:30:20

Ох ну просил же прислать без коментов и пустых строчек. ;-)
Ошибка очень чётко говорит вам - нету у вас поддержки динамических бэкэндов. А вы хотите ldbm(кста- выкиньте это и поставте bdb, из 2.4 этот бэкенд уже выкинули).

Вывод:
Либо пересоберите с поддержкой динамических бекэндов, либо юзайте другой бэкенд.

HINT:
[X] BDB               With BerkeleyDB support
[X] DYNAMIC_BACKENDS  Build dynamic backends

Oloremo, 2008-10-24 в 16:31:28

О, а вторая ошибка говорит вам на проблему в NSSWITCH.
Дайте вывод cat /etc/nssswitch.conf

Dog, 2008-10-24 в 16:35:30

Ребята, ну вы запарили! Есть же форум!

Spreegun, 2008-10-27 в 19:31:11

Для работы c GP используется Poledit. Посмотрите в другой статье по настройке OpenLDAP+SambaPDS+DNS есть ссылка на него. Там есть шаблоны для Win2k и Win2k3. Это файлы с расширением .adm Их подгружаете в Poledit настраиваете там все как вам нравится с учетом политик на группы или пользователей и все чего душе угодно(рабочий стол, запреты на пользование и т.д.) Сохраняем этот файл в виде NTconfig и ложем папку Netlogon на нашем домен контроллере на Фре. После перезагрузки у пользователей применяется групповая политика. На счет adm шаблонов - можно самим писать политики я так самописный скринсейвер сделал.(ради интереса - он в общем шаблоне есть). Там кстати в политиках и можно запускать скрипты при логоне. Имхо это более правильно чем .vbs. Дальше рулить всем этим через тулсы или ручками менять файл. На счет того что Лучше ставить винду на продакшен  - За только одно за если вы не собираетесь сваливать с работы через пол года так как кроме вас поддерживать данную систему не сможет. И всем совет если соберетесь это все эксплуатировать ставьте на дорогой и надежный сервак с аппаратным рейд контролером не за 200 баксов а нормальный типа Адаптека.Бекапте базу ldap-а. При данной настройке и нормальном железе будет работать пожизненно. И еще не поленитесь настроить NUT для работы с UPS(И еще не берите Powerman, а лучше APC по дороже. У меня на глазах 1 сдох, а второй загорелся. Слава богу я решил их протестить...)

Сергей Орлов, 2008-11-17 в 15:31:22

На мой взгляд, немножко нарушена технология установки, я бы сначалор настроил LDAP+PDC, затем Master Ldap + Slave Ldap, т.е. в базу ldap добвил бы репликатора, после чего, все базы ldapa скопировал бы на Slave, после чего запустил бы сервис реполикатора и лишь затем поднял бы BDC, а так писать второй раз кравченко на BDC и лишь затем поднимать репликацию, кстати а на шаге 7 зачем узнаем sid домена ...

SaveMeGood, 2009-01-15 в 19:16:10

очепятка
bindmetod --> bindmethod

aleksey.kravchenko, 2009-01-15 в 23:00:22

Спасибо большое за внимательность, уже исправил

opt1k, 2009-01-29 в 15:42:31

т.е. для полноценного АД не хватает только
1)полноценных ГП(под неполноценностью понимаю не возможность установки софта)
2)инструмента управления типа MMC, но оно и нах не надо, ручками всё приятнее и быстрее.
3)кербероса

Правильно ли я понял, керберос нужен для того что бы клиентские тачки безопасно авторизовывались в АД?
И можно ли этот самый керберос прикрутить к самбе PDC?

SaveMeGood, 2009-02-03 в 10:37:16

Как я понял, kerberos используется по умолчанию и там и там.
Автору, в replicator.ldif:
----------------------------------
dn: cn=replicator,dc=mycompany,dc=local
----------------------------------
а в slapd.conf:
----------------------------------
uid=replicator,ou=users,dc=mycompany,dc=local
----------------------------------

aleksey.kravchenko, 2009-02-03 в 21:39:15

2 SaveMeGood да, грубая ошибка была, спасибо

SaveMeGood, 2009-02-09 в 12:38:07

Я был не прав на счет кербероса. Для реализации аутентификации с использованием кербероса, нужно, чтобы самба работала в режиме безопастности ADS и сервер KDC, коем может быть вендовый сервер или Heimdal.
Ps
Кербеберос нужен не только, для безопасной аутентификации. Неплохо описан здесь http://www.oszone.net/4188/Kerberos

SaveMeGood, 2009-03-10 в 19:27:29

Алексей, простите что до%:?лся до Вашей статьи, просто погрузился в изучение samba+ldap и частенько заглядываю сюда (:

-----------------------------
# ldapaddgroup users
Successfully added group people to LDAP
-----------------------------

SaveMeGood, 2009-04-07 в 23:12:25

Опять таки, может я чего не понимаю, но зачем мы в base.ldif добовляем объект computers(ou=computers,dc=mycompany,dc=local) и ссылаемся на него в smb.conf, как "ldap machine suffix", но при этом с помощью ldapscripts мы создаем группу computers(cn=computers,ou=groups,dc=mycompany,dc=local) и ее сопоставляем с группами NT?

ISG, 2009-05-15 в 18:46:20

Не знаю как автору удалось при помощи команды smbpasswd -a добавлять пользователей, если эти пользователи до этого отсутствовали в системе, но и кроме этого по-моему здесь туча ошибок. Например: как можно выполнять команду smbpasswd -a прежде чем заносить начальные данные в базу LDAP? Ведь этот пользователь "kravchenko" должен же попасть в базу, а её еще нет :-(

opt1k, 2009-05-18 в 16:15:56

SaveMeGood:
несколько месяцев назад я пытался прикрутить kerberos аутентификацию к фряхе и самбе для выполнения роли виндового домена. Ничего не получилось, в инете я так же не нашёл упоминания о том что у кого то это получалось, все ссылаются на то что это в 3ей самбе не возможно и нужно ждать 4ую.

kron, 2009-07-20 в 15:36:42

После аналогичной настройки машины по локали не ходят, пишет что сеть не включена или не доступна, а вообще за статью респект, все запустилось и настройки гораздо приятнее чем в АД мелкомягком, но вот по поводу доступа в сеть если не сложно допишите

kron, 2009-07-20 в 20:46:45

Ыыыыы не ходит только под админской учеткой самбы, под остальными учетками ходит, вообщем респект товарищи

Patrick, 2009-07-20 в 23:31:59

Согласен, статья хорошая для мелкого офиса, где не надо заморациватся с ГП и правами юзверей, - стартап скпипты при нехватке прав с такой схемой не отработают (ну если не править права на правку веток реестра), если разглядывать маштаб организации Центр оффис + 30 отделений и под ними еще несколько филиалов, и разворачивать скрипты порядка на 40 контролеров леса - наверняка накладненько получитсо ( разве, чо только этьм и заниматся), - добавляем задачи развертывания софта, удаленное управление клиентскими машинами, ипсек, керберос, ответы только на ntlm v2 - такая схема получится неуправляемой.
Резервирование АД в мелкомягких предусмотрено встроеными средствами, днс можно держать локальный с пересылкой на внешний мир, - товарищи идея хорошая, - но каждая ось и разработка хороша там где она должна быть. А если экономим средства на ПО, - тогда.... вопрос подхода к безопасности комфорту работы,  и увеличения работы и самого админа - где ж тогда экономия ????

evil, 2009-07-29 в 18:12:54

надо еще и днсом мутить несколько фич. иначе все это толком и не работает :-)

http://debian.telenet.ru/adjustmentsoft/samba_pdc
вот то что я когда то разработал.

opt1k, 2009-08-04 в 0:35:29

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

evil, 2009-08-04 в 11:40:35

про керберос не знаю. делал давно. еще работает. у меня без настройки днса вообще не хотел контроллер домена распозновать не одна рабочая станция. буду рад любым замечаниям. и еще больше рад, правкам и новым статьям на моей вики

opt1k, 2009-08-05 в 19:05:26

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



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0686 секунд
Из них PHP: 62%; SQL: 38%; Число SQL-запросов: 77 шт.
Исходный размер: 106035; Сжатая: 19382