Предыстория


Существует небольшая локальная сеть предприятия, в которой лет 10 назад на Debian 5 был поднят домен на 3-й «Самбе» + LDAP + BIND(на шлюзе). По сути от нее нужна была только аутентификация пользователей, да файловые шары. Все эти годы сервер без проблем апгрейдился до новых версий Debian. На данный момент на нем Debian 8 и Samba 4.2 из пакетов.

Со времен Windows 7 введение компьютеров в домен, без всем известного костыля с правкой реестра, не получалось. Тот же костыль работал в Win 8 и Win 10 до версии 1803. Помимо невозможности ввода компьютеров в домен, накопились и другие проблемы и в итоге было решено провести classicupgrade. Ввиду простоты структуры ЛВС было принято решение использовать внутренний DNS «Самбы».

Сразу хочу сказать, что статья не является точным руководством, а скорее опытом проведения данной операции. Стадия предварительного тестирования крайне рекомендуется. В моем случае для тестирования были сняты образы серверов и развернуты на виртуальных машинах VirtualBox.Также, для тестирования поведения существующих клиентов домена, были созданы клиентские машины Win XP SP3 и Win 10 1709 и 1803.

Также хочу заметить, что неоднократно ошибки были вызваны банальными опечатками. Будьте внимательны.

Описание среды


ОС: Debian 8
Домен: samdom.local
Имя сервера: pdc
ip сервера: 10.10.1.220

Процесс перехода


Обновление пакетов до последних версий + установка недостающих.


В моем случае после обновления нужно было доставить только krb5-user.

apt-get update
apt-get upgrade
apt-get install samba smbclient krb5-user winbind

При установке krb5-user система задаст несколько вопросов о имени сервера и названии домена. Заполняем данными нашего сервера.

Остановка «Самбы»


service samba-ad-dc stop
service smbd stop
service nmbd  stop
service winbind  stop

Перенос старых баз и конфига самбы


mv /var/lib/samba /var/lib/samba.NT
mv /etc/samba/smb.conf /etc/samba/smb.conf.NT

Я перенес старые базы в /var/lib/samba.NT поэтому необходимо заново создать каталог /var/lib/samba

mkdir /var/lib/samba

В документации рекомендуют переносить все базы в отдельную папку. В моем случае отдельно лежала только gencache_notrans.tdb поэтому переносить пришлось только ее.

cp -p /run/samba/gencache_notrans.tdb /var/lib/samba.NT

Также в документации говорится о необходимости только шести баз:

secrets.tdb
schannel_store.tdb
passdb.tdb
gencache_notrans.tdb
group_mapping.tdb
account_policy.tdb

Однако наличие в папке других файлов процессу перехода не помешало.

Запуск процесса classicupgrade


samba-tool domain classicupgrade —dbdir=/var/lib/samba.NT --realm=samdom.local --dns-backend=SAMBA_INTERNAL /etc/samba/smb.conf.NT

Отмечу, что в документации не рекомендуется использовать домен верхнего уровня local., но в моем случае так сложилось исторически.

В простыне, которая появится на экране промелькнет пароль администратора, который при желании можно записать).

Если возникли проблемы, перед новыми попытками classicupgrade, нужно не забыть удалить созданные в процессе файлы баз и smb.conf.

rm -f /etc/samba/smb.conf
rm -rf /var/lib/samba/*

Если все прошло успешно — можно перейти к следующему шагу.

Проверка и правка конфигов сервера


В /etc/resolv.conf должно быть(если он у вас не создается автоматически)

domain samdom.local
nameserver 10.10.1.220

В /etc/hosts

127.0.0.1     localhost localhost.localdomain
10.10.1.220    pdc.samdom.local    pdc

В файле /etc/hostname должно быть сокращенное имя хоста

pdc

В /etc/network/interfases

dns-nameservers 10.10.1.220
dns-search samdom.local

Перенаправление dns запросов


В случае, если ваш сервер будет перенаправлять DNS запросы в интернет(и используется INTERNAL_DNS Самбы) нужно в smb.conf в раздел [global] добавить строку с ip вашего провайдера:

dns forwarder = ip 

В «Самбе» 4.2 можно указать только один ip. В последующих — несколько, через пробел.
Если на вашем шлюзе контролируется исходящий трафик, то не забудьте открыть прохождениие udp пакетов от сервера по 53 порту.

Настройка Kerberos


Приводим /etc/krb5.conf к похожему виду:

[libdefaults]
default_realm = SAMDOM.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true

[realms]
SAMDOM.LOCAL = {
kdc = pdc
admin_server = pdc
default_domain = SAMDOM.LOCAL
}
[domain_realm]
.samdom.local = SAMDOM.LOCAL
samdom.local = SAMDOM.LOCAL

Настройка синхронизации времени


Если пакет ntp не стоит — то ставим:

apt-get install ntp

В моем случае не было каталога /var/lib/samba/ntp_signd/. Создал вручную.

Далее нужно дать на него права:

chown root:ntp /var/lib/samba/ntp_signd/
chmod 750 /var/lib/samba/ntp_signd/

Далее нужно привести файл /etc/ntp.conf к подобному виду:

# Local clock (Note: This is not the localhost address!)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# The source, where we are receiving the time from
server 0.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /var/lib/samba/ntp_signd/
# Access control
# Default restriction: Only allow querying time (incl. ms-sntp) from this machine
restrict default kod nomodify notrap nopeer mssntp
# Allow everything from localhost
restrict 127.0.0.1
# Allow that our time source can only provide time and do nothing else
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

Удаление slapd и перезагрузка


apt-get remove slapd
reboot

Тестирование


В документации тестирование производится от учетной записи Administrator. У нас исторически сложилось, что административные действия проходят от domain_admin. Далее будут показаны команды и их правильный вывод.

Тестируем samba:

root@debian:/root# smbclient -L localhost -U%
Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.1.17-Debian]
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.17-Debian)
Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.1.17-Debian]
Server Comment
--------- -------
Workgroup Master
--------- -------

Если у вас здесь полезет ошибка:
Connection to loclhost failed (Error NT_STATUS_UNSUCCESSFUL)

проверяйте запускается ли самба. В одном тестировании я забыл удалить(выключить) slapd и также лицезрел эту ошибку.

Еще одна проверка:

$ smbclient //localhost/netlogon -Udomain_admin -c 'ls'
Enter Administrator's password: 
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]
 .                                   D        0  Tue Nov  1 08:40:00 2016
 ..                                  D        0  Tue Nov  1 08:40:00 2016

               49386 blocks of size 524288. 42093 blocks available

Тестируем DNS

root@debian:/root# nslookup samdom.local
Server: 10.10.1.220
Address: 10.10.1.220#53
Name: samdom.local
Address: 10.10.1.220

$ host -t SRV _ldap._tcp.samdom.local.
_ldap._tcp.samdom.example.com has SRV record 0 100 389 pdc.samdom.example.com.

$ host -t SRV _kerberos._udp.samdom.local.
_kerberos._udp.samdom.example.com has SRV record 0 100 88 pdc.samdom.example.com.

$ host -t A pdc.samdom.local.
dc1.samdom.example.com has address 10.10.1.220

Тестируем Kerberos

root@debian:/root# kinit domain_admin@SAMDOM.LOCAL
Password for domain_admin@SAMDOM.LOCAL:
Warning: Your password will expire in 41 days on Пт 27 ноя 2015 14:34:46

root@debian:/root# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: domain_admin@SAMDOM.LOCAL
Valid starting Expires Service principal
16.10.2015 15:07:12 17.10.2015 01:07:12 krbtgt/SAMDOM.LOCAL@SAMDOM.LOCAL
renew until 17.10.2015 15:07:07

Дополнительная настройка


Для появления в linux доменных имен и групп вместо цифр нужно подправить /etc/nsswitch.conf

Строки нужно привести к следующему виду:
passwd: files winbind
group: files winbind

Обращаю внимание, что winbind добавляется только к этим строкам. За подробностями — в документацию.
В моем случае я также убрал их этого файла упоминание о ldap.

reboot

Если у вас, как и у меня, до classicupgrade dns сервер располагался на другой машине и вы используете DHCP сервер, не забудьте изменить настройки DHCP сервера указывающие на DNS сервер

Настройка сетевых папок


Разработчиками не рекомендуется использовать контроллер домена AD как файловый сервер. Однако в моем случае других серверов не было.

Настройка очень хорошо описана в документации к «Самбе» и туда нужно обязательно заглянуть. Если вкратце то:

Нужно проверить поддержку ACL самбой.

smbd -b | grep HAVE_LIBACL
   HAVE_LIBACL

Не забыть, что раздел должен быть смонтирован с опциями user_xattr и acl.

Только юзеры и группы имеющие SeDiskOperatorPrivilege могут конфигурировать права на шары:

Например для предоставления таких прав группе «Domain Admins» нужно выполнить команду:
net rpc rights grant "Samdom\Domain Admins" SeDiskOperatorPrivilege -U "Samdom\domain_admin"

Непосредственно для добавления шары нужно:

Создать каталог и назначить нужные права:

# mkdir -p /srv/samba/Demo/
# chown root:"Domain Admins" /srv/samba/Demo/
# chmod 0770 /srv/samba/Demo/

добавить в smb.conf

[Demo]
       path = /srv/samba/Demo/
       read only = no

После этого перегрузить конфиги «самбы» командой:

smbcontrol all reload-config

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

browseable = no

Далее права раздаются с windows машины, из под учетной записи имеющей SeDiskOperatorPrivilege. Для этого нужно зайти в «управление компьютером».
Поlцепиться к удаленному компьютеру (Контроллеру домена pdc в нашем случае). Раздать права через: «Общие папки» -> «Общие ресурсы».

Вполне вероятно, что при переходе к пункту «Общие папки» у вас будет вылетать ошибка «Номер процедуры выходит за допустимые границы(1745)». Я ее игнорирую, так как ничего внятного в интернете я про это не нашел и в процессе тестирования и эксплуатации проблем она не доставляет.

Проблемы возможно будут, если вы таким образом расшарите старые сетевые папки. До classicupgrade права на шары задавались через smb.conf, linuxовые user,group,other и setfacl. После classicupgrade постепенно стали проявляться косяки с правами на изменение, переименование и.т.д. Рекурсивный setfacl не помог, так как появились косяки с наследованием прав.

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

В итоге, ввиду не очень большого объема файлов было принято решение в нерабочее время перенести данные на windows машину, пересоздать сетевые папки по рекомендации разработчиков samba и перезалить файлы обратно.

Домашние папки пользователей на сервере


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

Раньше у каждого пользователя подцеплялась своя шара. Теперь расшаривается только общая папка, а пользователи имеют доступ только в свой каталог.

Настройка выполняется с помошью Microsoft Remote Server Administration Tools (RSAT). У RSAT есть неприятная особенность. При обновлении Win 10 до новой версии, его надо переустанавливать.

Домашние шары можно подцеплять вручную, через свойства пользователя в оснастке «Пользователи и компьютеры». Вкладка профиль. Диск U: \\pdc\user-shares\username

Однако удобнее сделать это через доменную политику, что очень понятно описано в вышеуказанной дркументации в пункте «Using a Group Policy Preference».

Не забываем, что общую шару можно скрыть добавив в ее описание:

browseable = no

Повышение уровня домена


Домен был без проблемм повышен до уровня 2008_R2 командой:

samba-tool domain level raise --domain=2008_R2 --forest=2008_R2

Посмотреть уровень можно командой:

samba-tool domain level show

Если smbd.log засыпан ошибками CUPS


В моем случае проявилась эта проблема:

Unable to connect to CUPS server localhost:631

Исправляем по этой короткой статье.

Проблема при последующем обновлении до Debian 9 и ее решение


При

apt-get dist-upgrade

появилась проблема, а именно не хотели обновляться samba и winbind. Уходили в конфликт зависимостей.

Помог способ из статьи ссылку на которую я к сожалению не сохранил.
Вот прямая цитата из нее:

if Samba is in AD-DC mode, it and winbind fail.
do these commands, then try to run the upgrade again

systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

Список использованных источников


Документация SAMBA:

Migrating a Samba NT4 Domain to Samba AD (Classic Upgrade)
Setting up Samba as an Active Directory Domain Controller
Setting up a Share Using Windows ACLs
User Home Folders
Отличная статья:
Контроллер домена на Debian 8 (… в котором уже есть собранная Samba4)
Samba ошибка: Unable to connect to CUPS server localhost:631
Статья неизвестного англоязычного автора с описанием решения проблемы с обновлением до Debian 9

Комментарии (0)