Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
13:59, 22 октября 2015

Samba 4 — как резервный доменный контроллер

Blog post image

Samba 4 как резервный доменный контроллер

 

Из записки вы узнаете, как сделать вторичный доменный контроллер BDC (Backup domain controler). Помимо Samba, потребуется установить DNS и DHCP службы. Так как первый DC раздает IP адреса в диапазоне 10.168.50.50 - 149, второму серверу укажем иной диапазон, чтобы он не пересекался с первым - 10.168.50.150 - 254.

Написанная инструкция, почти копия уже опубликованного поста "Samba4 как DC", но с некоторыми отличиями...

 

Исходные данные:

Доменная зона  -                                         company.ru

Главный доменный контроллер  -                 companypdc.company.ru

Резервный доменный контроллер  -              sdc.company.ru

ip-адрес главного контролера -                    10.168.50.2

ip-адрес резервного контроллера -               10.168.50.3

 

В моем случае главный контроллер на CentOS 7, вторичный тоже на CentOS 7. Хотя вы можете сделать первичным Windows DC.

 

1. Настройка сетевого адаптера и имени хоста (сервера)

 

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

DEVICE=enp0s8

HWADDR=08:00:27:04:5A:BD

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=static

IPADDR=10.168.50.3                   # IP-адрес резервного контроллера домена

NETMASK=255.255.255.0

GATEWAY=10.168.50.1                  # выход в Интернет

# vi /etc/hostname

hostname=sdc

 

2. Отключаем SELINUX и iptables

 

# vi /etc/selinux/config

selinux=disabled

# setenforce 0

# systemctl disable firewalld

# systemctl stop firewalld

 

3. Установка зависимостей

 

# yum install gcc make wget python-devel gnutls-devel openssl-devel libacl-devel krb5-server krb5-libs krb5-workstation bind bind-libs bind-utils perl openldap-devel net-tools mc -y

 

4. Настройка DNS

 

# vi /etc/resolv.conf

nameserver 10.168.50.2  # DNS сервер первичный доменный контроллер

nameserver 10.168.50.3  # DNS сервер вторичный текущий сервер

domain company.ru

 

5. Загрузка и установка Samba 4 из исходников

 

# wget http://ftp.samba.org/pub/samba/samba-4.3.1.tar.gz

# tar -xzvf samba-4.3.1.tar.gz

# cd samba-4.3.1/

# ./configure --enable-selftest --with-systemd

# make && make install

# rm /usr/local/samba/etc/smb.conf

Добавляем каталог Samba4 в Path, чтобы запускать утилиты samba без указания пути /usr/local/samba/bin/

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

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

# . /etc/profile

 

6. Создаем юнит для запуска Samba


# vi /etc/systemd/system/samba4.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
 

Запускаем Samba:

# systemctl enable samba4

# systemctl start samba4

 

7. Установка и настройка NTP


NTP - это протокол синхронизации времени по сети. По существу клиенты запрашивают текущее время на сервере и используют его для установки своих собственных часов. Правильное настроенное время требуется для работы Kerberos, если оно будет некорректным, клиенты не смогут пройти аутентификацию на вашем сервере.

Установка NTP:

# yum install ntp -y

Настройка NTP:

Сохраняем текущий конфигурационный файл /etc/ntp.conf

# mv /etc/ntp.conf /etc/ntp.conf.orig

И создаем свой файл настроек:

# vi /etc/ntp.conf

server 127.127.1.0

fudge 127.127.1.0 stratum 20

server 0.pool.ntp.org iburst prefer

server 1.pool.ntp.org iburst prefer

driftfile /var/lib/ntp/ntp.drift

logfile /var/log/ntp

ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/

restrict default kod nomodify notrap nopeer mssntp

restrict 127.0.0.1

restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

Если время не обновляется, увеличьте значение stratum.

Ставим правильное время:

# vi /etc/sysconfig/clock

ZONE="Asia/Almaty"

UTC=false
ARC=true

# mv /etc/localtime /etc/localtime.bak

# ln -s /usr/share/zoneinfo/Asia/Almaty /etc/localtime

# systemctl restart ntpd

Проверяем дату и время, оно должно быть актуальное:

# date

 

8. Настройка Kerberos

 

# vi /etc/krb5.conf

[libdefaults]

default_realm = COMPANY.RU

dns_lookup_realm = true

dns_lookup_kdc = true

 

Проверка соединения с главным контроллером:

# kinit Administrator

Password: *********

# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: Administrator@COMPANY.RU

Valid starting     Expires            Service principal

06/09/13 02:13:41  06/09/13 12:13:45  krbtgt/COMPANY.RU@COMPANY.RU

renew until 06/16/13 02:13:41

# systemctl restart samba4

# systemctl restart named

 

9. Добавляем в доменную сеть вторичный контроллер SDC

 

# samba-tool domain join company.ru DC -UAdministrator --realm=company.ru --dns-backend=BIND9_DLZ

 

10. Добавление записей в зону DNS на первичном сервере


На первичном доменном контроллере проделываем следующею инструкцию:

Добавляем A запись чтобы можно было обращаться ко второму КД по имени, эта запись не прописывается автоматически, поэтому делаем все в ручную:

[root@companypdc ~]# samba-tool dns add 10.168.50.2 company.ru sdc A 10.168.50.3

Сразу же проверяем прямую А запись DNS:

[root@companypdc ~]# host -t A sdc.company.ru.

 

После того как вы присоединили новый контроллер DC, он прописывается в базе Active Directory первичного DC. Но этого мало для нормальной работы, надо сделать запрос к базе AD и вывести его уникальный идентификатор объекта - "objectGUID", полученный идентификатор требуется прописать на DNS сервере первого сервера:

[root@companypdc ~]# ldbsearch -H /usr/local/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid

# record 1
dn: CN=NTDS Settings,CN=SDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=company,DC=ru
objectGUID: d2f7a182-32d0-4180-b1c8-ddb972586b2d
# record 2
dn: CN=NTDS Settings,CN=COMPANYPDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=company,DC=ru
objectGUID: 18005395-7be1-496d-a212-f558490c3468
# returned 2 records
# 2 entries
# 0 referrals

При вводе второго сервера "sdc.company.ru"  в домен, ему был присвоен уникальный номер "d2f7a182-32d0-4180-b1c8-ddb972586b2d" , этот номер есть в базе Active Directory, но его нет в DNS. Теперь нам надо внести в специальную зону DNS (_msdcs.company.ru) запись о нашем втором сервере, чтобы другие серверы и компьютеры, могли работать со вторым DC. Эта зона DNS используется для обнаружения служб AD:

[root@companypdc ~]# samba-tool dns add 10.168.50.2 _msdcs.company.ru d2f7a182-32d0-4180-b1c8-ddb972586b2d CNAME sdc.company.ru -UAdministrator

Password for [COMPANY\Administrator]:
Record added successfully

Проверяем, правильно ли прописался наш второй сервер DC в зоне DNS:

[root@companypdc ~]# host -t CNAME d2f7a182-32d0-4180-b1c8-ddb972586b2d._msdcs.company.ru.

d2f7a182-32d0-4180-b1c8-ddb972586b2d._msdcs.company.ru is an alias for sdc.company.ru.

Если видите запись, это означает, что вторичный доменный контроллер добавлен в AD правильно. И теперь с ним можно работать как с полноценным участником доменной сети. Это требуется чтобы заработала репликация. То есть, вся база AD первичного DC будет автоматически синхронизироваться с нашим вторичным сервером SDC.

Не обязательно или даже совсем не нужно, но можно, прописать в опции forward DNS сервер имен первичного DC, чтобы запросы пересылались в PDC:

# vi /usr/local/samba/etc/smb.conf

Добавить DNS сервер первичного DC:

[global]

dns forwarder = 10.168.50.2

Если у вас будет два перенаправления в /etc/named.conf и /usr/local/samba/etc/smb.conf. То DNS запросы, будут с паузой.

 

11. Репликация

 

Можно приступать к репликации(синхронизации данных каталога AD), зайдите на второй сервер и выполните команды:

На всякий случай перезапускаем демон Samba4:

# systemctl restart samba4

И производим репликацию:

# samba-tool drs showrepl

 

12. Проверка

 

Для проверки создайте любую учетную запись  на вторичном контроллере, я создал "ivanka":

[root@sdc ~]# samba-tool user add ivanka

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

[root@companypdc ~]# samba-tool user list

Найдите в списке учетную запись  "ivanka".

 

Попытайтесь зайти в клиентский компьютер используя резервный контроллер домена, все должно работать!

 

13. Настройка DDNS


По умолчанию named (Bind) запускается во время загрузки ОС через юнит systemd. С этого юнита можно управлять локально запуском и остановом службы named. Однако когда named уже запущен, может появиться необходимость перезапустить его по каким-либо другим причинам, в том числе и для того, чтобы сервер имен проверил наличие обновлений в файлах зон. Для этих целей пакет BIND включает в себя инструмент удаленного управления сервером имен (Remote Name Daemon Control), он же rndc.

Утилита rndc-confgen настраивает rndc генерируя конфигурационный файл для управления named.

# rndc-confgen -a -r /dev/urandom

После настройки rndc, нужно настроит конфигурационный файл named (Bind):

# vi /etc/named.conf

 

options {
listen-on port 53 { 10.0.10.10; 10.168.50.3; 127.0.0.1; }; # Bind слушает порт 53 на всех сетевых интерфейсах
# listen-on-v6 port 53 { ::1; }; # Отключаем слушать IPv6
# recursion yes;
forwarders {8.8.4.4; }; # Включаем пересылку запросов, в случаем если наш DNS сервера не знает что делать на Google public DNS server
notify no; # отключаем посылку сообщения о обновлении зоны
allow-query     { 10.168.50.0/24; 127.0.0.0/8; }; # Добавляем хосты и сети, которым разрешено использовать DNS сервер
allow-recursion { 10.168.50.0/24; 127.0.0.0/8; }; # Добавляем хосты и сети, которым разрешено использовать кому разрешено выполнять рекурсивные запросы
allow-update    { 10.168.50.0/24; 127.0.0.0/8; }; #  Добавляем хосты и сети, от которых можно динамически обновлять зону
version none; # Скрываем версию Bind
hostname none; # Скрываем имя хоста
server-id none; # Скрываем идентификатор сервера
dnssec-enable no; # Отключаем DNSSEC, чтобы заработал FORWARDING - пересылка запросов
dnssec-validation no; # Отключаем проверку по DNSSEC
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; # Динамическое обновление зоны, компьютеры автоматически добавляются в прямую зону
tkey-domain "company.ru";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "9ls220K+4zO3N3YAvZXg=="; # берем из файла /etc/rndc.key
};

include "/usr/local/samba/private/named.conf"; # Добавляем плагин DLZ чтобы Samba работала с Bind

 

Вот полный файл named.conf:

# vi /etc/named.conf

options {
listen-on port 53 { 10.0.10.10; 10.168.50.3; 127.0.0.1; };
#       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";
#       allow-query     { localhost; };
########MY SETTINGS########
forwarders {8.8.4.4; }; # Включаем пересылку запросов, в случаем если наш DNS сервера не знает что делать на Google public DNS server
notify no; # отключаем посылку сообщения о обновлении зоны
allow-query     { 10.168.50.0/24; 127.0.0.0/8; 10.0.10.0/24; }; # Добавляем хосты и сети, которым разрешено использовать DNS сервер
allow-recursion { 10.168.50.0/24; 127.0.0.0/8; 10.0.10.0/24; }; # Добавляем хосты и сети, которым разрешено использовать кому разрешено выполнять рекурсивные запросы
allow-update    { 10.168.50.0/24; 127.0.0.0/8; 10.0.10.0/24; }; #  Добавляем хосты и сети, от которых можно динамически обновлять зону
version none; # Скрываем версию Bind
hostname none; # Скрываем имя хоста
server-id none; # Скрываем идентификатор сервера
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; #
tkey-domain "company.ru";
########MY SETTINGS########
#       recursion yes;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.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";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "5028ANZBdRiP/KXv9DNBvQ=="; # берем из файла /etc/rndc.key
};
include "/etc/named.root.key";
#include "/etc/named.rfc1912.zones";
include "/usr/local/samba/private/named.conf"; # Добавляем плагин DLZ чтобы Samba работала с Bind

Также требуется указать сервер DNS в файле /etc/resolv.conf

# vi /etc/resolv.conf

domain company.ru

search company.ru

nameserver 10.168.50.2   #DNS вторичного сервера

nameserver 10.168.50.1   #DNS первичного сервера

И убрать внешний DNS сервер Google, теперь запросы будут перенаправлятся из named на Google DNS. Так  как мы оставили там строчку forwardind {8.8.8.8;}; , а также мы поставили перенаправление через конфигурационный файл Samba4 smb.conf - dns forwader = 8.8.8.8

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

DEVICE=enp0s8

HWADDR=08:00:27:04:5A:BD

TYPE=Ethernet

ONBOOT=yes                       # Включение адаптера при загрузке ОС

NM_CONTROLLED=no

BOOTPROTO=static             # Статический IP адрес

IPADDR=10.168.50.3      # IP-адрес контроллера домена

NETMASK=255.255.255.0

GATEWAY=10.168.50.1     # адрес роутера - выход в Интернет

#DNS1=8.8.8.8  # Удаляем Google public DNS, теперь он прописан в /etc/named.conf и все другие

Чтобы заработало динамическое обновление обратной зоны, измените конфигурационный файл Samba4.

Конфигурационный файл Samba 4:
# vi /usr/local/samba/etc/smb.conf
# Global parameters
[global]
workgroup = COMPANY
realm = company.ru
netbios name = COMPANYPDC
server role = active directory domain controller
server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, smb
dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
idmap_ldb:use rfc2307 = yes
kerberos method = system keytab
client ldap sasl wrapping = sign
allow dns updates = nonsecure and secure
#nsupdate command =  /usr/bin/nsupdate -g -d
nsupdate command =  /usr/local/samba/sbin/samba_dnsupdate -d 3
[netlogon]
path = /usr/local/samba/var/locks/sysvol/company.ru/scripts
read only = No
write ok = Yes
[sysvol]
path = /usr/local/samba/var/locks/sysvol
read only = No
write ok = Yes

Жирным шрифтом помечены добавленные настройки мною.

Перезапускаем сетевую службы, демон named и samba4, чтобы настройки начали работать.

# systemctl restart network

# systemctl restart named

# systemctl restart samba4

 
14. Настройка DHCP
 

Устанавливаем DHCP сервер:

# yum install dhcp -y

Сохраняем оригинальный файл настроек DHCP:

# mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig

Создаем новый конфигурационный файл /etc/dhcp/dhcpd.conf

# vi /etc/dhcp/dhcpd.conf

authoritative;
server-identifier sdc.company.ru;
ddns-update-style interim;
ddns-updates on;
ddns-domainname "company.ru";
ddns-rev-domainname "in-addr.arpa";
update-static-leases true;
ignore client-updates;
include "/etc/rndc.key";
zone company.ru. {          # Forward zone to be updated
primary 127.0.0.1;
key rndc-key;
}
zone 50.168.10.in-addr.arpa. { # Backward zone to be updated
primary 127.0.0.1;
}
subnet 10.168.50.0 netmask 255.255.255.0 {
#####################
on commit {
set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address));
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set ClientName = pick-first-value(option host-name, host-decl-name, config-option host-name, noname);
log(concat("Commit: IP: ", ClientIP, " Mac: ", ClientMac, " Name: ", ClientName));
execute("/usr/local/sbin/dhcp-dyndns.sh", "add", ClientIP, ClientName, ClientMac);
}
#################
on release {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac));
# cannot get a ClientName here, for some reason that always fails
execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, "", ClientMac);
}
#################
on expiry {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
# cannot get a ClientMac here, apparently this only works when actually receiving a packet
log(concat("Expired: IP: ", ClientIP));
# cannot get a ClientName here, for some reason that always fails
execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, "", "0");
#####################
}
# --- default gateway
#option options-135 "company.ru"
#option domain-list             "company.ru";
option routers                  10.168.50.2;
option subnet-mask              255.255.255.0;
option nis-domain               "company.ru";
option domain-name              "company.ru";
option domain-search            "company.ru";
option domain-name-servers      10.168.50.3, 10.168.50.2;
option time-offset              10800;   # FET
option ntp-servers              10.168.50.3;
option netbios-name-servers     10.168.50.3;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
option netbios-node-type 2;
range 10.168.50.150 10.168.50.220;
default-lease-time 1728000;
max-lease-time 1728000;
allow booting;
allow bootp;
next-server 10.168.50.3;
filename "/pxelinux.0";
# we want the nameserver to appear at a fixed address
host client-1.company.ru {
hardware ethernet 00:01:02:03:04:05;
fixed-address 10.168.50.50;
}
}

Создаем файл  /usr/local/sbin/dhcp-dyndns.sh

# vi /usr/local/sbin/dhcp-dyndns.sh

#!/bin/sh
action=$1
ip=$2
host=$(echo $3 | awk -F '.' '{print $1}')
mac=$4
. /usr/local/etc/dhcp-dyndns.conf
ptr=$(echo $ip | awk -F '.' '{print $4"."$3"."$2"."$1".in-addr.arpa"}')
/usr/bin/kinit -k -t $keytab $kname@$realm
case "$action" in
add)
echo "server $server
update delete $host.$domain $time A
update add $host.$domain $time A $ip
send"|nsupdate -g
echo "server $server
update delete $ptr $time PTR
update add $ptr $time PTR $host.$domain
send"|nsupdate -g
;;
delete)
echo "server $server
update delete $host.$domain $time A
send"|nsupdate -g
echo "server $server
update delete $ptr $time PTR
send"|nsupdate -g
;;
esac

Даем права на запуск:

# chmod 750 /usr/local/sbin/dhcp-dyndns.sh

# chown dhcpd:dhcpd /usr/local/sbin/dhcp-dyndns.sh

# vi /usr/local/etc/dhcp-dyndns.conf

server=sdc
realm=COMPANY.RU
domain=company.ru
keytab=/var/lib/dhcp/dhcp.keytab
time=3600
kname=dhcp

# /usr/local/samba/bin/samba-tool user add dhcp --random-password

# /usr/local/samba/bin/samba-tool group addmembers DnsUpdateProxy dhcp

# mkdir /var/lib/dhcp/

# /usr/local/samba/bin/samba-tool domain exportkeytab --princ 'dhcp@COMPANY.RU' -N /var/lib/dhcp/dhcp.keytab # вместо COMPANY.RU укажите свой REALM

# ls -l /var/lib/dhcp/dhcp.keytab

# chown dhcpd:dhcpd /var/lib/dhcp/dhcp.keytab

Запускаем серверную службу DHCP:

# systemctl start dhcpd

Ставим службу в автозагрузку:

# systemctl enable dhcpd

Настройка DHCP сервера со скриптом, позволяет динамически обновлять DNS зоны (добавлять/удалять прямую и обратную запись) . Без скрипта на DHCP сервере и вообще без DHCP, добавляется только А запись, а PTR - нет.

 

15. Проверка работы вторичного сервера


Отключите первый сервер. И включите какой нибудь клиентский компьютер.

Он должен получить IP адрес автоматически, после чего вы сможете добавить компьютер в домен или авторизоваться на вторичном КД.

Можно проверить SID тестового пользователя AkeHayc:

# wbinfo --name-to-sid AkeHayc

S-1-5-21-3318868730-2373761998-2549699250-2604 SID_USER (1)

Выведенный SID должен быть одинаков на обоих контроллерах, проверьте этот номер на первичном сервере.

 

16. Настройка общей папки


Открываем файл /usr/local/samba/etc/smb.conf и добавляем в конец файла настройку. В примере доступ открыт всем пользователям домена.

# my share

[data]

path = /data

valid users = +"company.ru\users"

writable  = yes

browsable = yes

read only = no

guest ok = yes

public = yes

create mask = 0666

directory mask = 0777

Перечитаем конфиг Samba:

# smbcontrol all reload-config

 

17. Настройка прав на общею папку


Вообще, в официальном HOWTO Samba4 не рекомендуют держать файлы на контроллере домена, вот цитата:

Whilst the Domain Controller seems capable of running as a full file server, it is suggested that organisations run a distinct file server to allow upgrades of each without disrupting the other. It is also suggested that medium-sized sites should run more than one DC. It also makes sense to have the DC's distinct from any file servers that may use the Domain Controllers. Additionally using distinct file servers avoids the idiosyncrasies in the winbindd configuration on to the Active Directory Domain Controller. The Samba team do not recommend using the Domain Controller as a file server, the recommendation is to run a separate Domain Member with file shares.

То есть при обновлении Samba4, могут возникнуть проблемы и файловый сервер может перестать корректно функционировать. Но, я просто для примера, покажу один из вариантов создания общего ресурса (папки) и как разграничивать права.

Чтобы правильно выставлять права, потребуется настроить службу sssd (https://wiki.samba.org/index.php/Sssd). Это поможет видеть доменных пользователей и групп на ровне с системными.

Если вам не устраивает sssd, вы можете настроить другую аналогичную службу winbind или nslcd (https://wiki.samba.org/index.php/Nslcd).

Устанавливаем sssd:

# yum install realmd samba samba-common oddjob oddjob-mkhomedir sssd ntpdate ntp libini_config check-devel pam-devel libtalloc-devel libtdb-devel libtevent-devel libldb-devel libldb-devel libdhash-devel libcollection-devel libini_config-devel libpcre pcre-devel c-ares-devel glib2-devel dbus-devel libxslt-devel libxml2-devel xml-common docbook-style-xsl libsemanage-devel nss-devel -y

# ldconfig -v | grep sss

ldconfig: Can't stat /libx32: No such file or directory
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
libnss_sss.so.2 -> libnss_sss.so.2
libsss_nss_idmap.so.0 -> libsss_nss_idmap.so.0.1.0
libsss_idmap.so.0 -> libsss_idmap.so.0.4.0
libsss_sudo.so -> libsss_sudo.so
libnsssysinit.so -> libnsssysinit.so

Извлеките файл keytab из текущей конфигурации Kerberos.

Keytab – это файл который содержит Kerberos Principal (хост, пользователь и домен) и ключи шифрования (определяются из пароля Kerberos). Это файл применяется для аутентификации в инфраструктуре Kerberos (при этом не нужно вручную вводить логин и пароль). Служба sssd будет использовать keytab для аутентификации пользователей через протокол Kerberos.

# samba-tool domain exportkeytab /etc/krb5.sssd.keytab --principal=companypdc$

Делаем владельца файла пользователя root:

# chown root:root /etc/krb5.sssd.keytab

Даем разрешение, чтобы только владелец мог читать/записывать в файл:

# chmod 600 /etc/krb5.sssd.keytab

# vi /etc/sssd/sssd.conf

[sssd]
services = nss, pam
config_file_version = 2
domains = company.ru
[nss]
[pam]
[domain/company.ru]
# Using id_provider=ad sets the best defaults on its own
id_provider = ad
# In sssd, the default access provider is always 'permit'. The AD access
# provider by default checks for account expiration
access_provider = ad
# Uncomment to use POSIX attributes on the server
# ldap_id_mapping=true
# Uncomment if the client machine hostname doesn't match the computer object on the DC.
# ad_hostname = companypdc.company.ru
# Uncomment if DNS SRV resolution is not working
# ad_server = companypdc.company.ru
# Uncomment if the domain section is named differently than your Samba domain
# ad_domain = company.ru
# Enumeration is discouraged for performance reasons.
enumerate = true
# location of the keytab
krb5_keytab=/etc/krb5.sssd.keytab

Жирным помечены мои изменения.

На созданный файл ставим владельца root:

# chown root.root /etc/sssd/sssd.conf

И также даем разрешение владельцу файла на чтение/запись:

# chmod 600 /etc/sssd/sssd.conf

Добавьте sss в строчки passwd и group файла /etc/nsswitch.conf, чтобы система могла делать запрос к sss базе.

passwd:     files sss

group:      files sss

Поставьте службу sssd в автозагрузку:

# systemctl enable sssd

И запустите ее:

# systemctl start sssd

Теперь когда доменные пользователи видны с локальными, делаем простые проверки - три теста:

До начала тестовых проверок, сбросьте кэш sssd:

# sss_cache -UG

Тест 1: Вывод учетный записей через команду getent. Она покажет локальные и доменные учетные записи с posix атрибутами. Проверьте вывод, чтобы были все поля с данными из AD (UID, primaryGroup, homeDirectory, shell).

# getent passwd Administrator

demo1:*:10008:10513:demo1:/home/demo1:/bin/bash

Тест 2: Вывод групп через команду getent. А здесь мы должны увидеть локальные и доменные группы с posix атрибутами. Проверьте вывод чтобы он содержал все поля из AD (GID, members).

# getent group demo-group

demo-group:*:10015:demo1

Тест 3: Измените локального владельца (владелец/группа) на файла, укажите нового владельца из домена:

# touch /tmp/testfile

# chown Administrator:"Domain Users" /tmp/testfile

# ls -l /tmp/testfile

-rw-r--r-- 1   Administrator   Domain Users   0   30. Aug 19:30 /tmp/testfile

Если все прошло успешно, значить стала доступна возможность, по выставлению прав используя доменных пользователей или групп.

 

18. Репликация SYSVOL

Папка SYSVOL содержит групповые политики и другие важные данные для работы домена, если у вас появляется второй DC, вам необходимо ее копировать на новый контроллер.

В противном случае просто не будут работать правильно Групповые политики, сценарии входа, общие ресурсы и т.д..

Официальное How To Samba детально описывает репликацию папки SYSVOL через утилиту Rsync - https://wiki.samba.org/index.php/Rsync_based_SysVol_replication_workaround

 

19. Если у вас проблемы


Смотрите логи. Файлы логов лежат в разных каталогах.

Лог службы named (DNS) лежит в каталоге /var/named/data/

Лог службы dhcpd лежит в общем файле логов системы /var/log/messages

Лог самой Samba 4 можно найти в каталоге /usr/loca/samba/var/log.samba


0