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
Здесь:
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
Проверка:
companypdc.company.ru
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. То есть новая поставленная программа, например, не может изменять, создавать свои файлы, а также манипулировать настройками системы. Этот дополнительный барьер безопасности, который защищает настройки системы и данные от неряшливого пользователя и непонятных программ. Не зря ее придумали в АНБ :)
У вас есть два варианта:
- Отключить систему дополнительной защиты
- Настроить 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 DirectoryAfter=syslog.targetAfter=network.target[Service]Type=forkingPIDFile=/usr/local/samba/var/run/samba.pidExecStart=/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 updatedprimary 127.0.0.1;key rndc-key;}zone 50.168.10.in-addr.arpa. { # Backward zone to be updatedprimary 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 failsexecute("/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 packetlog(concat("Expired: IP: ", ClientIP));# cannot get a ClientName here, for some reason that always failsexecute("/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; # FEToption 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 welloption 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 addresshost 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/shaction=$1ip=$2host=$(echo $3 | awk -F '.' '{print $1}')mac=$4. /usr/local/etc/dhcp-dyndns.confptr=$(echo $ip | awk -F '.' '{print $4"."$3"."$2"."$1".in-addr.arpa"}')/usr/bin/kinit -k -t $keytab $kname@$realmcase "$action" inadd)echo "server $serverupdate delete $host.$domain $time Aupdate add $host.$domain $time A $ipsend"|nsupdate -gecho "server $serverupdate delete $ptr $time PTRupdate add $ptr $time PTR $host.$domainsend"|nsupdate -g;;delete)echo "server $serverupdate delete $host.$domain $time Asend"|nsupdate -gecho "server $serverupdate delete $ptr $time PTRsend"|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)
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
Стартуем демон 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 modelNov 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 connectionsNov 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 2Nov 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 agoProcess: 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 namedJul 10 20:01:26 companypdc.company named[1383]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPAJul 10 20:01:26 companypdc.company named[1383]: zone 'version.bind' allows updates by IP address, which is insecureJul 10 20:01:26 companypdc.company named[1383]: zone 'hostname.bind' allows updates by IP address, which is insecureJul 10 20:01:26 companypdc.company named[1383]: zone 'authors.bind' allows updates by IP address, which is insecureJul 10 20:01:26 companypdc.company named[1383]: zone 'id.server' allows updates by IP address, which is insecureJul 10 20:01:26 companypdc.company named[1383]: command channel listening on 127.0.0.1#953Jul 10 20:01:26 companypdc.company named[1383]: managed-keys-zone: loaded serial 50Jul 10 20:01:26 companypdc.company named[1383]: all zones loadedJul 10 20:01:26 companypdc.company named[1383]: runningJul 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.
_kerberos._udp.company.ru has SRV record 0 100 88 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.confrlimit_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_DCPress enter to see a dump of your service definitions# Global parameters[global]workgroup = COMPANYrealm = company.ruserver role = active directory domain controllerpassdb backend = samba_dsdbserver services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdaterpc_server:tcpip = norpc_daemon:spoolssd = embeddedrpc_server:spoolss = embeddedrpc_server:winreg = embeddedrpc_server:ntsvcs = embeddedrpc_server:eventlog = embeddedrpc_server:srvsvc = embeddedrpc_server:svcctl = embeddedrpc_server:default = externalwinbindd:use external pipes = trueidmap config * : backend = tdbmap archive = Nomap readonly = nostore dos attributes = Yesvfs objects = dfs_samba4 acl_xattr[netlogon]path = /usr/local/samba/var/locks/sysvol/company.ru/scriptsread only = Nowrite ok = Yes[sysvol]path = /usr/local/samba/var/locks/sysvolread only = Nowrite 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, для этого нужно вывести свойство "Мой компьютер":
Вводим логин Administrator, пароль MyPassword123
После чего выйдет окошко, в котором нас оповещают, что компьютер вошел в домен company.ru. Эта операция требует перезагрузки ПК.
Заходим под админом и запускаем оснастку Active Directory Users and Computers:
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. Образ жесткого диска и конфигурационные файлы тестовой системы
Выложил на файло-обменник файлы настроек:
Образ HDD для VBOX:
Пароль 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
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 и т.д. -
Сопоставления идентификаторов SID UID
Наш ответ санкциям США+Microsoft. Снеси Windows! Разверни домен на SAMBA 4