Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
2
23:58, 30 сентября 2015

Samba 4 — доменный контроллер AD DC на CentOS 7

Blog post image

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

 

Эта записка содержит инструкцию по установке Samba 4 на операционную систему CentOS 7 x64. Пакет Samba 4 поможет организовать аналог доменного контроллера Windows 2003/2008 на Linux системе. Описанная инструкция взята из официального HOWTO SAMBA4.

Samba - это пакет программ, которые позволяют обращаться к сетевым дискам и принтерам на различных операционных системах. Например доступ к сетевой общей папке расположенной на компьютере Linux с машин Windows. Начиная с четвертой версии, Samba может выступать в роли доменного контроллера Active Directory.

 

Немного про основные параметры главного файла /usr/local/samba/etc/smb.conf для файлового сервиса:

idmap config EXAMPLEDOMAIN: backend = Тип хранения - Вы можете развернуть всего один домен (сервер) у себя в локальной сети. Все будут авторизовываться через ваш Samba4 сервер, такой сценарий самый простой и работающий. Обычно, при этом в настройках Samba, указывают backend - idmap_rid (https://www.samba.org/samba/docs/man/manpages/idmap_rid.8.html). При такой работе, уникальные идентификаторы SID групп и пользователей Windows будут сопоставляться с Linux идентификаторами UID/GID автоматически. Вам не надо будет задумываться о уникальности этих идентификаторов, все будет делать Samba. При использовании idmap_rid, вся информация о доменных учетных данных хранится локально в файле "idmap.ldb". Для небольших компаний, рекомендуется использовать эту возможность пакета Samba. Если вы заведете второй сервер, уникальность UID/GID будет нарушена. Например команда "id user_name" будет показывать разные значения на первом и втором сервере Samba. Чтобы использовать idmap_rid, укажите строчку idmap config EXAMPLEDOMAIN: backend = rid, и еще диапазон UID и GID для автоматического распределения SID в UID/GID. В случае если у вас два контроллера домена, вам придется использовать backend = ad (idmap config EXAMPLEDOMAIN: backend = ad). При использовании этого бэкенда, соответствие UID/GID, надо прописывать в оснастке "Управление пользователями и компьютерами". Обычно такая настройка делается на файловом сервере Linux.

 

rfc2307 - эта функция добавляет POSIX атрибуты (UID / GID) на схему AD. Это понадобится при аутентификации клиентов Linux, BSD, or OS X (в том числе на локальной машине) в дополнение к Microsoft Windows. Например, у вас в локалке 10 машин с Windows XP, и тут на тебе, появилась машина с Mac OS X. С помощью ключа rfc2307 можно вводить в домен Mac OS X и Linux.

При использовании двух доменов(серверов), желательно создавать домен с backend - rfc2307 (https://wiki.samba.org/index.php/RFC2307_backend). При этом данные в отличии от idmap_rid, будут хранится не в специальном файле, а в базе LDAP. Вот цитата из официального сайта Samba:

RFC2307 определяет возможность хранить данные о пользователях и группах в каталоге LDAP. Это дает централизованное управление и несколько преимуществ.

Иногда теряется уникальность номеров некоторых учетных записей. Чтобы восстановить уникальность идентификаторов, применяется утилита ldbedit с ключом -H. Чтобы использовать rfc2307, в конфиге Samba укажите - idmap_ldb:use rfc2307 = yes в глобальной секции [global].

Также к этим параметрам добавляют записи:

xattrs и acl - эти параметры включают расширенное использование атрибутов unix (ACLs) для файлов, размещенных на Linux машине (файловом или доменном контроллере). Файловые системы xfs и ext4 поддерживают эти параметры по умолчанию. Если вы не будете открывать доступ к файлам на Linux машине, пропустите эти аргументы. Вы также должны убедиться в том, что все иные файловые системы как ext3, к которым требуется открыть доступ через Samba, смонтированы с поддержкой ACL's. Например, мы хотим чтобы общие папки Windows пользователей хранились в разделе /home, в этом случае монтирование пользовательского раздела должно содержать опции acl, user_xattr, вот пример -

/home UUID=5be114a1-c145-4b44-aa01-69dcfc53e224 /home   ext3   user_xattr,acl,barrier=1 1     2

Здесь:

user_xattr – расширенные атрибуты файлов (используются для индексирования)
barrier – команда очистки кэша
acl - списки контроля доступа (ACL)
 

DNS сервер - пакет Samba4 включает свой встроенный DNS сервер (опция --dns-backend=SAMBA_INTERNAL). По умолчанию используется этот сервер, но есть возможность задействовать внешний DNS сервер Bind через DLZ плагин (dlz - динамически загружаемая зона), при этом зона DNS AD будет хранится в файле с расширением .ldb, Bind через плагин DLZ читает и записывает данные в этот файл. Помимо ldb, можно хранить зоны в текстовых файлах Bind, например "myzone.fwd.local" (опция --dns-backend=BIND9_ FLATFILE).

 

КРАТКОЕ СОДЕРЖАНИЕ

 

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

2. Отключаем SELINUX, IPtables и Network Manager

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

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

5. Создание нового домена

6. Настройка DDNS сервера

7. Редактируем юнит systemd для запуска Samba

8. Настройка DHCP сервера

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

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

11. Выставляем права на каталоги Samba

12. Создание обратной зоны DNS

13. Разные проверки правильности работы Samba4

14. Меняем срок жизни учетных записей до 999 дней

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

16. Дополнительные проверки

17. Управление контроллером - утилита RSAT

18. Итог

19. Образ жесткого диска и конфигурационные файлы тестовой системы

 


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

Домен -                   company.ru

Имя хост машины -  companypdc

ip-адрес сервера -   10.168.50.2

 

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

 

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

Открываем файл сетевого адаптера, чтобы внести туда наш статический IP адрес и другие реквизиты  - DNS, Gateway(шлюз) и т.д.

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

DEVICE=enp0s8                               # имя адаптера

HWADDR=08:00:27:04:5A:BD            # его аппаратный MAC адрес

TYPE=Ethernet                                 # тип Ethernet

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

NM_CONTROLLED=no                       # адаптер не контролируется службой Network Manager - иногда нужно включать

BOOTPROTO=static                          # признак статического  IP адреса

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

NETMASK=255.255.255.0               # сетевая маска

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

DNS1=8.8.8.8                               # Google public DNS

Также требуется прописать сетевое имя машины (Netbios), данное имя не должно быть больше 15 символов и содержать спец символы:

# vi /etc/hostname

hostname=companypdc

или

# hostnamectl set-hostname companypdc.company.ru

Проверка:

# hostname

companypdc.company.ru

# hostnamectl status

Static hostname: companypdc.company.ru

Icon name: computer-vm

Chassis: vm

Machine ID: c9892a1c02bc436a8c14ab9d9a72ccdd

Boot ID: c81ef8e2e003499b8cebb1861e1d9f89

Virtualization: kvm

Operating System: CentOS Linux 7 (Core)

CPE OS Name: cpe:/o:centos:centos:7

Kernel: Linux 3.10.0-229.el7.x86_64

Architecture: x86_64

Добавим основные хосты в файл /etc/hosts

# vi /etc/hosts

Добавляем три строчки, чтобы наш доменный контроллер корректно работал с именами хостов:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#10.168.50.5 filesrv.company.ru filesrv

10.168.50.2 companypdc.company.ru companypdc

#10.168.50.3 sdc.company.ru sdc

Жирным шрифтом помечены мои изменения в этом файле.

Не помешает отключить IPv6 и иногда включить сеть:

# vi /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

Перезапускаем сетевую службу, чтобы внесенные настройки вступили в силу:

# systemctl restart network

 

2. Отключаем SELinux, IPtables и NetworkManager

SELinux (SELinux) — это система принудительного контроля доступа, реализованная на уровне ядра. Даже работая под администратором, система контроля доступа на основе базовых политик, запрещает работу многих свеже установленных программ, в нашем случае это Samba4. То есть новая поставленная программа, например, не может изменять, создавать свои файлы, а также манипулировать настройками системы. Этот дополнительный барьер безопасности, который защищает настройки системы и данные от неряшливого пользователя и непонятных программ. Не зря ее придумали в АНБ :)

У вас есть два варианта:

  1. Отключить систему дополнительной защиты
  2. Настроить Selinux для работы с новыми программами

Я отключу Selinux, так как это самый простой способ, чтобы новые установленные программы заработали сразу. Настройка этой системы для работы с Samba4 - это отдельная тема для разговора.

# vi /etc/selinux/config

selinux=disabled

Применяем настройки без перезагрузки компьютера:

# setenforce 0

IPTables — это утилита командной строки, которая является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) встроенного в ядро Linux. Мой доменный контроллер не имеет прямого доступа в интернет, он уже находится за брандмауэром. Поэтому был отключен сетевой экран, хотя вы можете его настроить, также как и SELinux. В новой операционной системе CentOS 7, IPTables была заменена на утилиту FirewallD, которая предоставляет функционал динамически управляемого брандмауэра с поддержкой сетевых зон, призванных определить уровень доверия для сетевого соединения или интерфейса. Многие отключают и удаляют FirewallD, и вместо него ставят уже привычный IPTables, так как функционал FirewallD пока еще не умеет многого. Для тестового запуска Samba4, не нужен IPTables или FirewallD, поэтому отключаем сетевой экран.

Выключаем автозагрузку демона во время загрузки ОС:

# systemctl disable firewalld

Приостанавливаем работу

# systemctl stop firewalld

Еще, стоит отключить Network Manager, эта служба облегчает настраивать сетевые адаптеры на пользовательском компьютере, может автоматически создавать подключение к разным сетям. И иногда, даже на сервере от нее есть толк. В нашем случае она бесполезна, сервер Samba не нуждается в экзотической настройке подключения к какому либо провайдеру, он скрыт в локальной сети. Поэтому давайте отключим NM - она лишняя.

Проверяем работает ли Network Manager:

# systemctl --type=service | grep NetworkManager

NetworkManager.service             loaded active running Network Manager

# systemctl disable NetworkManager

rm '/etc/systemd/system/multi-user.target.wants/NetworkManager.service'

rm '/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service'

rm '/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service'

# systemctl stop NetworkManager

 

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

 

Для правильной работы Samba4, нужны вспомогательные программы, установим зависимости:

# 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 python-dns  -y

 

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

 

Загрузим архивный файл с последней версией Samba4:

# wget https://download.samba.org/pub/samba/stable/samba-4.5.0.tar.gz

На ftp сервере http://ftp.samba.org/pub/samba/ постоянно появляются новые версии, проверяйте наличие новой версии, прежде чем устанавливать Samba4.

Распакуем архив:

# tar -xzvf samba-4.5.0.tar.gz

Зайдем в него:

# cd samba-4.5.0/

И выполним команду для настройки перед компиляцией исходников Samba4:

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

Здесь параметр --enable-selftest позволяет запустить тестирование после создания готовой Samba4 (бинарников). Скрипт configure имеет развернутую справку, которую можно вызвать так:

./configure --help

Из справки можно узнать какие функции по умолчанию включены и какие отключены. Возле каждой возможности указано (YES) или (NO).

Например: --with-ads (YES) --with-systemd (NO) --with-winbind (YES)

После выполнения конфигурирования, на экране должна должна появиться строка о успешности выполнения операции:

'configure' finished successfully (1m20.718s)

Скрипт "configure" подготавливает исходники для компиляции. Настраивает их, пытаясь правильно выставить значения для различных переменных, меняющихся от системы к системе и используемых в процессе компиляции. Он поменяет переменные в исходниках, также вы можете немного подкорректировать configure, запуская его с дополнительными опциями, как было показано на верху. Скрипт не определил что наша ОС с systemd, и не включил возможность работы с systemd в исходниках. Поэтому я в ручную включил опцию для работы Samba4 с systemd. В конце команда configure также выводит суммарную сводку о включенных и выключенных дополнительных опциях, включая причины почему опция была выключена. После как configure отработал, внутри исходников поменяются переменные и они будут готовы к компиляции и установке.

А теперь можно запустить компиляцию и установку Samba4 командой:

# make && make install

Процесс компиляции и установки занимает много времени. У меня это 20 минут.

 

Добавляем каталог 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

 

5. Создание нового домена

 

# /usr/local/samba/bin/samba-tool domain provision --realm=company.ru --domain=COMPANY --adminpass 'MyPassword123' --server-role=dc --dns-backend=BIND9_DLZ --use-rfc2307 --use-ntvfs --use-xattrs=yes

Разберем команду более подробно:

/usr/local/samba/bin/samba-tool domain provision - собственно команда для создания доменного контроллера, в Windows Server есть аналогичная команда - dcpromo.

--realm=company.ru  - полное название имя домена (FQDN)

--domain=COMPANY - короткое название домена большими буквами

--server-role=dc - роль DC - контроллер домена

-host-ip=10.168.50.2 - привязка к указанному IP адресу, если вас два адаптера, указываете на каком интерфейсе работать Samba

--adminpass 'MyPassword123' - указываете пароль для учетной записи доменного администратора "Administrator"

--dns-backend=BIND9_DLZ - указываем использовать внешний DNS сервер Bind через плагин DLZ

--use-rfc2307 - указываем хранить дополнительные POSIX атрибуты в LDAP каталоге

--use-ntvfs - указываем использовать файловый сервис NTVFS, по умолчанию в Samba4 включен именно он. Также вы можете указать файловый сервис от Samba3 - s3fs.

--use-xattrs=yes - включает расширенные атрибуты unix (acls)

 

6. Настройка DDNS сервера

 

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

Утилита 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.2; 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"; };

};

# Ключ можно взять из файл /etc/rndc.key в поле secret "key"

key "rndc-key" {

algorithm hmac-md5;

secret "Og9ls220K+4zO3N3YAvZXg==";

};

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.2; 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 "7028ANZBdRiP/KXv9DNBvQ==";

};

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 127.0.0.1 # Первый вариант

#или второй вариант если первый не работает и вы получаете ошибку "/source4/dsdb/dns/dns_update.c:295: Failed DNS update - NT_STATUS_ACCESS_DENIED"

#DNS1=127.0.0.1

 

И убрать внешний 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.2      # 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, чтобы настройки начали работать.

# systemctl restart network

# systemctl restart named

Желательно в /etc/crontab вставить строчку:

4 2,5,8,11,14,17,20,23 * * * /usr/bin/kinit -R administrator@COMPANY.RU

 

7. Редактируем юнит systemd для запуска Samba

 

С помощью юнита, происходит запуск или остановка службы Samba4.

Создайте файл "/etc/systemd/system/samba.service". После чего, внесите текст, который вы видите внизу:

# 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 4 через созданный юнит:

# systemctl start samba4

 

8. Настройка 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 companypdc.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 {
##### Begin Dynamic DHCP #####
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");
##### End Dynamic DHCP #####
}
# --- 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.2, 10.168.50.3;
option time-offset              10800;   # FET
option ntp-servers              10.168.50.2;
option netbios-name-servers     10.168.50.2;
# --- 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.50 10.168.50.149;
default-lease-time 1728000;
max-lease-time 1728000;
allow booting;
allow bootp;
next-server 10.168.50.2;
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=companypdc

realm=COMPANY.RU

domain=company.ru

keytab=/var/lib/dhcp/dhcp.keytab

time=3600

kname=dhcp

Создадим пользователя dhcp со случайным паролем, через этого пользователя будет обновляться зона DNS:

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

Добавим его в группу DnsUpdateProxy:

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

Работа DHCP сервера с Samba будет идти через ключ кейтаб:

Создадим каталог для ключа

# mkdir /var/lib/dhcp/

Вместо COMPANY.RU укажите свой REALM

# /usr/local/samba/bin/samba-tool domain exportkeytab --princ 'dhcp@COMPANY.RU' -N /var/lib/dhcp/dhcp.keytab

# 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 - нет.

Обратная запись (PTR) может добавляться динамически, в случае, если на клиенте (например Windows XP), указать в настройках сетевого адаптера (TCP-IP протокола) -

Использовать DNS-суффикс подключения при регистрации DNS (Use this connection's DNS suffix in DNS registration)


Blog post image
 

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

 

Kerberos — сетевой протокол аутентификации, позволяющий передавать данные через незащищённые сети для безопасной идентификации. Более подробно узнать об этом протоколе можете в статье на Wikipedia Kerberos. Этот протокол занимает важное место, так как он обеспечивает инфраструктуру для аутентификации пользователей (для входа в систему, для использования сетевых ресурсов по протоколу SMB и доступа в Интернет через прокси-сервер).

# cp /etc/krb5.conf /etc/krb5.conf.orig && :> /etc/krb5.conf

# vi /etc/krb5.conf

[libdefaults]

default_realm = COMPANY.RU

dns_lookup_realm = false

dns_lookup_kdc = true

 

10. Установка и настройка 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

Если вдруг не работает NTP - время не становится актуальным, повысьте значение "stratum", хотя текущее значение и так рабочее.

 

11. Выставляем права на каталоги Samba

 

Для корректной работы Samba, сделайте владельцем каталога "/usr/local/samba/private/dns" и файла "/usr/local/samba/private/dns.keytab", пользователя named (Bind).

# chown named:named /usr/local/samba/private/dns

# chown named:named /usr/local/samba/private/dns.keytab

А также дайте всем другим полные права на каталог "/usr/local/samba/private/dns".

# chmod 775 /usr/local/samba/private/dns

И еще:

# chown named:root /etc/rndc.key

# chmod 600 /etc/rndc.key
 

Стартуем демон Samba, ntp и named:

# systemctl start named

# systemctl start ntpd

# systemctl start samba4

Ставим их в автозагрузку:

# systemctl enable named

# systemctl enable samba4

# systemctl enable ntpd

Проверка ответственных демонов:

# systemctl status samba4

Nov 16 19:50:02 companypdc.company systemd[1]: PID file /usr/local/samba/var/run/samba.pid not readable (yet?) after start.
Nov 16 19:50:02 companypdc.company systemd[1]: Started Samba 4 Active Directory.
Nov 16 19:50:02 companypdc.company samba[2103]: [2016/11/16 19:50:02.556028,  0] ../source4/smbd/server.c:485(binary_smbd_main)
Nov 16 19:50:02 companypdc.company samba[2103]:   samba: using 'standard' process model
Nov 16 19:50:02 companypdc.company samba[2103]: [2016/11/16 19:50:02.656602,  0] ../lib/util/become_daemon.c:124(daemon_ready)
Nov 16 19:50:02 companypdc.company samba[2103]:   STATUS=daemon 'samba' finished starting up and ready to serve connections
Nov 16 19:50:02 companypdc.company winbindd[2116]: [2016/11/16 19:50:02.962518,  0] ../source3/winbindd/winbindd_cache.c:3245(initialize_winbindd_cache)
Nov 16 19:50:02 companypdc.company winbindd[2116]:   initialize_winbindd_cache: clearing cache and re-creating with version number 2
Nov 16 19:50:03 companypdc.company winbindd[2116]: [2016/11/16 19:50:03.989630,  0] ../lib/util/become_daemon.c:124(daemon_ready)
Nov 16 19:50:03 companypdc.company winbindd[2116]:   STATUS=daemon 'winbindd' finished starting up and ready to serve connections

# systemctl status ntpd

Jul 10 20:01:08 companypdc.company systemd[1]: Starting Network Time Service...

Jul 10 20:01:09 companypdc.company ntpd[570]: ntpd 4.2.6p5@1.2349-o Tue May 31 10:28:54 UTC 2016 (1)

Jul 10 20:01:09 companypdc.company ntpd[575]: proto: precision = 0.108 usec

Jul 10 20:01:09 companypdc.company ntpd[575]: 0.0.0.0 c01d 0d kern kernel time sync enabled

Jul 10 20:01:09 companypdc.company ntpd[575]: MS-SNTP signd operations currently block ntpd degrading service to all clients.

Jul 10 20:01:09 companypdc.company ntpd[575]: getaddrinfo: "0.pool.ntp.org" invalid host address, ignored

Jul 10 20:01:09 companypdc.company ntpd[575]: restrict: error in address '0.pool.ntp.org' on line 11. Ignoring...

Jul 10 20:01:09 companypdc.company ntpd[575]: getaddrinfo: "1.pool.ntp.org" invalid host address, ignored

Jul 10 20:01:09 companypdc.company ntpd[575]: restrict: error in address '1.pool.ntp.org' on line 12. Ignoring...

Jul 10 20:01:09 companypdc.company systemd[1]: Started Network Time Service.

# systemctl status named

● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2016-07-10 20:01:26 +06; 4 months 7 days ago
Process: 1227 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
Process: 853 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1383 (named)
CGroup: /system.slice/named.service
└─1383 /usr/sbin/named -u named
Jul 10 20:01:26 companypdc.company named[1383]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
Jul 10 20:01:26 companypdc.company named[1383]: zone 'version.bind' allows updates by IP address, which is insecure
Jul 10 20:01:26 companypdc.company named[1383]: zone 'hostname.bind' allows updates by IP address, which is insecure
Jul 10 20:01:26 companypdc.company named[1383]: zone 'authors.bind' allows updates by IP address, which is insecure
Jul 10 20:01:26 companypdc.company named[1383]: zone 'id.server' allows updates by IP address, which is insecure
Jul 10 20:01:26 companypdc.company named[1383]: command channel listening on 127.0.0.1#953
Jul 10 20:01:26 companypdc.company named[1383]: managed-keys-zone: loaded serial 50
Jul 10 20:01:26 companypdc.company named[1383]: all zones loaded
Jul 10 20:01:26 companypdc.company named[1383]: running
Jul 10 20:01:26 companypdc.company systemd[1]: Started Berkeley Internet Name Domain (DNS).
 

12. Создание обратной зоны DNS

 

Обратная зона не создается автоматически, поэтому ее нужно создать в ручную.

Логинимся под Администратором:

# kinit Administrator

И создаем обратную зону:

# /usr/local/samba/bin/samba-tool dns zonecreate companypdc 50.168.10.in-addr.arpa

Добавляем в нее адрес нашего доменного контроллера:

# /usr/local/samba/bin/samba-tool dns add companypdc 50.168.10.in-addr.arpa 2 PTR companypdc.company.ru

 

13. Разные проверки правильности работы Samba4

 

Проверка уровня домена:

# /usr/local/samba/bin/samba-tool domain level show

Domain and forest function level for domain 'DC=company,DC=ru'

Forest function level: (Windows) 2008 R2

Domain function level: (Windows) 2008 R2

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

Доступность общих папок sysvol, netlogon на сервере Samba4:

# /usr/local/samba/bin/smbclient -L localhost -U%

Domain=[COMPANY] OS=[Windows 6.1] Server=[Samba 4.3.0]

Sharename       Type      Comment

---------       ----      -------

netlogon        Disk

sysvol          Disk

IPC$            IPC       IPC Service (Samba 4.3.0)

Domain=[COMPANY] OS=[Windows 6.1] Server=[Samba 4.3.0]

Server               Comment

---------            -------

Workgroup            Master

---------            -------

Вход в папку netlogon под администратором и проверка ее содержимого:

# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%'MyPassword123' -c 'ls'

Domain=[COMPANY] OS=[Windows 6.1] Server=[Samba 4.3.0]

.                                   D        0  Thu Oct  1 00:37:46 2015

..                                  D        0  Thu Oct  1 00:38:00 2015

82756116 blocks of size 1024. 80956020 blocks available

Проверка авторизации через Kerberos - работает ли наш Kerberos:

# kinit Administrator@COMPANY.RU

Password for Administrator@COMPANY.RU:

Warning: Your password will expire in 41 days on Sat 21 Nov 2015 10:32:05 AM EST

Здесь написано, что учетная запись администратора действительная в течении 41 дня.

 

14. Меняем срок жизни учетных записей до 999 дней

 

# /usr/local/samba/bin/samba-tool domain passwordsettings set --max-pwd-age=999

или по хорошему, лучше вовсе убрать срок жизни учетной записи и сложные пароли:

# /usr/local/samba/bin/samba-tool domain passwordsettings set --complexity=off --min-pwd-length=6 --max-pwd-age=0

Проверяем:

# /usr/local/samba/bin/samba-tool domain passwordsettings show | grep Max

Maximum password age (days): 999

 

Проверяем полученный билет для учетной записи Administrator:

# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: Administrator@COMPANY.RU

Valid starting       Expires              Service principal

10/10/2015 12:39:15  10/10/2015 22:39:15  krbtgt/COMPANY.RU@COMPANY.RU

renew until 10/11/2015 12:39:12

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

# host -t SRV _ldap._tcp.company.ru.

_ldap._tcp.company.ru has SRV record 0 100 389 companypdc.company.ru.

# host -t SRV _kerberos._udp.company.ru.

_kerberos._udp.company.ru has SRV record 0 100 88 companypdc.company.ru.

# host -t A companypdc.company.ru.

companypdc.company.ru has address 10.168.50.2

Проверка динамического обновления зоны DNS:

# /usr/local/samba/sbin/samba_dnsupdate --verbose --all-names

 

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

 


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

Надо обязательно поставить свой часовой пояс и время. А то Kerberos не даст войти в домен Active Directory.

# 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

И сервер обновления времени:

# ntpq -pn

Добавляем первого пользователя с именем "AkeHayc" и задаем пароль:

# /usr/local/samba/bin/samba-tool user add AkeHayc

New Password:

Retype Password:

User 'AkeHayc' created successfully

Проверка ролей FSMO:

# /usr/local/samba/bin/samba-tool fsmo show

 

16. Дополнительные проверки

 

Вывод на экран полной конфигурации Samba4:

# testparm

Load smb config files from /usr/local/samba/etc/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[netlogon]"
Processing section "[sysvol]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC
Press enter to see a dump of your service definitions
# Global parameters
[global]
workgroup = COMPANY
realm = company.ru
server role = active directory domain controller
passdb backend = samba_dsdb
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
rpc_server:tcpip = no
rpc_daemon:spoolssd = embedded
rpc_server:spoolss = embedded
rpc_server:winreg = embedded
rpc_server:ntsvcs = embedded
rpc_server:eventlog = embedded
rpc_server:srvsvc = embedded
rpc_server:svcctl = embedded
rpc_server:default = external
winbindd:use external pipes = true
idmap config * : backend = tdb
map archive = No
map readonly = no
store dos attributes = Yes
vfs objects = dfs_samba4 acl_xattr
[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

Вывод членства машины в AD:

# wbinfo -t

checking the trust secret for domain COMPANY via RPC calls succeeded

Вывод списка пользователей AD:

# wbinfo -u

COMPANY\dns-companypdc

COMPANY\administrator

COMPANY\akehayc

COMPANY\krbtgt

COMPANY\guest

Вывод списка групп AD:

# wbinfo -g

COMPANY\cert publishers

COMPANY\ras and ias servers

COMPANY\allowed rodc password replication group

COMPANY\denied rodc password replication group

COMPANY\dnsadmins

COMPANY\enterprise read-only domain controllers

COMPANY\domain admins

COMPANY\domain users

COMPANY\domain guests

COMPANY\domain computers

COMPANY\domain controllers

COMPANY\schema admins

COMPANY\enterprise admins

COMPANY\group policy creator owners

COMPANY\read-only domain controllers

COMPANY\dnsupdateproxy

Аналогичные команды утилиты samba-tool:

Выводим список пользователей и групп домена company.ru

#  /usr/local/samba/bin/samba-tool user list

#  /usr/local/samba/bin/samba-tool group list

 

17. Управление контроллером - утилита RSAT

 

Управлять доменным контроллером на Linux можно с Windows машины или в консоле на самом сервере.  Можно управлять все и вся, кроме DHCP сервера. Удобней конечно это делать через RSAT, для этого скачайте ее по следующей ссылке:

Windows 7: http://www.microsoft.com/en-us/download/details.aspx?id=7887

Если Windows XP, то понадобиться ATP (Administration Tools Pack): http://www.microsoft.com/en-us/download/details.aspx?id=16770

Вводим машину с Windows XP SP3 в Active Directory, для этого нужно вывести свойство "Мой компьютер":

Blog post image

Вводим логин Administrator, пароль MyPassword123

Blog post image

Blog post image

После чего выйдет окошко, в котором нас оповещают, что компьютер вошел в домен company.ru. Эта операция требует перезагрузки ПК.

Blog post image

Заходим под админом и запускаем оснастку Active Directory Users and Computers:

Blog post image

 

Blog post image

18. Итог

 

Сервер Active Directory настроен, теперь можно поднять вторичный сервер для отказоустойчивости - http://yvision.kz/post/577878.

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

1. Бесплатное ПО на котором поднят доменный контроллер

2. Единая [центральная] база учетных записей пользователей.  Доступ на такие сервисы как Интернет, общие папки и т.д. разрешается с помощью нее. Что облегчает работу системного администратора.

3. Защищенность пользовательских компьютеров от вирусов, вследствие использования учетных записей с ограниченными правами (группа "Пользователи").

4. Единая контактная база сотрудников, контрагентов и  дочерних предприятий. По мимо локальной адресной книги в Outlook, есть возможность задействовать адресную книгу находящеюся в каталоге AD.

5. Простое управление объектами доменного контроллера через ADUC (Active Directory Users and Computers).

6. Создание доверительных отношений через сайты

 

Минусы:

1. Управление DHCP сервером производится руками (файл /etc/dhcp/dhcpd.conf)

2. Не работает DFSR (распределенная файловая система, аналог GlusterFS)

3. Нет интеграции с другими продуктами MS Exchange, Sharepoint, Project Server и т.д.

4. С доменным контроллером могут работать клиентские версии Windows Pro и выше. А это стоит денег...

 

19. Образ жесткого диска и конфигурационные файлы тестовой системы

 

Выложил на файло-обменник  файлы настроек:

http://ifolder.su/44422626

Образ HDD для VBOX:

http://ifolder.su/44439623

Пароль root - 1

Пароль доменного админа - MyPassword123

Конфигурация: CentOS 7 x64, RAM 768, две сетевые карты WAN -10.0.10.10/LAN 10.168.50.2

 

ИСТОЧНИКИ

 

http://habrahabr.ru/post/216173/#comment_7453543 и http://habrahabr.ru/post/216173/#comment_7452213

http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/

http://wiki.samba.org/index.php/Samba4/HOWTO/Join_a_domain_as_a_DC

http://alexwyn.com/computer-tips/centos-samba4-active-directory-domain-controller

https://www.vgpgk.vrn.ru/?q=node/783

http://manpages.ubuntu.com/manpages/trusty/man8/idmap_rfc2307.8.html

http://sadiquepp.blogspot.com/2008/02/authenticating-linux-to-ad-using.html

https://wiki.archlinux.org/index.php/Samba_4_Active_Directory_domain_controller_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

DDNS DHCP - http://wiki.opennet.ru/Dhcp_%D0%B8_ad/samba4

DDNS DHCP - http://pathtoself.name/extras/2015/06/AD-SLES11.html

Русский перевод Samba Wiki:

http://smb-conf.ru/samba4-addc.html

Установка на CentOS 7 - http://wiki.icess.ucsb.edu/stadm/AD_Samba4_Centos_7

http://www.k-max.name/windows/samba-in-domain-active-directory/

http://evil.org.ua/article/samba-4-v-kachestve-kontrollera-domena.html

Настройка dhcp - http://www.thejonas.net/?page_id=565

Bind Samba4 управление - https://wiki.samba.org/index.php/DNS_administration#Administering_DNS_on_Linux.2FUnix

Secure DHCP and DDNS - http://blog.michael.kuron-germany.de/2011/02/isc-dhcpd-dynamic-dns-updates-against-secure-microsoft-dns/

Shares with ACL's - https://wiki.samba.org/index.php/Shares_with_Windows_ACLs

Samba4 as BDC - http://www.golinuxhub.com/2014/02/how-to-configure-samba-4-secondary.html

Sysvol replication - https://wiki.samba.org/index.php/SysVol_Replication

WIKI - http://wiki.indie-it.com/wiki/Samba

Samba сервер для 25000 человек - http://habrahabr.ru/post/172115/

Файловое хранилище на Ubuntu - help.ubuntu.ru/wiki/файловый_сервер_для_windows

Настройка на Ubuntu перемещаемые профили и авторизация Linux, ejabered и т.д. -

http://www.stefanwienert.de/blog/2014/07/02/samba-4-active-directory-controller-with-windows-7-roaming-profiles-plus-linux-login-the-definitive-guide/

Сопоставления идентификаторов SID UID

Наш ответ санкциям США+Microsoft. Снеси Windows! Разверни домен на SAMBA 4

2