Миграция с Samba3 на Samba4

Миграция с Samba3 на Samba4

2015-10-27 · 3 мин. для прочтения

Установка пакетов

В качестве системы для сервера используем 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.

Установим нужные пакеты:

1yum -y install sernet-samba sernet-samba-ad
2yum -y install bind

Поиск дубликатов 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 адрес хоста.

1127.0.0.1               localhost.localdomain   localhost                                                                                                                                     
210.130.64.23            dc.dk.sci.pfu.edu.ru    dc

Также прописал его в прямой и обратной зонах 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.

1BASE    dc=dk,dc=sci,dc=pfu,dc=edu,dc=ru                                                                                                                                                      
2URI     ldap://ldap.dk.sci.pfu.edu.ru                                                                                                                                                         
3                                                                                                                                                                                              
4TLS_REQCERT     allow

Проведение миграции

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:

1mv /etc/krb5.conf{,.default}
2cp /var/lib/samba/private/krb5.conf /etc

Настройка DNS

В файле /etc/resolv.conf задаём локальный DNS-сервер:

1search dk.sci.pfu.edu.ru                                                                                                                                                                      
2nameserver 127.0.0.1

В /etc/named.conf подключаем сконфигурённую конфигурацию:

1include "/var/lib/samba/private/named.conf"; 

Также в раздел options добавляем:

1options {
2     [...]
3     tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
4     [...]
5};

А также следующее:

 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

1firewall-cmd --add-service=dns --permanent
2firewall-cmd --reload

Настройки прав доступа

Права доступа:

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"

Запустим демоны:

1systemctl start named.service
2systemctl start sernet-samba-ad.service

Добавим их в автозагрузку:

1systemctl enable named.service
2systemctl enable sernet-samba-ad.service

Проверка

Проверка 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:

1kinit administrator@DK.SCI.PFU.EDU.RU
2klist

Дополнительно

Убрать проверку сложности пароля:

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