Жил-был в сети файловый сервер на Samba, с авторизацией через локальную базу пользователей (passdb backend = tdbsam
) и кучей шар, доступ к которым давался через членство пользователя в unix-группе. Решили админы развернуть в той сети домен Active Directory, и сделать авторизацию через него, и перенести всех пользователей Samba в домен вместе с паролями, чтобы не создавать их всех заново ручками. Но цельного руководства, как это сделать, на просторах интернета не нашлось, поэтому эта статья и появилась.
Есть на Samba-wiki руководство Migrating a Samba NT4 domain to a Samba AD domain (classic upgrade), которое описывает похожую задачу, но для уже существующего домена на базе Samba 3. А у нас server role = standalone server
, все пользователи продублированы в /etc/passwd, /etc/shadow и базе данных Samba, а группы хранятся в /etc/group. Чтобы прошел classic_upgrade, нужно подсунуть самбе что-то похожее на Samba NT4 PDC, что мы в результате и сделаем.
Итак, для начала возьмем новый сервер и сделаем из него будущий контроллер домена Samba 4 Active Directory путем установки дистрибутива Linux, в котором есть умеющая быть контроллером домена Samba. На момент написания статьи таким дистрибутивом оказался Ubuntu 15.10, его и используем в качестве примера. После установки и предварительной настройки останавливаем сервисы samba, если они запущены, и приступаем к переносу пользователей:
На старом сервере:
1) получим список пользователей Samba в формате username:uid
pdbedit -L | cut -d: -f1,2 > user_rid.txt
2) извлечем unix-пользователей из /etc/passwd и /etc/shadow:
sed s/:/:x:/ user_rid.txt | grep -f - /etc/passwd > passwd_delta.txt
sed 's/:.*/:/' user_rid.txt | grep -f - /etc/shadow > shadow_delta.txt
На будущем контроллере домена добавляем содержимое файлов passwd_delta.txt и shadow_delta.txt соответственно в /etc/passwd и /etc/shadow. Таким образом мы перенесли unix-пользователей со старого сервера на новый, теперь займемся группами:
1) сохраняем строки с нужными нам группами из /etc/group на старом сервере в текстовый файл group_delta.txt, и аналогично предыдущему шагу добавляем содержимое этого файла в /etc/group на новом;
2) чтобы classic_upgrade увидел группы и членство пользователей в них, Samba должна знать о соответствии unix-групп группам пользователей в своей базе. Если у нас standalone server, то скорее всего в базе Samba групп нет, так как используются только локальные unix-группы. Проверить это можно командой
net groupmap list
Если список групп пуст, то нужно его создать, запуская для каждой строки файла group_delta.txt команду net groupmap add:
for g in `cat group_delta.txt`; do name=`echo $g | cut -d: -f1`; id=`echo $g | cut -d: -f3`; net groupmap add rid=$id unixgroup=$name ntgroup=_$name; done
Команда выше создает для каждой группы из файла group_delta.txt NT-группу с таким же именем и unix-GID, но с подчеркиванием в начале. Подчеркивание нужно для того, чтобы избежать возможного совпадения имени группы с именем пользователя (это недопустимо в Windows), ну и потом легче будет выделить импортированные группы в Active Directory.
Следующим шагом копируем на новый сервер бинарные базы данных Samba с нашего старого сервера. Для этого создадим на новом сервере папку dbdir и скопируем в нее со старого сервера файлы:
secrets.tdb
schannel_store.tdb
passdb.tdb
gencache_notrans.tdb
group_mapping.tdb
account_policy.tdb
Расположение файлов может быть разным в зависимости от инсталляции, но обычно их можно найти в папках /var/lib/samba и /var/lib/samba/private. Список файлов взят из вышеупомянутого HowTo, но к примеру в нашем случае нашлось только 5 файлов из 6 перечисленных, и на конечный результат это не повлияло.
Чтобы убедить самбу, что мы обновляемся с PDC, создадим файл smb.conf.PDC следующего вида:
[global]
workgroup = <короткое имя вашего домена, например CONTOSO>
netbios name = <NetBIOS-имя вашего контроллера домена, например DC1>
security = user
domain master = yes
domain logons = yes
server role = classic primary domain controller
passdb backend = tdbsam
[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = yes
read only = yes
[profiles]
comment = Users profiles
path = /home/samba/profiles
guest ok = no
browseable = no
create mask = 0600
directory mask = 0700
Наконец можно приступать к процедуре апгрейда:
samba-tool domain classicupgrade --dbdir=dbdir/ --use-xattrs=yes --realm=<полное имя вашего домена, например contoso.com> --dns-backend=SAMBA_INTERNAL smb.conf.PDC
Если все было сделано правильно, samba-tool должна отработать без ошибок и сформировать пригодный к употреблению /etc/samba/smb.conf. После запуска сервиса контроллера домена:
systemctl start samba-ad-dc
можно проверить миграцию пользователей и групп командами
samba-tool user list
samba-tool group list
Если все хорошо, можно удалить содержимое файлов passwd_delta.txt, shadow_delta.txt и group_delta.txt из соответствующих системных файлов и перейти к дальнейшей настройке контроллера домена: Samba AD DC HowTo after the provisioning step