Записки системного администратора

Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.

Samba4 в роли AD

В этой статье будет рассмотрена по шагам подготовка к использованию Samba4 в роли контроллера домена. Установка производится на сервере под управлением операционной системы CentOS7.

В официальном репозитории CentOS7 предоставляется Samba без поддержки DC, поэтому необходимо скачать Samba RPM package с сайта EnterpriseSAMBA http://enterprisesamba.com/

Sernet производит сборку самбы для нескольких дистрибутивов — Debian, Ubuntu, RHEL, CentOS, SLES, openSUSE. Я использовал Samba версии 4.2.

Установка необходимых пакетов

Для того, чтобы скачать Samba RPM package, необходимо выполнить следующее:

  1. Зарегистрироваться на https://portal.enterprisesamba.com/
  2. После регистрации необходимо войти под только что созданным пользователем.
  3. После того, как вы вошли, на сайте будут отображены username и accesskey. Эти данные необходимо запонить, они понадобятся при настройке подключения репозитория.
  4. Далее скачиваем файл sernet-samba-4.2.repo для CentOS7, помещаем его в /etc/yum.repos.d/ и добавляем наши username и accesskey.

В итоге файл будет содержать следующее:

# cat /etc/yum.repos.d/sernet-samba-4.2
[sernet-samba-4.2]
name=SerNet Samba 4.2 Packages (centos-7)
type=rpm-md
baseurl=https://sernet-samba-public:Noo1oxe4zo@download.sernet.de/packages/samba/4.2/centos/7/
gpgcheck=1
gpgkey=https://sernet-samba-public:Noo1oxe4zo@download.sernet.de/packages/samba/4.2/centos/7/repodata/repomd.xml.key
enabled=1

Далее производим установку Samba4:

# yum install sernet-samba sernet-samba-ad 

В прошлой статье я говорил, что дефолтный файрвол в CentOS 7 мне не удобен, поэтому я его удаляю:

# systemctl stop firewalld
# systemctl disable firewalld
# yum erase firewalld

Также я отключил SELinux за ненадобностью:

# setenforce 0

Чтобы после перезагрузки сервера снова не включился selinux правим файл /etc/selinix/config:

...
SELINUX=disabled
...

Доустанавливаем необходимые пакеты:

# yum install iptables-services bind bind-utils ntp krb5-workstation cups

Добавляем в автозагрузку следующие службы:

# systemctl enable sernet-samba-ad
# systemctl enable sernet-samba-smbd
# systemctl enable sernet-samba-nmbd 
# systemctl enable sernet-samba-winbindd
# systemctl enable iptables
# systemctl enable named
# systemctl enable ntpd
# systemctl enable cups

Настройка сети и iptables

В моей сети не используется IPv6, поэтому отключаем:

# sysctl -w net.ipv6.conf.all.disable_ipv6=1
# echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf

Для правильной работы Samba4 в роли AD в iptables необходимо внести следующие настройки:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 88 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 135 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 389 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 464 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 636 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 88 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 389 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 464 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -d 10.127.3.8 -m multiport --ports 1024:6000 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp -d 10.127.3.8 -m multiport --ports 1024:6000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Где:

  • 10.127.3.8 - IP-адрес нашего контроллера домена

Запускаем iptables:

# systemctl start iptables

Создание домена example.local

Удаляем конфигурационный файл smb.conf:

# rm -f /etc/samba/smb.conf

Копируем файл krb5.conf:

# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

В состав Samba4 входит утилита samba-tool для создания и администрирования домена. Запускаем в интерактивном режиме эту утилиту:

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

и отвечаем на вопросы:

  • Realm [EXAMPLE.LOCAL]: EXAMPLE.LOCAL ←- название домена
  • Domain [EXAMPLE]: EXAMPLE ←- короткое имя домена
  • Server Role (dc, member, standalone) [dc]: dc ←- роль сервера (в данном случаем dc - контроллер домена)
  • DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ ←- используемый DNS-сервер
  • Administrator password:
  • Retype password:

Пароль администратора должен соответствовать стандартным политикам паролей в Windows, т.е. иметь как минимум одну маленькую и одну большую буквы, а так же цифры, плюс минимум 8 символов.

Поднимем уровень домена до 2008 R2:

# samba-tool domain level raise --domain-level 2008_R2 --forest-level 2008_R2 
Domain function level changed!
Forest function level changed!
All changes applied successfully!   

# samba-tool domain level show 
Domain and forest function level for domain 'DC=example,DC=local'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

В результате получился файл /etc/samba/smb.conf со следующим содержимым:

# Global parameters
[global]
    workgroup = EXAMPLE
    realm = EXAMPLE.LOCAL
    netbios name = NEWAD
    server role = active directory domain controller
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
    idmap_ldb:use rfc2307 = yes

[netlogon]
    path = /var/lib/samba/sysvol/example.local/scripts
    read only = No

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

Нужно подправить файл /etc/default/sernet-samba. Правим строчку SAMBA_START_MODE= на следующую:

SAMBA_START_MODE="ad"

В качестве DNS-сервера у меня ипсользуется bind9. Производим его настройку:

# vi /etc/named.conf

Приводим его к следующиму виду:

options {
    directory "/var/cache/bind";
    auth-nxdomain yes;
    allow-transfer { none; };
    notify no;
    empty-zones-enable no;

    allow-query {
            10.127.3.0/24;
            127.0.0.0/8;
    };

    allow-recursion {
            10.127.3.0/24;
            127.0.0.0/8;
    };

    allow-update {
            10.127.3.0/24;
            127.0.0.0/8;
    };

tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
};        

include "/var/lib/samba/private/named.conf";

Указываем Samba4 использовать в качестве DNS-сервера bind:

# nano /var/lib/samba/private/named.confdlz 
...
"AD DNS Zone" {
# For BIND 9.8.x
# database "dlopen /usr/lib64/samba/bind9/dlz_bind9.so";

# For BIND 9.9.x
 database "dlopen /usr/lib64/samba/bind9/dlz_bind9_9.so";

# For BIND 9.10.x
# database "dlopen /usr/lib64/samba/bind9/dlz_bind9_10.so";
};

Правим настройки DNS-сервера на сетевом интерфейсе eth0:

# less /etc/sysconfig/network-scripts/ifcfg-eth0
...
DNS1=10.127.3.8
...

# ifdown eth0 && ifup eth0

Запускаем:

# systemctl start cups
# systemctl start ntpd
# systemctl start named
# systemctl start sernet-samba-ad

Проверка Samba4 AD

Проверяем работоспособность аутентификации в домене:

# kinit administrator@EXAMPLE.LOCAL
Password for administrator@EXAMPLE.LOCAL: 
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@EXAMPLE.LOCAL

Valid starting       Expires              Service principal
30.11.2015 13:14:35  30.11.2015 23:14:35  krbtgt/EXAMPLE.LOCAL@EXAMPLE.LOCAL
    renew until 01.12.2015 13:14:28
# 
...

# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password: 
Domain=[EXAMPLE] OS=[Windows 6.1] Server=[Samba 4.2.3-SerNet-RedHat-18.el7]
  .                                   D        0  Fri Aug 21 09:44:46 2015
  ..                                  D        0  Fri Aug 21 09:44:54 2015

    39277836 blocks of size 1024. 37868308 blocks available

Если вывод введенных команд примерно такой же, Samba4 в роли контроллера домена настроен правильно. Теперь можно вводить в этот домен сервер на Windows Server 2008 R2, установить оснастку управления Active Directory и тут уже создавать группы безопасности, пользователей.

Настройка групповых политик паролей в Samba4

Через стандртые средства управления групповыми политиками MS Windows невозможно изменить политики паролей, и делается это только на сервере с Samba4.
Для того, чтобы увидеть текущие параметры политик, выполняем следующее:

# samba-tool domain passwordsettings show
Password informations for domain 'DC=example,DC=local'

Password complexity: off
Store plaintext passwords: off
Password history length: 0
Minimum password length: 0
Minimum password age (days): 0
Maximum password age (days): 0
Account lockout duration (mins): 30
Account lockout threshold (attempts): 0
Reset account lockout after (mins): 30

Для настройки этих политик используется параметр set и опция к нему. К примеру:

# samba-tool domain passwordsettings set --min-pwd-length=0

Minimum password length changed!
All changes applied successfully!

Таким образом мы изменили минимальную длину пароля на 0.

Список возможных параметров после set :

-H - Помощь
--quiet -выход
--complexity=on|off|default - Пароль должен отвечать требованиям сложности
--store-plaintext=on|off|default - Хранить пароли используя обратимое шифрование
--history-length=число - Число хранимых предыдущих паролей пользователей(Требовать неповторяемость паролей)
--min-pwd-length=число - Минимальное количество символов в пароле
--min-pwd-age=число - Минимальный срок действия пароля
--max-pwd-age=число - Максимальный срок действия пароля

Для понимания процесса настройки я использовал следующие материалы:

HTML Preview:

Коротко о себе:

Привет! Меня зовут Вадим. В этом блоге я пишу об интересующих меня вещах, о проблемах, с которыми сталкиваюсь во время работы, и о путях их решения.

Связаться со мной можно, написав письмо на адрес vadim@adminbook.click