==== Установка 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 - документация Надеюсь ничего не забыл :-)