==== Установка samba4 в роли контроллера домена на CentOS 7 ====
#yum update -y
#yum upgrade
#systemctl stop NetworkManager
#systemctl disable NetworkManager
#systemctl stop firewalld
#systemctl disable firewalld
==== Отключим систему принудительного контроля доступа: ====
#vi /etc/selinux/config
SELINUX=disabled
Перезапустим:
#reboot
Проверим:
#sestatus
Вывод:
SELinux status: disabled
==== Настроим сеть: ====
#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
#vi /etc/resolv.conf
nameserver 8.8.8.8
==== Установим имя: ====
#hostnamectl set-hostname CENTDC
==== Пропишем хосты: ====
#vi /etc/hosts
192.168.1.170 centdc.linux.ltd CENTDC
==== Перезапустим сеть: ====
#systemctl restart network
==== Приступим к установке пакетов: ====
#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
Скопируем содержимое по [[https://git.samba.org/?p=samba.git;a=blob_plain;f=bootstrap/generated-dists/centos7/bootstrap.sh;hb=v4-11-test|ссылке]] оно нужно нам для подготовки перед сборкой, вставим содержимое в install.sh, скрипт установит недостающие пакеты, которые по какой-то причине были не установлены, запустим его:
#cd /home/admin
#nano install.sh
#chmod +x install.sh
#./install.sh
==== Приступим к установке (к configure и make можно добавить параметр -j и указать кол-во ядер, что бы ускорить процесс сборки пример: -j4): ====
#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: ====
#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"; - раскомментируем чуть позже.
==== Включим автозапуск службы, перезапустим и посмотрим статус: ====
#systemctl enable named
#systemctl restart named
#systemctl status named
Переименуем конфиг Kerberos:
#mv /etc/krb5.conf /etc/krb5.conf.default
==== Начнем установку КД: ====
#samba-tool domain provision --use-rfc2307 --interactive
....
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Включим автозапуск и запустим:
#systemctl enable samba
#systemctl start samba
Раскомментируем include и keytab в /etc/named.conf о котором упоминали выше.
Скопируем конфиг Kerberos:
# 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
Перезапустим все:
#systemctl restart network
#systemctl restart named
#systemctl restart samba
==== Получим билет Kerberos и посмотрим что получили: ====
# kinit administrator
# klist
==== Проверим возможность динамического обновления записей DNS: ====
# /usr/local/samba/sbin/samba_dnsupdate --verbose
IPs: ['192.168.1.170']
......................
No DNS updates needed
==== Создадим прямую и обратную зону: ====
# 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 добавим:
#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.
Пропишем хосты:
#vi /etc/hosts
192.168.1.200 centbdc.linux.ltd CENTBDC
Перезапустим сеть:
#systemctl restart network
Установим пакеты так же как и в 1-м случае:
#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
Скопируем содержимое по [[https://git.samba.org/?p=samba.git;a=blob_plain;f=bootstrap/generated-dists/centos7/bootstrap.sh;hb=v4-11-test|ссылке]], вставим содержимое в install.sh, запустим:
#cd /home/admin
#nano install.sh
#chmod +x install.sh
#./install.sh
Приступим к установке:
#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:
#nano /etc/resolv.conf
# Generated by NetworkManager
search linux.ltd
nameserver 192.168.1.200 - вторичный
nameserver 192.168.1.170 - первичный
Настроим Bind:
#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"; - раскомментируем чуть позже.
Включим автозапуск службы, перезапустим и посмотрим статус:
#systemctl enable named
#systemctl restart named
#systemctl status named
Поправим конфиг Kerberos:
#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: ====
#systemctl enable samba
#systemctl start samba
#systemctl status samba
Получим билеты:
#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
==== Входим в домен: ====
# samba-tool domain join linux.ltd DC -UAdministrator --realm=linux.ltd --dns-backend=BIND9_DLZ
Раскомментируем include и keytab в /etc/named.conf о котором упоминали выше.
выставим права:
#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
и перезапустим все:
#systemctl restart named
#systemctl restart samba
Проверим:
#/usr/local/samba/sbin/samba_dnsupdate --verbose
Вывод:
IPs: ['192.168.1.200']
......................
No DNS updates needed
Ошибок быть не должно. если есть. то идем смотреть права.
Добавляем запись:
(возможно, что она сама прилетит... что-то забыл я как там было, но если она там будет, то он просто скажет что уже существует.)
# samba-tool dns add 192.168.1.170 linux.ltd centdbdc A 192.168.1.200
Выводим GUID:
#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
#samba-tool dns add 192.168.1.170 _msdcs.linux.ltd e8d9d63d-3a87-4f78-bdb8-a96efede0287- вставляем сюда CNAME centbdc.linux.ltd -UAdministrator
Проверка существования записи:
#host -t CNAME e8d9d63d-3a87-4f78-bdb8-a96efede0287._msdcs.linux.ltd.
Добавим форвард:
#nano /usr/local/samba/etc/smb.conf
[global]
....
dns forwarder=192.168.1.170
min protocol = NT1 #если в вашей сети есть машины с Win XP
....
Перезапустим:
#systemctl restart samba
#samba-tool drs showrepl
==== Пробуем добавить пользователя: ====
#samba-tool user add testov
Пошли смотреть на первичном:
#samba-tool user list
Продолжим.
Настроим управление доступом к шарам из под Windows, за это у нас отвечает пакет ACL он уже установлен, настроим:
Добавим в smb.conf папку:
...
[ShareACL]
samba-tool ldapcmp ldap://srv1c.test.local ldap://fst.test.local -UАдминистратор - сравнение
Тут могут быть и ошибки т.к. самба подхватывает не все параметры.
результат:
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
samba-tool dbcheck --cross-ncs -проверка на ошибки
samba-tool dbcheck --cross-ncs --fix - исправление ошибок
Если отвалилась репликация:
Службе каталогов не удается реплицировать следующий объект из исходной службы каталогов по следующему сетевому адресу из-за различий в схеме доменных служб Active Directory.
Объект:
CN=SQL,CN=Computers,DC=domain,DC=local
Сетевой адрес:
a5714808-efa7-49c2-a108-b787dd13bdd4._msdcs.domain.local
Перед попыткой синхронизации следующего раздела каталога доменные службы Active Directory предпримут попытку синхронизации схемы.
Раздел каталога:
DC=domain,DC=local
Репликация раздела каталога приложений DC=domain,DC=local из источника a5714808-efa7-49c2-a108-b787dd13bdd4 (fst.domain.local) была прервана. Для репликации требуется непротиворечивое состояние схемы, но последняя попытка синхронизации схемы не удалось. Совершенно необходимо, чтобы репликация схемы функционировала нормально. Проверьте предыдущие сообщения об ошибках, чтобы получить дополнительные диагностические сведения. Если эта ситуация повторится, обратитесь в службу поддержки Майкрософт за помощью. Ошибка 8418: Произошла ошибка операции репликации из-за несоответствия схемы задействованных серверов..
Проверяем версию схемы:
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:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Parameters\SystemSchemaVersion - тоже 47
Исходя из информации в сообщении после которого выводилась ошибка я подумал что у меня не все в порядке с компьютером под именем SQL
Сравнение между контроллерами говорило следующее:
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
Решил попытаться заменить атрибуты т.е. взять атрибуты с виндового сервера и заменить на линуксовом
ldifde -f SQL.ldif -d "CN=SQL,CN=Computers,DC=domain,DC=local" -s srv1c
Далее отредактировал файл SQL.ldif до следующего состояния:
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
ldifde -i -f SQL.ldif -s fst
И перезапустим репликацию:
repadmin /replicate srv1c fst dc=domain,dc=local
repadmin /replicate fst srv1c dc=domain,dc=local
и проверим:
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 - документация
Надеюсь ничего не забыл :-)