Контроллер домена на Samba — CentOS 7
Samba давно умеет быть контроллером домена на предприятии — стабильно и нетребовательно. Да, по функциональности это уровень 2012R2, но далеко не везде нужны серьёзные леса доменов с Exchange и прочими дорогостоящими хотелками. Авторизовать пользователей, хранить о них информацию, играть групповыми политиками и раздавать адресную книгу по LDAP — всё это Samba делает без проблем.
Подготовка
Для начала стоит проработать вопрос с IP и DHCP — сервер в начало сети и так далее, тут уже на вкус и цвет.
На свежей машине прописываем корректное имя хоста:
vim /etc/sysconfig/network
HOSTNAME=dc
Если с SELinux не знакомы близко — пока можно отключить:
vim /etc/sysconfig/selinux
SELINUX=disabled
Так же поступаем с firewall, его можно настроить позже:
systemctl disable firewalld
systemctl stop firewalld
Ставим пакеты, нужные для сборки:
yum -y install gcc make wget python-devel gnutls-devel openssl-devel \
libacl-devel krb5-server krb5-libs krb5-workstation openldap-devel pam pam-devel
Сборка Samba
cd /tmp/
wget https://ftp.samba.org/pub/samba/samba-4.6.5.tar.gz
tar -xzvf samba-4.6.5.tar.gz
cd ./samba-4.6.5
./configure --enable-selftest --with-systemd
Смотрим, сколько ядер, и собираем с флагом -j (количество ядер + 1). У меня их 8, поэтому -j9:
make -j9
make -j9 install
Настройка Samba как контроллера домена
Копируем нужный конфиг Kerberos, сохранив старый:
mv /etc/krb5.conf /etc/krb5.conf_alt
cp /usr/local/samba/share/setup/krb5.conf /etc/krb5.conf
Готовим контроллер домена в интерактивном режиме:
/usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
Служба для systemd
cat > /etc/systemd/system/samba4.service <<'EOF'
[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
EOF
Включаем в автозапуск:
systemctl enable samba4
systemctl restart samba4
Проверяем аутентификацию NT:
/usr/local/samba/bin/smbclient -L localhost -U%
Настройка DNS
Правим resolv.conf:
vim /etc/resolv.conf
nameserver 127.0.0.1
Тестируем DNS:
host -t SRV _ldap._tcp.domain.local
host -t SRV _kerberos._udp.domain.local
host -t A dc.domain.local
Правим smb.conf
vim /usr/local/samba/etc/smb.conf
# Global parameters
[global]
workgroup = DOMAIN
realm = domain.local
netbios name = DC
server role = active directory domain controller
dns forwarder = 8.8.8.8
allow dns updates = nonsecure
nsupdate command = /usr/bin/nsupdate -g
[netlogon]
path = /usr/local/samba/var/locks/sysvol/domain.local/scripts
read only = No
write ok = Yes
[sysvol]
path = /usr/local/samba/var/locks/sysvol
read only = No
write ok = Yes
Kerberos
Делаем симлинк на конфиг Kerberos:
ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf
И правим его:
nano /etc/krb5.conf
[libdefaults]
default_realm = DOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
Проверяем получение билета:
kinit administrator@DOMAIN.LOCAL
Убираем ограничение на срок жизни пароля:
/usr/local/samba/bin/samba-tool domain passwordsettings set \
--complexity=off --min-pwd-length=6 --max-pwd-age=0
Проверяем билет:
klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.LOCAL
Обратные зоны DNS
/usr/local/samba/bin/samba-tool dns zonecreate dc.domain.local 0.168.192.in-addr.arpa
/usr/local/samba/bin/samba-tool dns add dc.domain.local 0.168.192.in-addr.arpa zzz PTR dc.domain.local
Готово.