Содержание

Установка samba4 в роли контроллера домена на CentOS 7

ini
#yum update -y
#yum upgrade
#systemctl stop NetworkManager
#systemctl disable NetworkManager
#systemctl stop firewalld
#systemctl disable firewalld

Отключим систему принудительного контроля доступа:

ini
#vi /etc/selinux/config

SELINUX=disabled

Перезапустим:

#reboot

Проверим:

ini
#sestatus

Вывод: 
SELinux status:                 disabled

Настроим сеть:

ini
#vi /etc/sysconfig/network-script/ifcfg-eth0

BOOTPROTO="none"
IPADDR=192.168.1.170
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
PEERDNS=no
ini
#vi /etc/resolv.conf

nameserver 8.8.8.8

Установим имя:

#hostnamectl set-hostname CENTDC

Пропишем хосты:

#vi /etc/hosts

192.168.1.170 centdc.linux.ltd CENTDC

Перезапустим сеть:

ini
#systemctl restart network

Приступим к установке пакетов:

ini
#yum install -y bash-completion nano mc htop wget bind bind-utils 
bind-sdb docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel 
keyutils-libs-devel krb5-workstation libacl-devel libaio-devel libarchive-devel 
libattr-devel libblkid-devel libtasn1 libtasn1-tools libxml2-devel libxslt 
lmdb-devel openldap-devel pam-devel perl perl-ExtUtils-MakeMaker perl-Parse-Yapp 
popt-devel python3-cryptography python3-dns python3-gpg python36-devel readline-devel 
rpcgen systemd-devel tar zlib-devel ntp 

Скопируем содержимое по ссылке оно нужно нам для подготовки перед сборкой, вставим содержимое в install.sh, скрипт установит недостающие пакеты, которые по какой-то причине были не установлены, запустим его:

ini
#cd /home/admin
#nano install.sh
#chmod +x install.sh
#./install.sh

Приступим к установке (к configure и make можно добавить параметр -j и указать кол-во ядер, что бы ускорить процесс сборки пример: -j4):

ini
#wget https://download.samba.org/pub/samba/stable/samba-4.11.0.tar.gz 

#tar -zxf samba-4.11.0.tar.gz 

#cd samba-4.11.0

#./configure --with-systemd --with-winbind

#make && make install 

#echo 'pathmunge /usr/local/samba/bin/' > /etc/profile.d/custompath.sh

#chmod +x /etc/profile.d/custompath.sh

#. /etc/profile

#nano /etc/systemd/system/samba.service

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target

Настроим Bind:

ini
#nano /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	#tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; -  раскомментируем чуть позже.
	listen-on port 53 { any;};
	#listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };
	allow-update	{ any; };
	allow-recursion { any; };
	forwarders	{ 8.8.8.8; };
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
#include "/usr/local/samba/bind-dns/named.conf"; - раскомментируем чуть позже.

Включим автозапуск службы, перезапустим и посмотрим статус:

ini
#systemctl enable named
#systemctl restart named
#systemctl status named

Переименуем конфиг Kerberos:

ini
#mv /etc/krb5.conf /etc/krb5.conf.default

Начнем установку КД:

ini
#samba-tool domain provision --use-rfc2307 --interactive
....

DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:  BIND9_DLZ

Включим автозапуск и запустим:

ini
#systemctl enable samba
#systemctl start samba

Раскомментируем include и keytab в /etc/named.conf о котором упоминали выше.

Скопируем конфиг Kerberos:

ini
# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

Исправим resolv:

#nano /etc/resolv.conf 
 
search linux.ltd
nameserver 192.168.1.170

Изменим и проверим права:

#chown root:named /usr/local/samba/private
#chmod 775 /usr/local/samba/private
#chown root:named /usr/local/samba/private/dns.keytab
#chmod 640 /usr/local/samba/private/dns.keytab
 
# ls -ld /usr/local/samba/private/
drwxrwxr-x 7 root named 4096 сен 30 13:26 /usr/local/samba/private/
 
 
# ls -l /usr/local/samba/private/dns.keytab
-rw-r----- 2 root named 717 сен 30 13:26 /usr/local/samba/private/dns.keytab

Перезапустим все:

ini
#systemctl restart network
#systemctl restart named
#systemctl restart samba

Получим билет Kerberos и посмотрим что получили:

ini
# kinit administrator
# klist

Проверим возможность динамического обновления записей DNS:

ini
# /usr/local/samba/sbin/samba_dnsupdate --verbose
IPs: ['192.168.1.170']
......................
No DNS updates needed

Создадим прямую и обратную зону:

ini
# samba-tool dns zonecreate LINUX.LTD 1.168.192.in-addr.arpa -Uadministrator
# samba-tool dns add LINUX.LTD 1.168.192.in-addr.arpa 170 PTR LINUX.LTD -Uadministrator

-----------------------------------------------------------------------------------------

Готово.

Настроим вторичный КД:

На 1-й, тот что настраивали выше в resolv добавим:

ini
#nano /etc/resolv.conf 

# Generated by NetworkManager
search linux.ltd
nameserver 192.168.1.170 - первичный
nameserver 192.168.1.200 - вторичный

Подготовку системы сделаем такую же, только ip укажем 192.168.1.200.

Пропишем хосты:

ini
#vi /etc/hosts
 
192.168.1.200 centbdc.linux.ltd CENTBDC

Перезапустим сеть:

ini
#systemctl restart network

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

ini
#yum install -y bash-completion nano mc htop wget bind bind-utils 
bind-sdb docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel 
keyutils-libs-devel krb5-workstation libacl-devel libaio-devel libarchive-devel 
libattr-devel libblkid-devel libtasn1 libtasn1-tools libxml2-devel libxslt 
lmdb-devel openldap-devel pam-devel perl perl-ExtUtils-MakeMaker perl-Parse-Yapp 
popt-devel python3-cryptography python3-dns python3-gpg python36-devel readline-devel 
rpcgen systemd-devel tar zlib-devel ntp

Скопируем содержимое по ссылке, вставим содержимое в install.sh, запустим:

ini
#cd /home/admin
#nano install.sh
#chmod +x install.sh
#./install.sh

Приступим к установке:

ini
#wget https://download.samba.org/pub/samba/stable/samba-4.11.0.tar.gz 

#tar -zxf samba-4.11.0.tar.gz 

#cd samba-4.11.0

#./configure --with-systemd --with-winbind

#make && make install 

#echo 'pathmunge /usr/local/samba/bin/' > /etc/profile.d/custompath.sh

#chmod +x /etc/profile.d/custompath.sh

#. /etc/profile

#nano /etc/systemd/system/samba.service

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target

Исправим resolv:

ini
#nano /etc/resolv.conf 

# Generated by NetworkManager
search linux.ltd
nameserver 192.168.1.200 - вторичный
nameserver 192.168.1.170 - первичный

Настроим Bind:

ini
#nano /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	#tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; -  раскомментируем чуть позже.
	listen-on port 53 { any;};
	#listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };
	allow-update	{ any; };
	allow-recursion { any; };
	forwarders	{ 8.8.8.8; };
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
#include "/usr/local/samba/bind-dns/named.conf"; - раскомментируем чуть позже.

Включим автозапуск службы, перезапустим и посмотрим статус:

ini
#systemctl enable named
#systemctl restart named
#systemctl status named

Поправим конфиг Kerberos:

ini
#mv /etc/krb5.conf /etc/krb5.conf.default


#nano /etc/krb5.conf
[libdefaults]
	default_realm = LINUX.LTD
	dns_lookup_realm = true
	dns_lookup_kdc = true

Запуск samba:

ini
#systemctl enable samba
#systemctl start samba
#systemctl status samba

Получим билеты:

ini
#kinit administrator

#klist

Вывод
Valid starting       Expires              Service principal
26.09.2019 16:21:55  27.09.2019 02:21:55  krbtgt/LINUX.LTD@LINUX.LTD
	renew until 27.09.2019 16:21:50

Входим в домен:

ini
# samba-tool domain join linux.ltd DC -UAdministrator --realm=linux.ltd --dns-backend=BIND9_DLZ

Раскомментируем include и keytab в /etc/named.conf о котором упоминали выше.

выставим права:

ini
#chown root:named /usr/local/samba/private
#chmod 775 /usr/local/samba/private
#chown root:named /usr/local/samba/private/dns.keytab
#chmod 640 /usr/local/samba/private/dns.keytab
 
# ls -ld /usr/local/samba/private/
drwxrwxr-x 7 root named 4096 сен 30 13:26 /usr/local/samba/private/
  
# ls -l /usr/local/samba/private/dns.keytab
-rw-r----- 2 root named 717 сен 30 13:26 /usr/local/samba/private/dns.keytab

#chmod 770 /usr/local/samba/bind-dns 
#chown root:named /usr/local/samba/bind-dns

и перезапустим все:

ini
#systemctl restart named
#systemctl restart samba

Проверим:

ini
#/usr/local/samba/sbin/samba_dnsupdate --verbose

Вывод:
IPs: ['192.168.1.200']
......................
No DNS updates needed

Ошибок быть не должно. если есть. то идем смотреть права.

Добавляем запись: (возможно, что она сама прилетит… что-то забыл я как там было, но если она там будет, то он просто скажет что уже существует.)

ini
# samba-tool dns add 192.168.1.170 linux.ltd centdbdc A 192.168.1.200

Выводим GUID:

ini
#ldbsearch -H /usr/local/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid

Вывод:
	# record 1
	dn: CN=NTDS Settings,CN=CENTBDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=linux,DC=ltd
	objectGUID: e8d9d63d-3a87-4f78-bdb8-a96efede0287 - копируем

	# record 2
	dn: CN=NTDS Settings,CN=CENTDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=linux,DC=ltd
	objectGUID: 7a610a38-6195-41ad-a62d-22039db284fd

	# returned 2 records
	# 2 entries
	# 0 referrals
ini
#samba-tool dns add 192.168.1.170 _msdcs.linux.ltd e8d9d63d-3a87-4f78-bdb8-a96efede0287- вставляем сюда CNAME centbdc.linux.ltd -UAdministrator

Проверка существования записи:

ini
#host -t CNAME <color #ed1c24>e8d9d63d-3a87-4f78-bdb8-a96efede0287</color>._msdcs.linux.ltd.

Добавим форвард:

ini
#nano /usr/local/samba/etc/smb.conf 

[global]
....
dns forwarder=192.168.1.170
min protocol = NT1 #если в вашей сети есть машины с Win XP
....

Перезапустим:

ini
#systemctl restart samba
#samba-tool drs showrepl

Пробуем добавить пользователя:

ini
#samba-tool user add testov

Пошли смотреть на первичном:

ini
#samba-tool user list

Продолжим.

Настроим управление доступом к шарам из под Windows, за это у нас отвечает пакет ACL он уже установлен, настроим:

Добавим в smb.conf папку:

ini
...
[ShareACL]
       
ini
samba-tool ldapcmp ldap://srv1c.test.local ldap://fst.test.local -UАдминистратор - сравнение

Тут могут быть и ошибки т.к. самба подхватывает не все параметры. результат:

ini
Attributes with different values:

    lastLogonTimestamp
    servicePrincipalName
    userParameters

* Comparing [CONFIGURATION] context...

* Objects to be compared: 1679

* Result for [CONFIGURATION]: SUCCESS

* Comparing [SCHEMA] context...

* Objects to be compared: 1550

* Result for [SCHEMA]: SUCCESS

* Comparing [DNSDOMAIN] context...

* Objects to be compared: 175

* Result for [DNSDOMAIN]: SUCCESS

* Comparing [DNSFOREST] context...

* Objects to be compared: 20

* Result for [DNSFOREST]: SUCCESS
ERROR: Compare failed: -1
ini
samba-tool dbcheck --cross-ncs -проверка на ошибки
samba-tool dbcheck --cross-ncs --fix - исправление ошибок

Если отвалилась репликация:

ini
Службе каталогов не удается реплицировать следующий объект из исходной службы каталогов по следующему сетевому адресу из-за различий в схеме доменных служб Active Directory. 
 
Объект:
CN=SQL,CN=Computers,DC=domain,DC=local 
Сетевой адрес:
a5714808-efa7-49c2-a108-b787dd13bdd4._msdcs.domain.local 
 
Перед попыткой синхронизации следующего раздела каталога доменные службы Active Directory предпримут попытку синхронизации схемы. 
Раздел каталога:
DC=domain,DC=local
ini
Репликация раздела каталога приложений DC=domain,DC=local из источника a5714808-efa7-49c2-a108-b787dd13bdd4 (fst.domain.local) была прервана. Для репликации требуется непротиворечивое состояние схемы, но последняя  попытка синхронизации схемы не удалось. Совершенно необходимо, чтобы  репликация схемы функционировала нормально. Проверьте предыдущие сообщения  об ошибках, чтобы получить дополнительные диагностические сведения.  Если эта ситуация повторится, обратитесь в службу поддержки Майкрософт за помощью. Ошибка 8418: Произошла ошибка операции репликации из-за несоответствия схемы задействованных серверов..

Проверяем версию схемы:

ini
ldbsearch -H /usr/local/samba/private/sam.ldb -b 'cn=Schema,cn=Configuration,dc=local,dc=local' -s base objectVersion
# record 1
dn: CN=Schema,CN=Configuration,DC=local,DC=local
objectVersion: 47

Samba - 47 версия

Windows:

ini
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Parameters\SystemSchemaVersion - тоже 47

Исходя из информации в сообщении после которого выводилась ошибка я подумал что у меня не все в порядке с компьютером под именем SQL Сравнение между контроллерами говорило следующее:

ini
samba-tool ldapcmp ldap://srv1c.domain.local ldap://fst.domain.local -UАдминистратор


Comparing:
'CN=SQL,CN=COMPUTERS,DC=DOMAIN,DC=LOCAL' [ldap://srv1c.domain.local]
'CN=SQL,CN=COMPUTERS,DC=DOMAIN,DC=LOCAL' [ldap://fst.domain.local]
    Difference in attribute values:
        servicePrincipalName =>
[b'HOST/SQL', b'HOST/sql.domain.local', b'RestrictedKrbHost/SQL', b'RestrictedKrbHost/sql.domain.local', b'TERMSRV/SQL', b'TERMSRV/sql.domain.local', b'WSMAN/SQL', b'WSMAN/sql.domain.local', b'tapinego/SQL', b'tapinego/sql.domain.local']
[b'HOST/SQL', b'HOST/sql.domain.local', b'RestrictedKrbHost/SQL', b'RestrictedKrbHost/sql.domain.local', b'TERMSRV/SQL', b'TERMSRV/sql.domain.local', b'WSMAN/SQL', b'WSMAN/sql', b'WSMAN/sql.domain.local', b'tapinego/SQL', b'tapinego/sql.domain.local']

    FAILED

Решил попытаться заменить атрибуты т.е. взять атрибуты с виндового сервера и заменить на линуксовом

ini
ldifde -f SQL.ldif -d "CN=SQL,CN=Computers,DC=domain,DC=local" -s srv1c

Далее отредактировал файл SQL.ldif до следующего состояния:

ini
dn: CN=SQL,CN=Computers,DC=domain,DC=local
changetype: modify
replace: servicePrincipalName
servicePrincipalName: tapinego/SQL
servicePrincipalName: tapinego/sql.domain.local
servicePrincipalName: TERMSRV/sql.domain.local
servicePrincipalName: WSMAN/sql.domain.local
servicePrincipalName: RestrictedKrbHost/sql.domain.local
servicePrincipalName: HOST/sql.domain.local
servicePrincipalName: TERMSRV/SQL
servicePrincipalName: WSMAN/SQL
servicePrincipalName: RestrictedKrbHost/SQL
servicePrincipalName: HOST/SQL
-

Загрузим файл на второй контроллер домена который работает под Linux

ini
ldifde -i -f SQL.ldif -s fst

И перезапустим репликацию:

ini
repadmin /replicate srv1c fst dc=domain,dc=local
repadmin /replicate fst srv1c dc=domain,dc=local

и проверим:

ini
C:\>repadmin /replsummary
Время запуска сводки по репликации: 2020-09-15 14:02:18

Начат сбор данных для сводки по репликации, подождите:
  .....


Исходный DSA        наиб. дельта     сбоев/всего %%   ошибка
 FST                       11m:56s    0 /   5    0
 SRV1C                     02m:23s    0 /   5    0


Конечный DSA        наиб. дельта      сбои/всего %%   ошибка
 FST                       02m:23s    0 /   5    0
 SRV1C                     11m:56s    0 /   5    0

https://wiki.samba.org/index.php/Transferring_and_Seizing_FSMO_Roles#Transferring_an_FSMO_Role - если все умерло.
https://wiki.samba.org/index.php/Main_Page - документация

Надеюсь ничего не забыл :-)