Миграция с Samba3 на Samba4
Установка пакетов
В качестве системы для сервера используем Centos7. Там пока не поддерживается функционал Samba4 AD (конфликт mit-krb и heimdal). Поэтому поставим самбу с EnterpriseSAMBA.com https://portal.enterprisesamba.com/.
1cd /etc/yum.repos.d
2wget https://sernet-samba-public:Noo1oxe4zo@download.sernet.de/packages/samba/4.2/rhel/7/sernet-samba-4.2.repo
В файле /etc/yum.repos.d/sernet-samba-4.2.repo
заменим
USERNAME:ACCESSKEY
на свои данные либо на публичную учётную запись
sernet-samba-public:Noo1oxe4zo
.
Установим нужные пакеты:
Поиск дубликатов SID
Найдём дубликаты SID с помощью следующего скрипта (запусткается на машине, где расположен ldap).
1#!/usr/bin/python
2# A quick and dirty python script that checks for duplicat SID's using slapcat.
3import os
4
5data = os.popen("slapcat | grep sambaSID", 'r')
6line = []
7
8def anydup(thelist):
9 dups = list(set([x for x in thelist if thelist.count(x) > 1]))
10 for i in dups:
11 print "Duplicate id: ", i
12
13for each_line in data:
14 line.append(each_line.strip())
15
16anydup(line)
Далее дубликаты удаляются с помощью редактирования ldap (я использовал https://directory.apache.org/studio/).
Предварительная конфигурация
Добавил в файл /etc/hosts
адрес хоста.
Также прописал его в прямой и обратной зонах DNS.
Перенос конфигурационных файлов
1pdc ~ # scp -r /var/lib/samba/private/ dc.dk.sci.pfu.edu.ru:/var/lib/samba/samba3tdb/
2pdc ~ # scp /etc/samba/smb.conf dc.dk.sci.pfu.edu.ru:/var/lib/samba/samba3tdb/
В /var/lib/samba/samba3tdb/smb.conf
следует заменить имя контроллера домена.
1netbios name = dc
Поскольку при миграции используется информация из ldap, на хосте dc
задаю файл /etc/openldap/ldap.conf
.
Проведение миграции
1samba-tool domain classicupgrade --dbdir=/var/lib/samba/samba3tdb/ --use-xattrs=yes --realm=dk.sci.pfu.edu.ru --dns-backend=BIND9_DLZ /var/lib/samba/samba3tdb/smb.conf
Шаманство
В файле /var/lib/samba/samba3tdb/smb.conf
заменил доменное имя
1passdb backend = ldapsam:ldap://ldap.dk.sci.pfu.edu.ru
на ip-адрес
1passdb backend = ldapsam:ldap://10.130.64.11
Без этого миграция падала с ошибкой LDAP client internal error: NT_STATUS_BAD_NETWORK_NAME
.
Настройка firewalld
1firewall-cmd --add-service=ldap --permanent
2firewall-cmd --add-service=kerberos --permanent
3firewall-cmd --add-service=kpasswd --permanent
4firewall-cmd --add-service=samba --permanent
5firewall-cmd --add-service=samba-client --permanent
6firewall-cmd --reload
Настройка SELinux
1setsebool -P samba_export_all_ro 1
2setsebool -P samba_export_all_rw 1
3setsebool -P samba_domain_controller 1
Настройка Kerberos
Создадим файл конфигурации kerberos:
Настройка DNS
В файле /etc/resolv.conf
задаём локальный DNS-сервер:
В /etc/named.conf
подключаем сконфигурённую конфигурацию:
1include "/var/lib/samba/private/named.conf";
Также в раздел options
добавляем:
А также следующее:
1options {
2 [...]
3 allow-query { localhost; 10.128.0.0/9; };
4 allow-update { 10.128.0.0/9; 127.0.0.0/8; };
5 forwarders { 10.130.64.239; 8.8.8.8; 8.8.4.4; };
6 allow-transfer {
7 # this config is for a single master DNS server
8 none;
9 };
10 [...]
11};
Настройка firewalld
Настройки прав доступа
Права доступа:
1chown -R root:named /var/lib/samba/private/dns
2chmod 770 /var/lib/samba/private/dns
3chgrp named /var/lib/samba/private/dns.keytab
4chmod g+r /var/lib/samba/private/dns.keytab
5chgrp named /var/lib/samba/private
6chgrp -R named /var/lib/samba/private/sam.ldb.d
7chmod g+rw /var/lib/samba/private/sam.ldb.d/*
Настройка SELinux
Изменим текущий контекст:
1chcon -t named_conf_t /var/lib/samba/private/dns.keytab
2chcon -t named_conf_t /var/lib/samba/private/named.conf
3chcon -t named_conf_t /var/lib/samba/private/named.conf.update
4chcon -R -t named_var_run_t /var/lib/samba/private/dns
5chcon -t named_var_run_t /var/lib/samba/private/dns/${MYREALM}.zone
Изменим постоянный контекст:
1semanage fcontext -a -t named_conf_t /var/lib/samba/private/dns.keytab
2semanage fcontext -a -t named_conf_t /var/lib/samba/private/named.conf
3semanage fcontext -a -t named_conf_t /var/lib/samba/private/named.conf.update
4semanage fcontext -a -t named_var_run_t "/var/lib/samba/private/dns(/.*)?"
5semanage fcontext -a -t named_var_run_t /var/lib/samba/private/dns/${MYREALM}.zone
6semanage fcontext -a -t named_var_run_t /var/lib/samba/private/dns/${MYREALM}.zone.jnl
Запуск демонов
Сконфигурим тип сервера samba в файле /etc/default/sernet-samba
:
1SAMBA_START_MODE="ad"
Запустим демоны:
Добавим их в автозагрузку:
Проверка
Проверка DNS.
1# host -t SRV _ldap._tcp.dk.sci.pfu.edu.ru.
2_ldap._tcp.dk.sci.pfu.edu.ru has SRV record 0 100 389 dc.dk.sci.pfu.edu.ru.
3# host -t SRV _kerberos._udp.dk.sci.pfu.edu.ru.
4_kerberos._udp.dk.sci.pfu.edu.ru has SRV record 0 100 88 dc.dk.sci.pfu.edu.ru.
5# host -t A dc.dk.sci.pfu.edu.ru.
6dc.dk.sci.pfu.edu.ru has address 10.130.64.23
Замена пароля администратора:
1samba-tool user setpassword Administrator
Проверка smbclient
:
1smbclient //localhost/netlogon -UAdministrator -c 'ls'
Аналогичный результат должно давать (dc
— имя сервера):
1smbclient //dc/netlogon -k -c 'ls'
Проверка kerberos:
Дополнительно
Убрать проверку сложности пароля:
1samba-tool domain passwordsettings set --complexity=off
2samba-tool domain passwordsettings set --history-length=0
3samba-tool domain passwordsettings set --min-pwd-age=0
4samba-tool domain passwordsettings set --max-pwd-age=0