Предыстория
Существует небольшая локальная сеть предприятия, в которой лет 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 рекомендуется проводить: «Samba AD DC database check».
# samba-tool dbcheck --cross-ncs
Так как в Deb 9 SAMBA версии 4.5 у меня полезла куча ошибок «replPropertyMetaData».
Процесс устранения описан в документации:
wiki.samba.org/index.php/Updating_Samba#Fixing_replPropertyMetaData_Attributes
И сводится к выполнению команды:
samba-tool dbcheck --cross-ncs --fix --yes
Список использованных источников
Документация 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