Главная > Linux > Контроллер домена (PDC) на samba+openLDAP

Контроллер домена (PDC) на samba+openLDAP


18 мая 2009. Разместил: dimon
Черновик! Не все операции завершены и описаны


Задача: Перенастроить контроллер домена (PDC) на sambe на использование openLDAP + samba
Серверная ОС – CentOS 5.2
Рабочие станции комплектуются ОС MS Windows XP.

Сервер имеет два сетевых интерфейса:
внешний: eth0 xxx.xxx.xxx.xxx
внутренний: eth1 192.168.1.1/255.255.255.0

1. Устанавливаем yum install openldap-servers openldap-clients gcc nss_ldap

2. Копируем схемы самбы в openldap:
[root@dsrv]# cp /usr/share/doc/samba-3.0.28/LDAP/samba.schema /etc/openldap/schema/samba.schema


3. Копируем smbldap-tools
[root@dsrv]# cp /usr/share/doc/samba-3.0.28/LDAP/smbldap-tools-0.9.2 /etc/smbldap-tools


Если их там нет, то лезем на сайт https://gna.org/projects/smbldap-tools/ и качаем нужную нам версию:

[root@dsrv install]# wget http://download.gna.org/smbldap-tools/packages/smbldap
-tools-0.9.5.tgz
--15:41:20-- http://download.gna.org/smbldap-tools/packages/smbldap-tools-0.9.5
.tgz
Resolving download.gna.org... 78.40.121.79
Connecting to download.gna.org|78.40.121.79|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 303131 (296K) [application/x-tar]
Saving to: `smbldap-tools-0.9.5.tgz'

100%[=======================================>] 303,131 4.22K/s in 38s

15:41:59 (7.70 KB/s) - `smbldap-tools-0.9.5.tgz' saved [303131/303131]

[root@dsrv install]#
[root@dsrv install]# tar zxvf smbldap-tools-0.9.5.tgz
smbldap-tools-0.9.5/
smbldap-tools-0.9.5/ChangeLog
smbldap-tools-0.9.5/smbldap-passwd
smbldap-tools-0.9.5/TODO
smbldap-tools-0.9.5/smbldap-groupadd
smbldap-tools-0.9.5/smbldap-tools.spec
smbldap-tools-0.9.5/smbldap.conf
smbldap-tools-0.9.5/smbldap-populate
smbldap-tools-0.9.5/INFRA
smbldap-tools-0.9.5/smbldap-userinfo
smbldap-tools-0.9.5/smbldap-usershow
smbldap-tools-0.9.5/README
smbldap-tools-0.9.5/smbldap-useradd
smbldap-tools-0.9.5/FILES
smbldap-tools-0.9.5/doc/
smbldap-tools-0.9.5/doc/smb.conf
smbldap-tools-0.9.5/doc/slapd.conf
smbldap-tools-0.9.5/doc/smbldap-tools.html
smbldap-tools-0.9.5/doc/migration_scripts/
smbldap-tools-0.9.5/doc/migration_scripts/smbldap-migrate-pwdump-accounts
smbldap-tools-0.9.5/doc/migration_scripts/smbldap-migrate-unix-groups
smbldap-tools-0.9.5/doc/migration_scripts/smbldap-migrate-pwdump-groups
smbldap-tools-0.9.5/doc/migration_scripts/smbldap-migrate-unix-accounts
smbldap-tools-0.9.5/doc/smbldap-tools.pdf
smbldap-tools-0.9.5/smbldap-userlist
smbldap-tools-0.9.5/smbldap_bind.conf
smbldap-tools-0.9.5/smbldap_tools.pm
smbldap-tools-0.9.5/COPYING
smbldap-tools-0.9.5/smbldap-groupdel
smbldap-tools-0.9.5/smbldap-groupshow
smbldap-tools-0.9.5/Makefile
smbldap-tools-0.9.5/smbldap-userdel
smbldap-tools-0.9.5/INSTALL
smbldap-tools-0.9.5/smbldap-usermod
smbldap-tools-0.9.5/configure.pl
smbldap-tools-0.9.5/CONTRIBUTORS
smbldap-tools-0.9.5/smbldap-groupmod
[root@dsrv install]#


Даем права на исполнение скриптам (если их нету):

[root@dsrv smbldap-tools]# ll
total 224
-rw-r--r-- 1 root root 428 Jan 3 2006 smbldap_bind.conf
-rw-r--r-- 1 root root 7785 Jan 3 2006 smbldap.conf
-rw-r--r-- 1 root root 5987 Jan 3 2006 smbldap-groupadd
-rw-r--r-- 1 root root 2473 Jan 3 2006 smbldap-groupdel
-rw-r--r-- 1 root root 8881 Jan 3 2006 smbldap-groupmod
-rw-r--r-- 1 root root 2005 Jan 3 2006 smbldap-groupshow
-rw-r--r-- 1 root root 10294 Jan 3 2006 smbldap-passwd
-rw-r--r-- 1 root root 14995 Jan 3 2006 smbldap-populate
-rw-r--r-- 1 root root 28729 Jan 3 2006 smbldap_tools.pm
-rw-r--r-- 1 root root 3988 Jan 3 2006 smbldap-tools.spec
-rw-r--r-- 1 root root 20969 Jan 3 2006 smbldap-useradd
-rw-r--r-- 1 root root 3244 Jan 3 2006 smbldap-userdel
-rw-r--r-- 1 root root 7633 Jan 3 2006 smbldap-userinfo
-rw-r--r-- 1 root root 18968 Jan 3 2006 smbldap-usermod
-rw-r--r-- 1 root root 1958 Jan 3 2006 smbldap-usershow
[root@dsrv smbldap-tools]# chmod u+x smbldap-*
[root@dsrv smbldap-tools]# ll
total 224
-rw-r--r-- 1 root root 428 Jan 3 2006 smbldap_bind.conf
-rw-r--r-- 1 root root 7785 Jan 3 2006 smbldap.conf
-rwxr--r-- 1 root root 5987 Jan 3 2006 smbldap-groupadd
-rwxr--r-- 1 root root 2473 Jan 3 2006 smbldap-groupdel
-rwxr--r-- 1 root root 8881 Jan 3 2006 smbldap-groupmod
-rwxr--r-- 1 root root 2005 Jan 3 2006 smbldap-groupshow
-rwxr--r-- 1 root root 10294 Jan 3 2006 smbldap-passwd
-rwxr--r-- 1 root root 14995 Jan 3 2006 smbldap-populate
-rw-r--r-- 1 root root 28729 Jan 3 2006 smbldap_tools.pm
-rwxr--r-- 1 root root 3988 Jan 3 2006 smbldap-tools.spec
-rwxr--r-- 1 root root 20969 Jan 3 2006 smbldap-useradd
-rwxr--r-- 1 root root 3244 Jan 3 2006 smbldap-userdel
-rwxr--r-- 1 root root 7633 Jan 3 2006 smbldap-userinfo
-rwxr--r-- 1 root root 18968 Jan 3 2006 smbldap-usermod
-rwxr--r-- 1 root root 1958 Jan 3 2006 smbldap-usershow


4. Правим /etc/openldap/slapd.conf
Добавляем строки (подключаем файлы схем):

include /etc/openldap/schema/samba.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/openldap.schema


ищем строку access to attrs и приводим блок к виду (при необходимости добавляем):
access to attrs=userPassword
by self write
by dn = "uid=root,dc=sclad,dc=lan" write
by anonymous auth
by * none

таким образом, определим доступ к атрибуту пароль пользователя. Сам пользователь имеет право записи, анонимному пользователю предоставляется возможность пройти аутентификацию (после этого он представляет уже другой объект и доступа к паролям анонимного пользователя не происходит, как можно было бы подумать) а пользователь с контекстом "uid=root,dc=sclad,dc=lan" имеет право на запись. Другие же пользователи доступа к паролю не имеют никакого. Т.е. другими словами никто, кроме администратора и самого пользователя не имеют доступа к паролю.

добавляем блок:
access to *
by self write
by dn="uid=root,dc=spec,dc=lan" write
by anonymous auth
by * none

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

с помощью проги slappasswd генерим пароль root
и исправляем строки:

database bdb
suffix "dc=sclad,dc=lan"
rootdn "cn=root,dc=sclad,dc=lan"
rootpw {SSHA}Sm…MSm

здесь
database - тип базы данных
suffix - основной суффикс БД (к этому я вернусь немного ниже)
rootdn – описание объекта root
rootpw - это поле содержит пароль администратора объекта root (то есть всей БД LDAP), используем в зашифрованном виде – сгенерированный slappasswd

добавляем строки:
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq

Таким образом, мы определяем первичные и вторичные индексы БД, что может ускорить поиск по БД

loglevel 256

Этот ключ устанавливает slapd уровень отладки.

Текущие уровни отладки:
-1 включает всю отладочную информацию
0 без отладки
1 трассировать вызовы функций
2 отладка обработки пакетов
4 тщательная отладочная трассировка
8 управление соединением
16 печать принятых и отправленных пакетов
32 обработка фильтров поиска
64 обработка конфигурационного файла
128 обработка списка контроля доступа
256 регистрировать статистику соединения/обработки/результатов
512 регистрировать статистику отправленных элементов
1024 печать коммуникаций с shell механизмом базы данных
2048 печать отладки анализа элемента

Для того чтобы увидеть логи ЛДАП-а мы так же должны добавить в файл /etc/syslog.conf следующее:

# логи LDAP-сервера:
local4.* /var/log/ldap.log


5. Копируем параметры базы LDAP
сp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


Назначаем права на папку
chown -R ldap:ldap /var/lib/ldap


После того как вы настроили OpenLDAP, запустите его командой и посмотрим, слушает ли он порты:

[root@dsrv openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]
[root@dsrv openldap]# netstat -nap | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 9985/slapd
tcp 0 0 :::389 :::* LISTEN 9985/slapd
unix 2 [ ] DGRAM 27715 9985/slapd


6. Правим /etc/ldap.conf, исправляя строки:
# Сервер LDAP - ip адрес сервера или его
# имя, находящееся в /etc/hosts, или в DNS на удалённом узле
host 127.0.0.1

# Основной суфикс, должен совпадать с суфиксом в slapd.conf
base dc=sclad,dc=lan

# Версия протокола
ldap_version 3

# Это root и его пароль
rootbinddn cn=root,dc=sclad,dc=lan
rootpw {SSHA}Sm…MSm

# Порт, на котором работает LDAP
port 389

# Область поиска
scope one

# Время ожидпния при поиске
timelimit 30

# Timeout подключения к LDAP серверу
bind_timelimit 10

# Если не удалось подключиться к LDAP,
# То не пытаться переподключиться
bind_policy soft

# nss_ldap закроет подключение, если сервер
# не ответит в указонное в idle_timelimit время
idle_timelimit 3600

nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman

# Базовые dn для поиска различных объектов, one - это область поиска.
# Данные параметры используются nss.
nss_base_passwd ou=Users,dc=sclad,dc=lan?one
nss_base_passwd ou=Computers,dc=sclad,dc=lan?one
nss_base_shadow ou=Users,dc=sclad,dc=lan?one
nss_base_group ou=Group,dc=sclad,dc=lan?one

# persist -- не отключаться от LDAP сервера
# oneshot -- отключаться после каждого запроса
#nss_connect_policy persist


7. Копируем ldap.conf или делаем ссылку
[root@dsrv]# cp /etc/ldap.conf /etc/openldap/ldap.conf


8. Создаем файл /etc/ldap.secret и в него пишем пароль в открытом виде, задаем права на файл:

[root@dsrv etc]# touch ldap.secret
[root@dsrv etc]# chmod 600 ldap.secret
[root@dsrv etc]# echo "very_secret_passwort" >> ldap.secret
[root@dsrv etc]# ll | grep ldap.secret
-rw------- 1 root root 9 Mar 20 17:21 ldap.secret


Причем very_secret_passwort – это тот же пароль, который генерили в 6 пункте (в конце пароля должен стоять символ возврата каретки). Права на файл все же лучше выставить такие - root:root 400.

9. Заполняем базу:

Теперь нужно создать корневой объект нашего дерева. Создадим файл base.ldif с таким содержанием:
dn: dc=sclad,dc=ru
objectClass: dcObject
objectClass: organization
objectClass: top
dc:sclad
o:sclad


Теперь добавим эту запись в ldap:
[root@dsrv openldap]# ldapadd -x -D "cn=root,dc=sclad,dc=lan" -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=sclad,dc=lan"

[root@dsrv openldap]#


Параметры запуска:
-x : не использовать sasl
-D "dn" : под каким пользователем подключаться
-W : запросить ввод пароля
-w : указать пароль в командной строке
-f file : имя файла из которого брать информацию о добавляемом объекте.

Далее для работы с samba требуется поместить в ldap следующую древовидную схему:

dn: dc=sclad,dc=lan
|
+-dn: ou=Users,dc= sclad,dc=lan
|
+-dn: ou=Groups,dc= sclad,dc=lan
|
+-dn: ou=Computers,dc= sclad,dc=lan

Т.е. внутри главного контейнера dc=sclad,dc=lan создаются ещё три: Users - для хранения пользовательских аккаунтов, Group - группы, Computers - аккаунты компьютеров в домене.

Получаем следующий ldif-файл newentry.ldif:

dn: ou=Users,dc=sclad,dc=lan
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=sclad,dc=lan
objectClass: organizationalUnit
ou: Groups

dn: ou=Computers,dc=sclad,dc=lan
objectClass: organizationalUnit
ou: Computers

dn: ou=Idmap,dc=sclad,dc=lan
objectClass: organizationalUnit
ou: Idmap


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

Добавим записи в ldap:
[root@dsrv openldap]# ldapadd -x -D "cn=root,dc=sclad,dc=lan" -W -f newentry.ldif
Enter LDAP Password:
adding new entry "ou=Users,dc=sclad,dc=lan"

adding new entry "ou=Groups,dc=sclad,dc=lan"

adding new entry "ou=Computers,dc=sclad,dc=lan"

adding new entry "ou=Idmap,dc=sclad,dc=lan"

[root@dsrv openldap]#


На этом этапе уже можно подключиться к лдап-серверу и посмотреть, что же мы имеем.
Я использовал утилиту LDAP Admin:
Контроллер домена (PDC) на samba+openLDAP


Описание настройки LDAP Admin:

10. Включаем авторизацию по лдап authconfig --enableldap --update
Проверяем в /etc/nsswitch.conf:

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


11. После того как мы настроим samba на работу с лдап-ом нам нужно будет изменить SID root-a в ldap-е на такой же какой у нас был в sambe. Поэтому посмотрим и запишем SID root-a в samba в файл sid_root_smb:

[root@dsrv samba]# pdbedit -Lw root -v
Unix username: root
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2564309360-712306396-2862245629-1000
Primary Group SID: S-1-5-21-2564309360-712306396-2862245629-513
Full Name: root
Home Directory: scladroot
HomeDir Drive:
Logon Script: logon.bat
Profile Path:
Domain: SCLAD
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Tue, 14 Apr 2009 12:22:58 MSD
Password can change: Tue, 14 Apr 2009 12:22:58 MSD
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@dsrv samba]# pdbedit -Lw root -v > sid_root_smb


12. Правим /etc/samba/smb.conf
конфиг исходный – см в статье в него добавляем строки:

# Поддержка wins
wins support = Yes
# Используем dns proxy
dns proxy = Yes

# Сетевые параметры
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=4096 SO_RCVBUF=4096
# Синхронизировать время с доменом
# time server = Yes

####### Параметры LDAP #######

# Пароли храним в LDAP
passdb backend = ldapsam:ldap://127.0.0.1/
# Определяем админовский dn. Пароль к нему должен добавляться
# непосредственно smbpasswd -w. После смены dn админа пароль тоже надо
# сменить
ldap admin dn = cn=root,dc=sclad,dc=lan
# Определяем суффикс базы данных ldap
ldap suffix = dc=sclad,dc=lan
# Группы в контейнере ou=groups
ldap group suffix = ou=Groups
# Пользователи храняться в контейнере ou=users
ldap user suffix = ou=Users
# Контейнер для машин пользователей
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
# Запрещаем удалять объекты
ldap delete dn = No
# Отключаем поддержку SSL
#ldap ssl = off

# скрипты для добавления юзеров и групп (юзается в usermgr от nt4)
add user script = /etc/smbldap-tools/smbldap-useradd -m "%u"
add machine script = /etc/smbldap-tools/smbldap-useradd -t 0 -w "%u"
add group script = /etc/smbldap-tools/smbldap-groupadd -p "%g"
add user to group script = /etc/smbldap-tools/smbldap-groupmod -m "%u" "%g"
delete user script = /etc/smbldap-tools/smbldap-userdel "%u"
delete user from group script = /etc/smbldap-tools/smbldap-groupmod -x "%u" "%g"
delete group script = /etc/smbldap-tools/smbldap-groupdel "%g"
set primary group script = /etc/smbldap-tools/smbldap-usermod -g '%g' '%u'


ldap suffix - это основной суффикс БД. В определении системы директорий существует так называемый корневой объект root. Суффикс определяет этот объект. Вообще существует 2 стандарта LDAP имен для скелета дерева:
- метод для глобальных сетей - имеет подобный вид и описывает URL адрес: person.domain.com (cn=person,dc=domain,dc=com)
- метод для глобальных сетей - описывает организацию (вообще-то этот вид является стандартным) и имеет следующий вид: person.organization_unit.organization.country (cn=person,ou=otd1,o=lab,c=RU)
Выбор метода зависит от конкретного назначения LDAP и особого значения не имеет. Обычно в компаниях применяется второй способ построения скелета дерева. Я же использую интернет наименование для краткости.

13. Перезагружаем службы (чтобы применить новые конфиги):
[root@dsrv openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]
[root@dsrv openldap]# service winbind restart

Shutting down Winbind services: [ OK ]
Starting Winbind services: [ OK ]
[root@dsrv openldap]# service smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]


14. Устанавливаем ldap admin password (даем самбе права на чтение ldap базы):
[root@dsrv /]# smbpasswd -w very_secret_passwort


15. Устанавливаем перловые модули нужные для smbldap-tools
[root@dsrv ~]# perl -MCPAN -e shell

/usr/lib/perl5/5.8.8/CPAN/Config.pm initialized.



Are you ready for manual configuration? [yes] n



cpan> install Net::LDAP



/usr/bin/make install -- OK

cpan> install Crypt::SmbHash



/usr/bin/make install -- OK

cpan> install Unicode::MapUTF8



/usr/bin/make install -- OK



16. Конфигурируем smbldap-tools:

16.1. Смотрим SID домена - его нужно будет указать при конфигурировании /etc/smbldap-tools/configure.pl
[root@dsrv samba]# net getlocalsid DSRV
SID for domain DSRV is: S-1-5-21-93199991-951995455-3406427012
[root@dsrv /]# net rpc getsid
Password:
Could not connect to server DSRV
The username or password was not correct.
Storing SID S-1-5-21-93199991-951995455-3406427012 for Domain SCLAD.LAN in secrets.tdb
[root@dsrv /]#


16.2. Запускаем скрипт и отвечаем на вопросы:
[root@dsrv samba]# /etc/smbldap-tools/configure.pl
Use of $# is deprecated at /etc/smbldap-tools/configure.pl line 314.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
smbldap-tools script configuration
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
. if your samba controller is up and running.
. if the domain SID is defined (you can get it with the 'net getlocalsid')

. you can leave the configuration using the Crtl-c key combination
. empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Looking for configuration files...

Samba Configuration File Path [/etc/samba/smb.conf] >

The default directory in which the smbldap configuration files are stored is shown.
If you need to change this, enter the full directory path, then press enter to continue.
Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] >



-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Use of uninitialized value in concatenation (.) or string at /etc/smbldap-tools/configure.pl line 314, line 34.
backup old configuration files:
/etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old
/etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old
writing new configuration file:
/etc/smbldap-tools/smbldap.conf done.
/etc/smbldap-tools/smbldap_bind.conf done.


За “…” скрывается куча вопросов. Скрипт генерит файлы конфигурации /etc/smbldap-tools/smbldap.conf и /etc/smbldap-tools/smbldap_bind.conf, которые используются следующим скриптом.

16.3. Запускаем скрипт и задаем новый пароль (я использовал тот же самый):
[root@dsrv samba]# /etc/smbldap-tools/smbldap-populate
Populating LDAP directory for domain SCLAD.LAN (S-1-5-21-93199991-951995455-3406427012)
(using builtin directory structure)

entry dc=sclad,dc=lan already exist.
entry ou=Users,dc=sclad,dc=lan already exist.
entry ou=Groups,dc=sclad,dc=lan already exist.
entry ou=Computers,dc=sclad,dc=lan already exist.
entry ou=Idmap,dc=sclad,dc=lan already exist.
adding new entry: uid=root,ou=Users,dc=sclad,dc=lan
adding new entry: uid=nobody,ou=Users,dc=sclad,dc=lan
adding new entry: cn=Domain Admins,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Domain Users,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Domain Guests,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Domain Computers,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Administrators,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Account Operators,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Print Operators,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Backup Operators,ou=Groups,dc=sclad,dc=lan
adding new entry: cn=Replicators,ou=Groups,dc=sclad,dc=lan
entry sambaDomainName=SCLAD.LAN,dc=sclad,dc=lan already exist. Updating it...

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:
[root@dsrv samba]#


Можно заметить, что скрипт ругнулся на уже существующие записи, которые мы создали вручную выше.

17. Введем наш сервер в наш же домен:
[root@dsrv samba]# net rpc join -S DSRV
Password:
Joined domain SCLAD.LAN.
You have new mail in /var/spool/mail/root
[root@dsrv samba]#


18. Теперь необходимо изменить SID root-a в LDAP-e на такой же какой используется в sambe.
Выше мы смотрели и даже записали SID root-a в sambe.
При использовании схемы с LDAP нам потребуется поместить в LDAP учётную запись пользователя root и задать для неё nt-пароль. Важно, что у пользователя root аттрибуты sambaSID, sambaPrimaryGroupSID должны иметь вид:

sambaSID: DOMAINSID-1000
sambaPrimaryGroupSID: DOMAINSID-1001

Связано это с тем, что ldapsam использует специальный алгоритм для связи uid с sid:

rid='2*uidNumber+1000'
primaryGroup='2*uidNumber+1001'

Посмотрим SID root-a в LDAP-e:
[root@dsrv ~]# ldapsearch -x -D "cn=root,dc=sclad,dc=lan" -W -b 'dc=sclad,dc=lan' 'cn=root'
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: cn=root
# requesting: ALL
#

# root, Users, sclad.lan
dn: uid=root,ou=Users,dc=sclad,dc=lan
cn: root
sn: root
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 0
uid: root
uidNumber: 0
homeDirectory: /home/root
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomePath: DSRVroot
sambaHomeDrive: Z:
sambaProfilePath: DSRVprofilesroot
sambaPrimaryGroupSID: S-1-5-21-93199991-951995455-3406427012-512
sambaSID: S-1-5-21-93199991-951995455-3406427012-500
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: A800BDD34ABDA30D944E2DF489A880E4
sambaAcctFlags: [U]
sambaNTPassword: 1D374EB0B2FEB239A7643E37950D2C15
sambaPwdLastSet: 1239956579
sambaPwdMustChange: 1243844579
userPassword:: e1NTSEF9Z0RteU1JZHpoSzF3WXUzdXhkYWFPK2JUV1ZSd01tMUs=
shadowLastChange: 14351
shadowMax: 45

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@dsrv log]# net getlocalsid DSRV
SID for domain DSRV is: S-1-5-21-93199991-951995455-3406427012



Т.е. SID root-a в samba:

User SID: S-1-5-21-2564309360-712306396-2862245629-1000
Primary Group SID: S-1-5-21-2564309360-712306396-2862245629-513
ldap
sambaPrimaryGroupSID: S-1-5-21-93199991-951995455-3406427012-512
sambaSID: S-1-5-21-93199991-951995455-3406427012-500


Странно – здесь мы наблюдаем не только rid не правильные, но и даже отличающиеся DOMAINSID. Видимо на одной из стадий установки была допущена ошибка. Нужно будет проверить при аналогичной установке!

В общем, нам нужно установить для root-a:
sambaPrimaryGroupSID: S-1-5-21-93199991-951995455-3406427012-512
sambaSID: S-1-5-21-93199991-951995455-3406427012-1000


т.е. подменить только sambaSID. Для этого создадим следующий ldif-файл rootedit.ldif:
dn: uid=root,ou=Users,dc=sclad,dc=lan
changetype: modify
replace: sambaSID
sambaSID: S-1-5-21-93199991-951995455-3406427012-1000


Для добавления информации в базу воспользуйтесь командой:
[root@dsrv openldap]# ldapmodify -x -D "cn=root,dc=sclad,dc=lan" -W -f rootedit.ldif
Enter LDAP Password:
modifying entry "uid=root,ou=Users,dc=sclad,dc=lan"

[root@dsrv openldap]#


И посмотрим, что же у нас получилось:
[root@dsrv openldap]# ldapsearch -x -D "cn=root,dc=sclad,dc=lan" -W -b 'dc=sclad,dc=lan' 'cn=root'
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: cn=root
# requesting: ALL
#

# root, Users, sclad.lan
dn: uid=root,ou=Users,dc=sclad,dc=lan
cn: root
sn: root
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 0
uid: root
uidNumber: 0
homeDirectory: /home/root
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomePath: DSRVroot
sambaHomeDrive: Z:
sambaProfilePath: DSRVprofilesroot
sambaPrimaryGroupSID: S-1-5-21-93199991-951995455-3406427012-512
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: A800BDD34ABDA30D944E2DF489A880E4
sambaAcctFlags: [U]
sambaNTPassword: 1D374EB0B2FEB239A7643E37950D2C15
sambaPwdLastSet: 1239956579
sambaPwdMustChange: 1243844579
userPassword:: e1NTSEF9Z0RteU1JZHpoSzF3WXUzdXhkYWFPK2JUV1ZSd01tMUs=
shadowLastChange: 14351
shadowMax: 45
sambaSID: S-1-5-21-93199991-951995455-3406427012-1000

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@dsrv openldap]#


Мы видим, что sambaSID изменился на нужный.

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


18. Необходимо перенести всё из самбы

Вернуться назад