Время на прочтение6 мин
Количество просмотров251K
Этот вариант может быть полезен для небольших организаций с компьютерами под управлением Windows.
Нет необходимости приобретать недешевую Windows Server для организации AD и CAL лицензии для доступа к контроллеру домена.
В конечном итоге имеем плюшки AD: групповые политики, разграничение прав доступа к ресурсам и т.д.
Я попытался написать подробный алгоритм действий необходимых для организации Active Directory (AD) Domain Controller (DC) на базе Ubuntu Server.
Рассмотрим настройку контроллера домена на примере Ubuntu Server 12.04.4 LTS или Ubuntu Server 13.10, инструкция подходит для обоих вариантов без дополнительных изменений
1. Установка Ubuntu
Думаю установка Ubuntu-server не вызовет проблем даже у большинства пользователей компьютеров.
Желательно при установке ОС сразу правильно указать название машины в сети (hostname) с указанием домена (для примера использую dc1.domain.local), чтобы в дальнейшем меньше надо было править конфигурацию в файлах.
Если в сети не присутствует DHCP-сервер, установщик предложит ввести IP-адрес, маску сети, шлюз и DNS.
Во время установки, также желательно установить OpenSSH server, чтобы иметь удаленный доступ к серверу, а также правильно указать часовой пояс, в котором находится машина.
2. Настройка параметров сетевого адаптера
Настройки сети хранятся в файле /etc/network/interfaces
Редактируем его на свой вкус. В качестве редактора можно использовать nano, vi и т.п.
Для редактирования файлов понадобятся root права, их можно получить например командой
sudo su
после этого, Вы будете работать из под пользователя root.
О том что Вы работаете с правами root пользователя свидетельствует знак # в приглашении командной строки
Либо Вы можете перед каждой командой, которая требует root доступа, приписывать sudo
sudo nano /etc/network/interfaces
В конфигурации Вашего сетевого интерфейса, скорее всего, будет
iface eth0 inet dhcp
поменяем настройки на использование статичного ip-адреса.
В моем случае они выглядят вот так:
auto lo
iface lo inet loopbackauto eth0
iface eth0 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.10.10
dns-nameservers 192.168.10.10
dns-search domain.local domain
После изменения сетевых настроек необходимо перезапустить сетевой сервис
/etc/init.d/networking restart
3. Установка необходимых пакетов
Если Вы все же не установили OpenSSH server на первом этапе, это можно сделать командой
apt-get install ssh
Перед установкой чего либо, лучше сначала обновить систему и пакеты командой
apt-get update && apt-get upgrade
Для того, чтобы компьютеры сети сверяли время по нашему серверу установим ntp-сервер
apt-get install ntp
Samba4 будем использовать последней версии и собирать из исходников, так что нам понадобятся пакеты для её сборки и корректной работы.
apt-get install git checkinstall build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr docbook-xsl libcups2-dev acl
4. Сборка Samba4
Для корректной работы Samba потребуется поддержка vfs на уровне файловой системы, для этого внесем изменения в /etc/fstab, необходимо добавить user_xattr,acl,barrier=1 в настройки корневого раздела /
nano /etc/fstab
должна получится строка, что-то вроде этой:
/dev/mapper/dc1—vg-root / ext4 user_xattr,acl,barrier=1,errors=remount-ro 0 1
после чего необходимо перезагрузить компьютер
reboot
Не забываем про root права
sudo su
Скачиваем последнюю стабильную версию Samba из GIT репозитария
cd /usr/src
git clone -b v4-1-stable git://git.samba.org/samba.git samba-v4-1-stable
конфигурируем, компилируем и устанавливаем Samba
cd samba-v4-1-stable && ./configure --enable-debug && make && checkinstall
Параметр —enable-debug необходим для отображения более подробной информации в логах Samba.
После того, как соберется и установится Samba (это долгое занятие), для удобства её использования, необходимо прописать пути до исполняемых файлов /usr/local/samba/sbin и /usr/local/samba/bin в файлах /etc/sudoers переменная secure_path и /etc/environment переменная PATH, добавив строку :/usr/local/samba/sbin:/usr/local/samba/bin
nano /etc/sudoers
должна получится строчка что-то вроде этой:
Defaults secure_path=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/samba/sbin:/usr/local/samba/bin«
nano /etc/environment
должна получится строчка что-то вроде этой:
PATH=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/samba/sbin:/usr/local/samba/bin«
перезагрузимся еще раз (на всякий случай)
reboot
5. Поднимаем AD
В качестве DNS сервера AD будем использовать Samba, поэтому отключаем bind командой
service bind9 stop && update-rc.d bind9 disable
Для манипуляций с AD в Samba существует инструмент samba-tool.
Для первоначальной настройки Samba вводим команду
samba-tool domain provision
Если на первом этапе Вы правильно указали имя компьютера, все настройки, которые запросит программа, можно оставить поумолчанию.
Во время настройки будет запрошен пароль пользователя Administrator для AD, он должен соответствовать требованиям сложности пароля поумолчанию: хотябы одна буква верхнего регистра, хотябы одна цифра, минимум 8 символов.
Если же пароль не подошел по сложности и Вы увидели ошибку вроде этой:
ERROR(ldb): uncaught exception — 0000052D: Constraint violation — check_password_restrictions: the password is too short. It should be equal or longer than 7 characters!
то перед повторным выполнением первоначальной настройки, необходимо удалить содержимое каталогов /usr/local/samba/private/ и /usr/local/samba/etc/
Если необходимо изменить сложность паролей это можно сделать командой
samba-tool domain passwordsettings set --min-pwd-length=6 --complexity=off --max-pwd-age=0 --min-pwd-age=0
эта команда отключает требование сложности, отключает сроки действия паролей, устанавливает минимальную длину пароля 6 символов
Далее необходимо подправить настройки Samba и добавить туда следующие строки в секцию [global]
nano /usr/local/samba/etc/smb.conf
allow dns updates = nonsecure and secure
printing = bsd
printcap name = /dev/null
Это позволит динамически обновлять DNS-записи на сервере, при входе рабочей станции (под управлением windows) в домен и отключит поддержку печати, которая постоянно выдает ошибки в лог.
В файле /etc/resolvconf/resolv.conf.d/head необходимо указать наш DNS-сервер Samba 127.0.0.1
echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/head
и перезапустить сервис resolvconf
service resolvconf restart
Также установим Kerberos клиент
apt-get install krb5-user
и настроим на AD с помощью файла созданного на этапе samba-tool domain provision
mv /etc/krb5.conf /etc/krb5.conf.old
cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
Для автоматического запуска сервиса Samba необходим скрипт:
nano /etc/init.d/samba4
/etc/init.d/samba4
#! /bin/sh
### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Samba daemons
### END INIT INFO
#
# Start/stops the Samba daemon (samba).
# Adapted from the Samba 3 packages.
#
PIDDIR=/var/run/samba
SAMBAPID=$PIDDIR/samba.pid
# clear conflicting settings from the environment
unset TMPDIR
# See if the daemon and the config file are there
test -x /usr/local/samba/sbin/samba -a -r /usr/local/samba/etc/smb.conf || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting Samba 4 daemon" "samba"
# Make sure we have our PIDDIR, even if it’s on a tmpfs
install -o root -g root -m 755 -d $PIDDIR
if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then
log_end_msg 1
exit 1
fi
log_end_msg 0
;;
stop)
log_daemon_msg "Stopping Samba 4 daemon" "samba"
start-stop-daemon --stop --quiet --name samba $SAMBAPID
# Wait a little and remove stale PID file
sleep 1
if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
then
# Stale PID file (samba was succesfully stopped),
# remove it (should be removed by samba itself IMHO.)
rm -f $SAMBAPID
fi
log_end_msg 0
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: /etc/init.d/samba4 {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
его необходимо сделать исполняемым
chmod 755 /etc/init.d/samba4
и создать настройки поумолчанию
update-rc.d samba4 defaults
Перезагружаем компьютер
reboot
6. Проверяем работоспособность сервера
У нас должна быть запущена samba после перезагрузки
ps aux | grep samba
root 865 0.3 3.0 95408 31748? Ss 18:59 0:00 /usr/local/samba/sbin/samba -D
Должен работать DNS сервер
nslookup dc1
Server: 127.0.0.1
Address: 127.0.0.1#53Name: dc1.domain.local
Address: 192.168.10.1
Должны быть доступны сетевые ресурсы AD
smbclient -L localhost -U%
Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Sharename Type Comment
— — — netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.6)
Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Server Comment
— — Workgroup Master
— ——-
Должен подключаться Kerberos
kinit administrator
Warning: Your password will expire in 41 days on Wed Apr 23 18:49:14 2014
Должен храниться Ticket kerberos’a
klist
Valid starting Expires Service principal
12/03/2014 19:17 13/03/2014 05:17 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
Должна проходить аутентификация netlogon
smbclient //localhost/netlogon -UAdministrator -c 'ls'
Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
. D 0 Wed Mar 12 18:46:48 2014
… D 0 Wed Mar 12 18:49:15 2014
Вот и всё.
Можно вводить в домен клиентов, заводить пользователей.
Управлять AD можно:
частично при помощи samba-tool на Ubuntu
при помощи Administration Tools Pack на Windows XP
при помощи Remote Server Administration Tools (RSAT) на Windows 7 и выше
Этот пост можно считать неким переводом официального wiki Samba, который находится по адресу:
wiki.samba.org/index.php/Samba_AD_DC_HOWTO, с моими дополнениями.
P.S. Если кому-то будет интересно могу еще написать «мануал» про включение резервного контроллера на Ubuntu в домен.
Использование Samba 4 в роли контроллера домена Active Directory. Такой способ позволяет вводить Windows 7/8 в домен безо всяких манипуляций с реестром.
Возможности
Поддерживаются базовые возможности Active Directory:
- Аутентификация рабочих станций Windows и Linux и служб;
- Авторизация и предоставление ресурсов;
- Групповые политики (GPO);
- Перемещаемые профили (Roaming Profiles);
- Поддержка инструментов Microsoft для управления серверами (Remote Server Administration Tools) с компьютеров под управлением Windows (под WINE не работает);
- Поддержка протоколов SMB2 и SMB3 (в том числе с поддержкой шифрования);
- Репликация с другими серверами (в том числе с Windows 2012).
Не поддерживается
Не поддерживаются следующие возможности[1]:
- Не реплицируется хранилище SYSVOL (можно использовать osync[2][3]);
- Доверительные отношения с некоторыми ограничениями[4]):
- Правила SID filtering не реализованы;
- Невозможно добавить пользователей и группы в доменные группы доверенного домена;
- Не поддерживаются поддомены[5];
- В Samba отсутствует полноценная поддержка фантомных объектов[6];
- Проблемы при построении структуры AD (Active Directory browser), проблемы при поиске объектов в другом домене;
- При применении групповых политик в многодоменной среде могут быть проблемы с определением, в каком домене находится компьютер;
- DFS работает только в режиме одиночного сервера;
- Не реализован протокол DFS-R[7];
- Не полностью реализована поддержка контроллеров домена только на чтение[8] — RODC[9];
- Ограничения размера базы TDB в 4 ГБ[10], приводит к невозможности перехода от леса доменов к плоской структуре с одним доменом (решено в samba-4.9 и старше с использованием бекенда LMDB[11]).
- Не закончено тестирование поддержки CTDB (хранение данных в кластерной инфраструктуре);
- Не закончено тестирование работы Winbind.
Смотрите также статью Возможности и ограничения Samba 4 как контроллера домена Active Directory на http://habrahabr.ru/.
Внимание! Samba AD DC функционирует на уровне контроллера доменов Windows 2008 R2. Вы можете ввести его в домен Windows 2012 как клиента, но не как контроллер домена.
Установка
1) Установите пакет task-samba-dc с версии 4.3.1 для Samba DC на базе Heimdal Kerberos или task-samba-dc-mitkrb5 с версии 4.10.3-alt4 для Samba DC на базе MIT Kerberos, который установит необходимое.
Примечание: До версии 4.3.1 требовалось явно установить пакеты: samba-DC python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-client krb5-kinit
Примечание: Samba на базе Heimdal Kerberos использует KDC несовместимый с MIT Kerberos, поэтому на контроллере домена на базе Heimdal Kerberos из пакета samba-dc, для совместимости с клиентской библиотекой libkrb5, в krb5.conf (в блоке —- libdefaults) необходимо отключить использование ядерного кеша ключей — KEYRING:persistent:%{uid}
:
# control krb5-conf-ccache default
2) Так как Samba в режиме контроллера домена (Domain Controller, DC) использует свой сервер LDAP, свой центр распределения ключей KDC (сервер Kerberos) и свой сервер DNS (если не включен плагин BIND9_DLZ), перед установкой
остановите конфликтующие службы krb5kdc и slapd, а также bind:
# for service in bind krb5kdc nmb smb slapd; do chkconfig $service off; service $service stop; done
или
# systemctl disable --now bind krb5kdc nmb smb slapd
Примечание: Можно также отключить службы и выключить автозагрузку служб графическим способом в ЦУС. Например, в ALT Server зайдите в Система > Администрирование > ЦУС > Режим эксперта> Системные службы.
Примечание: При использовании плагина BIND9_DLZ службу bind после создания домена потребуется включить.
Создание нового домена
Восстановление к начальному состоянию samba
Очищаем базы и конфигурацию Samba (если уже создавался домен):
# rm -f /etc/samba/smb.conf # rm -rf /var/lib/samba # rm -rf /var/cache/samba # mkdir -p /var/lib/samba/sysvol
Внимание! Обязательно удаляйте /etc/samba/smb.conf перед созданием домена:
rm -f /etc/samba/smb.conf
Выбор имени домена и контроллера домена
Имя домена должно состоять минимум из двух компонентов, разделенных точкой, например, domain.alt. Если используется домен с суффиксом .local, потребуется отключить службу avahi-daemon на сервере и на подключаемых Linux-компьютерах.
Имя контроллера домена (DC) должно быть полным доменным именем (dc.domain.alt) и иметь имя узла (dc) длиной не более 15 символов.
Важно: необходимо избегать конфликта netbios имени машины и netbios имени домена. Убедитесь, что netbios имя локальной машины (хоста) отличается от netbios имени домена. В случае контроллера домена имя узла (например, dc в dc.domain.alt) и имя домена (domain.alt) должны быть различными.
Для установки постоянного имени машины используйте следующую команду:
hostnamectl set-hostname <name>
В системах, в которых управление сетью осуществляется через etcnet и используется SysVinit вместо systemd, полное доменное имя (FQDN) прописывается в конфигурационном файле /etc/sysconfig/network:
HOSTNAME=dc.domain.alt
Во все остальных случаях параметр HOSTNAME игнорируется.
Для временной установки имени машины (до перезагрузки системы) можно использовать следующие команды:
# hostname dc.domain.alt # domainname domain.alt
Создание домена с SAMBA_INTERNAL
Создание домена одной командой
Создание контроллера домена domain.alt с паролем администратора Pa$$word:
# samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc
Примечание: В команду можно добавить параметр, который позволяет указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена:
--option="dns forwarder=xxx.xxx.xxx.xxx"
Интерактивное создание домена
Примечание: У Samba свой собственный DNS-сервер. В DNS forwarder IP address нужно указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена.
В примере показано создание домена domain.alt.
Запустите samba-tool domain provision:
# samba-tool domain provision
Realm [DOMAIN.ALT]:
Domain [DOMAIN]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
More than one IPv4 address found. Using 192.168.1.1
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=domain,DC=alt
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=domain,DC=alt
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: c228
NetBIOS Domain: DOMAIN
DNS Domain: domain.alt
DOMAIN SID: S-1-5-21-80639820-2350372464-3293631772
При запросе ввода нажимайте Enter за исключением запроса пароля администратора («Administrator password:» и «Retype password:»).
Примечание: Пароль администратора должен быть не менее 7 символов и содержать символы как минимум трёх групп из четырёх возможных: латинских букв в верхнем и нижнем регистрах, чисел и других небуквенно-цифровых символов.
Параметры —use-rfc2307 —use-xattrs=yes позволяют поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.
Запуск службы
Установите службу по умолчанию и запустите её:
# systemctl enable --now samba
Примечание: Если служба после установки никаким способом не запускается, перезагрузите сервер
Конфликт между systemd-resolved и samba
Если перед запуском samba был настроен и запущен ресолвер systemd-resolved, то samba не запустится (или запустится с ошибками), так как происходит конфликт между systemd-resolved и samba из-за того, что обе службы пытаются прослушивать один и тот же порт 53. Systemd-resolved слушает DNS-запросы на интерфейсе 127.0.0.53:53, а samba требует доступ на всех интерфейсах *:53.
В логах Samba на это могут указать следующие ошибки:
- Ошибка при попытке занять порт 53 (DNS):
stream_setup_socket: Failed to listen on 0.0.0.0:53 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
- Ошибка обновления DNS-зоны:
Failed DNS update with exit code 1
Варианты решения конфликта:
- Ограничение интерфейсов Samba
- Если systemd-resolved необходим, Samba можно настроить так, чтобы она слушала только определённые IP-адреса, привязанные к интерфейсам. Например,чтобы настроить привязку всех сервисов Samba к интерфейсам eth0 и loopback (lo), необходимо добавить следующие параметры в секцию [global] конфигурационного файла smb.conf:
bind interfaces only = yes interfaces = lo eth0
- Если systemd-resolved необходим, Samba можно настроить так, чтобы она слушала только определённые IP-адреса, привязанные к интерфейсам. Например,чтобы настроить привязку всех сервисов Samba к интерфейсам eth0 и loopback (lo), необходимо добавить следующие параметры в секцию [global] конфигурационного файла smb.conf:
- Отключение systemd-resolved
- Если нет необходимости использовать systemd-resolved, то его можно отключить:
# systemctl disable --now systemd-resolved
- Затем убедитесь, что /etc/resolv.conf настроен правильно, то есть указывает на сервер DNS, которым управляет Samba.
- Для корректного отключения и настройки механизма преобразования имен хостов в адреса IP, необходимо ознакомиться со статьей Ресолвер.
- Если нет необходимости использовать systemd-resolved, то его можно отключить:
Проверка процессов на порту 53
Для диагностики можно использовать команду:
Она покажет, какие процессы используют порт 53. Например:
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1234,fd=12)) udp UNCONN 0 0 192.168.1.1:53 0.0.0.0:* users:(("named",pid=5678,fd=5))
Примечание: При использовании в качестве DNS-бэкенда BIND9_DLZ конфликт не возникает
Создание домена с BIND9_DLZ
По умолчанию в Samba используется dns-backend = SAMBA_INTERNAL, для возможности переключения режимов dns_backend для сервера SAMBA_INTERNAL/BIND9_DLZ требуется внести следующие изменения:
- Установить необходимые пакеты (bind и bind-utils) на сервер:
-
# apt-get install bind bind-utils
-
- На сервере в файл /etc/samba/smb.conf в блок [global] добавить строку:
- Отключить chroot:
-
# control bind-chroot disabled
-
- Отключить KRB5RCACHETYPE:
-
# grep -q KRB5RCACHETYPE /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
-
- Подключить плагин BIND_DLZ:
-
# grep -q 'bind-dns' /etc/bind/named.conf || echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf
-
- Привести /etc/bind/options.conf к виду (вместо {} подставить свои параметры в «»):
-
options { version "unknown"; directory "/etc/bind/zone"; pid-file ""; dump-file "/var/run/named_dump.db"; statistics-file "/var/run/named.stats"; recursing-file "/var/run/recursing"; tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab"; forwarders { {{ samba_dns_forward }}; }; allow-query { localnets; {{ samba_network }}; }; allow-recursion { localnets; {{ samba_network }}; }; max-cache-ttl 86400; }; logging { category lame-servers {null;}; };
- Например:
-
options { version "unknown"; directory "/etc/bind/zone"; pid-file ""; dump-file "/var/run/named_dump.db"; statistics-file "/var/run/named.stats"; recursing-file "/var/run/recursing"; tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab"; minimal-responses yes; //может понадобиться отключить dnssec //dnssec-enable no; //dnssec-validation no; allow-query { localnets; 192.168.0.0/24; }; allow-recursion { localnets; 192.168.0.0/24; }; include "/etc/bind/resolvconf-options.conf"; max-cache-ttl 86400; }; logging { category lame-servers {null;}; }; zone "example.test" { type forward; forwarders { 192.168.0.113; }; };
-
- Выполнить остановку bind:
- При выполнении команды создания домена одной командой указать тип dns-backend = BIND9_DLZ:
-
# samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --server-role=dc
-
- Далее произвести рестарт — samba, bind:
-
# systemctl restart samba # systemctl restart bind
-
Настройка Kerberos
Откройте от имени суперпользователя на редактирование файл /etc/krb5.conf.
Параметру «dns_lookup_realm» присвойте значение false.
В секции [libdefaults] раскомментируйте строку «default realm» и введите название области заглавными буквами.
В секции [realms] вместо EXAMPLE.COM введите название области, а вместо example.com в «default domain» введите IP-адрес сервера с Samba.
В секции [domain_realm] замените example.com и EXAMPLE.COM на ваш домен с сохранением регистра.
Альтернативный вариант
В момент создания домена Samba автоматически конфигурирует шаблон файла /var/lib/samba/private/krb5.conf для вашего домена.
То есть, его можно просто скопировать с заменой:
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Проверка работоспособности
1. Общая информация о домене:
# samba-tool domain info 127.0.0.1
Forest : domain.alt
Domain : domain.alt
Netbios domain : DOMAIN
DC name : c228.domain.alt
DC netbios name : C228
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
2. Просмотр предоставляемых служб:
# smbclient -L localhost -U administrator
Enter TEST\administrator's password:
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
public Disk Public Stuff
free Disk
IPC$ IPC IPC Service (Samba 4.14.10)
SMB1 disabled -- no workgroup available
3. Проверка конфигурации DNS
3.1 Убедитесь в наличии nameserver 127.0.0.1 в /etc/resolv.conf:
host domain.alt
3.2 Проверяем имена хостов:
- адрес _kerberos._udp.*адрес домена с точкой
# host -t SRV _kerberos._udp.domain.alt. _kerberos._udp.domain.alt has SRV record 0 100 88 c228.domain.alt.
- адрес _ldap._tcp.*адрес домена с точкой
# host -t SRV _ldap._tcp.domain.alt. _ldap._tcp.domain.alt has SRV record 0 100 389 c228.domain.alt.
- адрес хоста.*адрес домена с точкой
# host -t A c228.domain.alt. c228.domain.alt has address 192.168.1.1
Если имена не находятся, проверяйте выключение службы named.
systemctl status named
4. Проверка Kerberos:
Внимание! Имя домена должно быть в верхнем регистре, иначе выдаст:
kinit: KDC reply did not match expectations while getting initial credentials
# kinit administrator
Password for administrator@DOMAIN.ALT:
Warning: Your password will expire in 41 days on Вт 11 ноя 2014 08:58:30
Просмотр полученного билета:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.ALT
Valid starting Expires Service principal
30.09.2014 10:23:54 30.09.2014 20:23:54 krbtgt/DOMAIN.ALT@DOMAIN.ALT
renew until 01.10.2014 10:23:45
Внимание! Для серверов, не внесённых в зону обратного просмотра DNS, авторизация через nslcd по GSSAPI будет вылетать с диагностикой:
Local error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Server not found in Kerberos database)
Управление пользователями
Создать пользователя с паролем[12], :
samba-tool user create <имя пользователя> samba-tool user setexpiry <имя пользователя>
Например,
samba-tool user create ivanov --given-name='Иван Иванов' --mail-address='ivanov@stand.alt'
Просмотреть доступных пользователей:
samba-tool user list
Удалить пользователя:
samba-tool user delete <имя пользователя>
Отключить пользователя:
samba-tool user disable <имя пользователя>
Включить пользователя:
samba-tool user enable <имя пользователя>
Изменить пароль пользователя:
samba-tool user setpassword <имя пользователя>
Не забудьте разблокировать пользователя:
samba-tool user setexpiry <имя пользователя> --noexpiry
Внимание! Не допускайте одинаковых имён для пользователя и компьютера, это может привести к коллизиям (например, такого пользователя нельзя добавить в группу). [13]
Если компьютер с таким именем заведён, удалить его можно командой:
samba-tool computer delete <имя>
Добавить группу:
samba-tool group add groupname
Добавить UNIX-группу:
samba-tool group add groupname --nis-domain=samdom --gid-number=<next available GID>
Удалить группу:
samba-tool group delete groupname
Добавить пользователя в группу:
samba-tool group addmembers "Domain Users" user samba-tool group addmembers "Domain Users" user,user1,user2
Удалить пользователя из группы:
samba-tool group removemembers "Domain Users" user samba-tool group removemembers "Domain Users" user,user1,user2
Пользователи группы:
samba-tool group listmembers "Domain Users" | grep username
Группы пользователя:
samba-tool user show username
Смотрим значение memberOf.
Заведение дополнительного DC
Подробная инструкция на английском языке: https://wiki.samba.org/index.php/Join_a_domain_as_a_DC
Примечание: В дополнительных DC соблюдать те же правила, что и в основном DC)
Примечание: Для корректного взаимодействия обязательно проверить синхронизацию времени на серверах (актуально при использовании виртуальных машин, и снапшотов!)
Имя узла: dc2.domain.alt (192.168.1.106). Предполагается, что пакет task-samba-dc уже установлен.
1. Заводим IP-адрес для dc2 на PDC (с версии Samba 4.7 и выше запись вносится автоматически):
Внимание! Указание аутентифицирующей информации (имени пользователя и пароля) обязательно!
# samba-tool dns add 192.168.1.1 domain.alt DC2 A 192.168.1.106 -U administrator
2. На dc2.domain.alt правим файл /etc/krb5.conf:
[libdefaults] default_realm = DOMAIN.ALT dns_lookup_realm = false dns_lookup_kdc = true
Примечание: Перед вводом в домен в resolvconf обязательно должен быть добавлен PDC как nameserver.
3. Получаем билет и убеждаемся, что билет получен:
Внимание! Имя домена должно быть указано в верхнем регистре
# kinit administrator@DOMAIN.ALT Password for administrator@DOMAIN.ALT: Warning: Your password will expire in 37 days on Пт 14 ноя 2014 14:31:40 # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@DOMAIN.ALT Valid starting Expires Service principal 07.10.2014 18:51:01 08.10.2014 04:51:01 krbtgt/DOMAIN.ALT@DOMAIN.ALT renew until 08.10.2014 18:50:51
4. Вводим в домен:
# samba-tool domain join domain.alt DC -Uadministrator --realm=domain.alt
Если всё нормально, в конце видим:
Joined domain DOMAIN (SID S-1-5-21-80639820-2350372464-3293631772) as a DC
5. После успешного ввода в домен в resolvconf необходимо сменить адрес PDC на адрес вторичного DC (в нашем примере 192.168.1.106).
6. Запускаем службу samba, сразу переводя её в запускаемую по умолчанию:
# systemctl enable --now samba
Репликация
Внимание! Помните, что без успешной двунаправленной репликации в течение 14 дней DC исключается из Active Directory
Внимание! Указание аутентифицирующей информации (имени пользователя и пароля) обязательно!
Примечание: Начиная с версии samba 3.5 топология репликации выстраивается автоматически, следовательно пункты 1. и 2. можно пропустить
1. Реплицируем на вторичном DC (с первичного):
# samba-tool drs replicate dc2.domain.alt c228.domain.alt dc=domain,dc=alt -Uadministrator
(сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP).
2. Реплицируем на вторичном DC (на первичный):
# samba-tool drs replicate с228.domain.alt dc2.domain.alt dc=domain,dc=alt -Uadministrator
(сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP).
Примечание: Имя домена в именах серверов можно опустить (если они одинаковые)
3. Просмотр статуса репликации на PDC:
# samba-tool drs showrepl
Примечание: Если репликация на Windows не работает, добавьте в Active Directory Sites and Services новое соединение Active Directory. Реплицируйте на DC, подождите минут 5 и пробуйте реплицировать с Samba на Windows
Доверительные отношения
Доверительные отношения позволяют аутентифицироваться под пользователями не только текущего домена, но и доверенных.
Подробнее:
- Samba/InterdomainTrustRelationships
- Trusts
Усиление безопасности КД
Возможность анонимного получения списка пользователей, групп и т.п.
Samba наследует поведение домена NT4, которое больше не требуется в режиме Active Directory. Например, следующая команда возвращает всех пользователей домена:
# rpcclient -U "" -c enumdomusers dc1.domain.alt
Для отключения этого внесите изменения в конфигурационный файл /etc/samba/smb.conf
[global] restrict anonymous = 2
p.s. Также может потребоваться работа с полем dSHeuristics (подробно — http://support.microsoft.com/kb/326690).
samba-tool forest directory_service dsheuristics 0000000
Отключение Netbios
Если конфигурация DNS выполнена правильно, старые протоколы NetBIOS, которые больше не нужны, могут быть отключены.
Внесите изменения в конфигурационный файл /etc/samba/smb.conf в секцию global
[global] disable netbios = yes smb ports = 445
Отключение роли сервера печати
Контроллер домена не следует настраивать с ролью сервера печати. Сервер Samba, настроенный как файловый сервер, лучше подходит для этой функции.
[global] printcap name = /dev/null load printers = no disable spoolss = yes printing = bsd
Отключение NTLMv1
Протокол аутентификации NTLMv1 появился в начале 1990-х годов и был быстро заменен на NTLMv2 из-за недостатков безопасности. Он больше не полезен в современных сетях, за исключением случаев использования MS-CHAP-v2, который является протоколом по умолчанию для аутентификации 802.1x на рабочих станциях Windows (например, аутентификация Radius для подключений Wi-Fi). В этом случае MS-CHAP-v2 использование NTLMv1 можно до некоторой степени допустить, поскольку он инкапсулирован в другой, более надежный протокол.
В Samba есть возможность глобально отключить NTLMv1, если он не используется для аутентификации MS-CHAP-v2. Поэтому рекомендуется добавить следующий параметр в конфигурационный файл /etc/samba/smb.conf.
[global] ntlm auth = mschapv2-and-ntlmv2-only
Генерация дополнительных хешей паролей
Чтобы разрешить передачу хешей в другую базу аутентификации, можно попросить Samba-AD генерировать дополнительные хеши, когда пользователь меняет свой пароль.
[global] password hash userPassword schemes = CryptSHA256 CryptSHA512
Защита DNS-записей wpad и isatap
Серверы Windows AD имеют глобальный черный список запросов DNS с двумя записями:
- wpad
- isatap
В разделе реестра GlobalQueryBlockList перечислены эти две записи DNS, чтобы предотвратить создание таких записей и перенаправление сетевого трафика неавторизованным объектом, действующим в локальной сети. Протокол автоматического обнаружения веб-прокси (WPAD) по умолчанию настроен в браузерах WPAD, в частности в браузерах Internet Explorer.
Даже если конфигурации wpad и isatap не используются, все равно важно создать эти две записи, чтобы предотвратить их использование обходным путем, поскольку в Samba-AD нет способа заблокировать создание записей, как в Microsoft AD.
# samba-tool dns add `hostname -s` `hostname -d` wpad A 127.0.0.1 -P # samba-tool dns add `hostname -s` `hostname -d` isatap A 127.0.0.1 -P
Больше информации по ссылке: https://technet.microsoft.com/en-us/library/cc794902%28v=ws.10%29.aspx
Ограничение диапазона динамических портов
По умолчанию Active Directory использует очень широкий динамический диапазон для вызовов MS-RPC.
Рекомендуется ограничить этот диапазон. Для этого добавьте следующую строку в раздел [global] файла /etc/samba/smb.conf:
[global] rpc server dynamic port range = 50000-55000
P.S. Не забудьте перенастроить фаервол, если он используется
Аудит запросов к папкам SYSVOL и NetLogon
Измнения в /etc/samba/smb.conf:
[global] ... full_audit:failure = none full_audit:success = pwrite write renameat full_audit:prefix = IP=%I|USER=%u|MACHINE=%m|VOLUME=%S full_audit:facility = local7 full_audit:priority = NOTICE ... [sysvol] ... vfs objects = dfs_samba4, acl_xattr, full_audit ... [netlogon] ... vfs objects = dfs_samba4, acl_xattr, full_audit
Отправка логов аудита в rsyslog
Настройка [rsyslog]
rsyslog на том же хосте
/etc/samba/smb.conf
[global] log level = 1 auth_json_audit:3@/var/log/samba/samba_audit.log
/etc/rsyslog.d/send_samba.conf
module(load="imfile" PollingInterval="10") #needs to be done just once input(type="imfile" File="/var/log/samba/samba_audit.log" Tag="samba_auth" Severity="info" Facility="auth") if ($syslogtag == "samba_auth") then { action(type="omfwd" target="dc1.domain.alt" port="514" protocol="tcp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000") }
rsyslog на вышестоящем хосте
/etc/rsyslog.d/recv_samba.conf
$ModLoad imtcp $InputTCPServerRun 514 if ($syslogtag == "samba_auth") then /var/log/samba/audit_auth.log
Ссылки
- Рекомендуемые серверные установочные образы (после установки выполните обновление ОС):
- Альт Сервер
- Альт Линукс СПТ 7.0 (сертификат ФСТЭК)
- стартеркиты: x86_64, i586 (GPL)
- существуют сборки samba-DC для порта на «Эльбрус»
- Тестовые образы:
- altlinux-p7-server-samba4.iso (старая стабильная ветка)
- regular-server-samba4.iso (нестабильная ветка)
- Документация на русском языке:
- Инструкция по настройке Samba в качестве контроллера домена, совместимого с Active Directory
- Samba4 — использование Python Scripting Interface
- Возможности и ограничения Samba 4 как контроллера домена Active Directory
- Samba DC в качестве второго контроллера в домене AD Windows 2012R2 и перемещаемые папки для клиентов на Windows и Linux
- wiki.samba.org:
- Samba AD DC HOWTO
- Installing RSAT on Windows for AD Management
- Добавление ещё одного DC в домен
- Samba & Windows Profiles
- Join an additional Samba DC to an existing Active Directory
- Backup and restore an Samba AD DC
- Samba Security Documentation
- Иные ресурсы:
- Заведение групповых политик для домена (ролик)
- Samba 4 — domain controller#Join domain with a linux machine
Советы
- Введите в домен машину с Windows, установите на неё Remote Server Administration Tools и управляйте доменом из графического интерфейса.
- Для того, чтобы посмотреть конфигурацию LDAP контроллера домена, получите билет Kerberos (через kinit) и выполните:
ldapsearch -LLL -b '' -s base -x
- Для отключения проверки необходимой длины и стойкости паролей выполните:
samba-tool domain passwordsettings set --complexity=off samba-tool domain passwordsettings set --history-length=0 samba-tool domain passwordsettings set --min-pwd-age=0 samba-tool domain passwordsettings set --max-pwd-age=0
- Для просмотра всех записей DNS домена выполните:
samba-tool dns query localhost test.altlinux '@' ALL -U 'Administrator%Pa$$word'
- Для удаления заведённого хоста выполните:
samba-tool dns delete localhost test.altlinux host-51 A 192.168.3.51 -U 'Administrator%Pa$$word'
Troubleshooting
- Если домен не создаётся с ошибкой типа
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2241
- Удалите директиву include или includedir в /etc/krb5.conf[14]
This post will detail how to setup a pair of active directory domain
controllers using Samba 4 on Ubuntu 20.04 Server. One will be a primary domain controller and the other will be a backup domain controller. This provides redundancy incase one server has to go down for updates.
Pre-Requisites
- Two independent linux servers, this guide will use Ubuntu 20.04 Server.
- A domain name, sometimes called a fully qualified domain name (FQDN).
Network Configuration
You should configure these as static IP addresses on your router.
Hostname | Domain | IP Address |
---|---|---|
dc1 | ad.ifsg.ca | 192.168.2.10 |
dc2 | ad.ifsg.ca | 192.168.2.11 |
Setup the Primary Domain Controller
This is broken up into pre-configuration of the server, installation and post-installation configuration.
Pre-configuration of the server
Set the hostname of the primary domain controller to dc1
~$ sudo hostnamectl set-hostname dc1
Edit the hosts file to resolve dc1’s hostname to the static IP address of this
server
~$ sudo nano /etc/hosts
# Add the following line to the /etc/hosts file:
192.168.2.10 dc1.ad.ifsg.ca dc1
Package installation
Install all of the required packages for Samba
~$ sudo apt-get install -y acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools
Provision the primary Samba domain controller. The first step is to ensure
that Samba is not running, search for any Samba processes and if it is present
kill the «root process» pid.
~$ ps -ax | grep samba
1593 ? Ss 0:00 samba: root process
4319 pts/0 S+ 0:00 grep --color=auto samba
~$ sudo kill 1593
Now move the default smb.conf and krb5.conf files installed by the package manager
~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig
Run the samba-tool in interactive mode to configure the primary domain controller
- This needs to be run as root (aka sudo), so it can write the configuration files to /etc/ and elsewhere
- The configuration tool will first ask for you to provide several pieces of information, the default is between square brackets []. You should be able to click through with the defaults, but the following were the settings I used:
- Realm = AD.IFSG.CA
- Domain = AD
- DNS backbone = SAMBA_INTERNAL
- I am configuring using the Internal DNS, you can use BIND9 but that is outside the scope of this guide.
- DNS forwarder IP address = 208.67.222.222 208.67.220.220
- Several DNS IPs can be provided by separating them with a space
- Administrator password
- Should meet the minimum requirements as indicated in Microsoft’s complexity requirements
~$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [AD.IFSG.CA]
Domain [AD]
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.53]: 208.67.222.222 208.67.220.220
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Unable to determine the DomainSID, can not enforce uniqueness constrant on local domainSIDs
Adding DomainDN: DC=ad,DC=ifsg,DC=ca
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers and extended rights
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Repackaging database from v1 to v2 format
Repack: repacked 10000 records so far
Repackaging database from v1 to v2 format
Repackaging database from v1 to v2 format
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=ad,DC=ifsg,DC=ca
Creating DomainDnsZones and ForestDnsZones partitions
Population DomainDnsZones and ForestDnsZones partitions
Repacking database from v1 to v2 format
Setting up sam.lbd rootDSE marking as syncronized
Fixing privision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of the file with your system krb5.conf or replace it with this one. Do not create a symlink!
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: dc1
NetBIOS Domain: AD
DNS Domain: ad.ifsg.ca
DOMAIN SID: S-1 ...
Post install configuration and testing
Copy the krb5.conf file that samba-tool created to /etc/
~$ sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
The Samba domain controller can now be started
~$ sudo samba
Check the DNS settings
~$ host -t SRV _ldap._tcp.ad.ifsg.ca
Host _ldap._tcp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t SRV _kerberos._udp.ad.ifsg.ca
Host _kerberos._udp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t A dc1.ad.ifsg.ca
dc1.ad.ifsg.ca has address 192.168.2.10
This seems to indicate that DNS is not working properly, per Rico Sharp’s documentation, this is caused by Ubuntu’s built-in DNS server (systemd-resolve) is overriding the internal DNS server that Samba has. We can see this is the case by checking what is listening on port 53
~$ sudo netstat -tulpn | grep :53
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 120/systemd-resolve
udp 0 0 127.0.0.53:53 0.0.0.0:* 120/systemd-resolve
To fix this we can disable the systemd-resolve service on the server
~$ sudo systemctl stop systemd-resolved
~$ sudo systemctl disable systemd-resolved
~$ sudo unlink /etc/resolv.conf
~$ sudo nano /etc/resolv.conf
nameserver 192.168.2.10
search ad.ifsg.ca
~$ sudo reboot
Start the Samba domain controller again
~$ sudo samba
Check the DNS settings again, these should resolve correctly now
~$ host -t SRV _ldap._tcp.ad.ifsg.ca
_ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc1.ad.ifsg.ca.
~$ host -t SRV _kerberos._udp.ad.ifsg.ca
_kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc1.ad.ifsg.ca.
~$ host -t A dc1.ad.ifsg.ca
dc1.ad.ifsg.ca has address 192.168.2.10
We now need to configure the network time protocol (NTP) server, chronyd. Chronyd enables time syncronization which is required by the DC to function; however, by default it is not configured during the Samba setup process. What is more, the Samba instructions point us in the wrong direction for where the NTP socket folder is setup.
~$ samba -b | grep 'NTP' | awk '{print $NF}'
/var/lib/samba/ntp_signd
By default, the permissions and group settings will not let chronyd use this socket.
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root root 4096 Jan 24 05:08 /var/lib/samba/ntp_signd
Change the permissions as follows.
~$ sudo chown root:_chrony /var/lib/samba/ntp_signd/
~$ sudo chmod 750 /var/lib/samba/ntp_signd/
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root _chrony 4096 Jan 24 05:08 /var/lib/samba/ntp_signd
Now edit the chronyd configuration file to connect it to the above socket and enable connections on the network.
~$ sudo nano /etc/chrony/chrony.conf
# Settings for Samba DC
allow 192.168.2.0/24 # dns netmask
ntpsigndsocket /var/lib/samba/ntp_signd
By defafult Samba is not configured to run as a service meaning it will not startup automatically with the server. Running Samba as a service can be accomplished using systemd. First though, kill the Samba process so the service setup does not fail.
~$ ps -ax | grep samba
1593 ? Ss 0:00 samba: root process
4319 pts/0 S+ 0:00 grep --color=auto samba
~$ sudo kill 1593
Now configure Samba to run as a systemd service. Mask the smbd, nmbd and winbind services and unmask the samba-ad-dc service.
~$ sudo systemctl mask smbd nmbd winbind
~$ sudo systemctl disable smbd nmbd winbind
~$ sudo systemctl stop smbd nmbd winbind
~$ sudo systemctl unmask samba-ad-dc
~$ sudo systemctl start samba-ad-dc
~$ sudo systemctl enable samba-ad-dc
Reboot the server and test!
~$ sudo reboot
~$ sudo systemctl status samba-ad-dc
Now confirm the server is working, test using kinit
~$ kinit Administrator
If you this worked, you should have entered your password and seen a message about your password expiring in # days
Setup the Backup Domain Controller
This will also be broken up into a few different sections
Pre-configuration of the server
Set the hostname of the primary domain controller to dc2
~$ sudo hostnamectl set-hostname dc2
Edit the hosts file to resolve dc1 and dc2 hostnames to the static IP address of each server
~$ sudo nano /etc/hosts
# Add the following line to the /etc/hosts file:
192.168.2.10 dc1.ad.ifsg.ca dc1
192.168.2.11 dc2.ad.ifsg.ca dc2
Package installation
Install all of the required packages for Samba
~$ sudo apt-get install -y acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools
Provision the backup Samba domain controller. The first step is to ensure
that Samba is not running, search for any Samba processes and if it is present
kill the «root process» pid.
~$ ps -ax | grep samba
1593 ? Ss 0:00 samba: root process
4319 pts/0 S+ 0:00 grep --color=auto samba
~$ sudo kill 1593
Now move the default smb.conf and krb5.conf files installed by the package manager
~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig
Now move the default smb.conf and krb5.conf files installed by the package manager
~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig
We can now try and install the backup DC server
~$ sudo samba-tool domain join ad.ifsg.ca DC -W AD -U Administrator
We get an error that it can’t find a primary AD server to connect to. This seems to be related to the systemd-resolved and is preventing samba-tool from seeing the primary AD server. To fix this edit the /etc/resolv.conf and try again.
~$ sudo cp /etc/resolv.conf /etc/resolv.conf.orig
~$ sudo nano /etc/resolv.conf
Change nameserver to 192.168.2.10
Change search to ad.ifsg.ca
Try installing the backup DC server again
~$ sudo samba-tool domain join ad.ifsg.ca DC -W AD -U Administrator
Finding a writable DC for domain 'ad.ifsg.ca'
Found DC dc1.ad.ifsg.ca
Password for [AD\Administrator]:
workgroup is AD
realm is ad.ifsg.ca
Adding CN=DC2,OU=Domain Controlls,DC=ac,DC=ifsg,DC=ca
Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ac,DC=ifsg,DC=ca
Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ac,DC=ifsg,DC=ca
Adding SPNs to CN=DC2,OU=Domain Controllers,DC=ac,DC=ifsg,DC=ca
Setting acount password for DC2$
Enabling account
Calling bare provision
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Unable to determine the DomainSID, can not enforce uniqueness constrant on local domainSIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of the file with your system krb5.conf or replace it with this one. Do not create a symlink!
Provision OK for domain DN DC=ad,DC=ifsg,DC=ca
Starting replication
[ works through replicating the databases ]
Adding 1 remote DNS records for DC2.ad.ifsg.ca
Adding DNA A record DC2.ad.ifsg.ca for IPv4: 192.168.2.11
Adding DNS CNAME record [long id]._msdcs.ad.ifsg.ca for DC2.ad.ifsg.ca
All other DNS recordxcs (like _ldap SRV records) will be created samba_dnsupdate on first startup
Replicating new DNS records in DC=DomainDnsZones,DC=ad,DC=ifsg,DC=ca
Replicating new DNS records in DC=ForestDnsZones,DC=ad,DC=ifsg,DC=ca
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSyncronized and dsServiceName
Setting up secrets database
Joined daomin AD (SID S-1 ... ) as a DC
Post install configuration and testing
Copy the krb5.conf file that samba-tool created to /etc/
~$ sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
We can attempt startup of the Samba backup domain controller
~$ sudo samba
Check the DNS settings
~$ host -t SRV _ldap._tcp.ad.ifsg.ca
Host _ldap._tcp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t SRV _kerberos._udp.ad.ifsg.ca
Host _kerberos._udp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t A dc1.ad.ifsg.ca
dc1.ad.ifsg.ca has address 192.168.2.10
Same problem as we saw with the primary DC server. Checking what is listening on port 53 indicates the same problem.
~$ sudo netstat -tulpn | grep :53
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 120/systemd-resolve
udp 0 0 127.0.0.53:53 0.0.0.0:* 120/systemd-resolve
To fix this we can disable the systemd-resolve service on the server
~$ sudo systemctl stop systemd-resolved
~$ sudo systemctl disable systemd-resolved
~$ sudo unlink /etc/resolv.conf
~$ sudo nano /etc/resolv.conf
nameserver 192.168.2.11
search ad.ifsg.ca
~$ sudo reboot
Start the Samba domain controller again
~$ sudo samba
Check the DNS settings again, these should resolve correctly now. There will be two lines in for ldap and kerberos connections as we now have a second domain controller.
~$ host -t SRV _ldap._tcp.ad.ifsg.ca
_ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc1.ad.ifsg.ca.
_ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc2.ad.ifsg.ca.
~$ host -t SRV _kerberos._udp.ad.ifsg.ca
_kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc1.ad.ifsg.ca.
_kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc2.ad.ifsg.ca.
~$ host -t A dc1.ad.ifsg.ca
dc1.ad.ifsg.ca has address 192.168.2.10
~$ host -t A dc2.ad.ifsg.ca
dc2.ad.ifsg.ca has address 192.168.2.11
As before we need to configure the NTP server chronyd.
~$ samba -b | grep 'NTP' | awk '{print $NF}'
/var/lib/samba/ntp_signd
By default, the permissions and group settings will not let chronyd use this socket.
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root root 4096 Jan 24 05:08 /var/lib/samba/ntp_signd
Change the permissions as follows.
~$ sudo chown root:_chrony /var/lib/samba/ntp_signd/
~$ sudo chmod 750 /var/lib/samba/ntp_signd/
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root _chrony 4096 Jan 24 05:08 /var/lib/samba/ntp_signd
Now edit the chronyd configuration file to connect it to the above socket and enable connections on the network.
~$ sudo nano /etc/chrony/chrony.conf
# Settings for Samba DC
allow 192.168.2.0/24 # dns netmask
ntpsigndsocket /var/lib/samba/ntp_signd
By defafult Samba is not configured to run as a service meaning it will not startup automatically with the server. Running Samba as a service can be accomplished using systemd. First though, kill the Samba process so the service setup does not fail.
~$ ps -ax | grep samba
1593 ? Ss 0:00 samba: root process
4319 pts/0 S+ 0:00 grep --color=auto samba
~$ sudo kill 1593
Now configure Samba to run as a systemd service. Mask the smbd, nmbd and winbind services and unmask the samba-ad-dc service.
~$ sudo systemctl mask smbd nmbd winbind
~$ sudo systemctl disable smbd nmbd winbind
~$ sudo systemctl stop smbd nmbd winbind
~$ sudo systemctl unmask samba-ad-dc
~$ sudo systemctl start samba-ad-dc
~$ sudo systemctl enable samba-ad-dc
Reboot the server and test!
~$ sudo reboot
~$ sudo systemctl status samba-ad-dc
Now confirm the server is working, test using kinit
~$ kinit Administrator
If you this worked, you should have entered your password and seen a message about your password expiring in # days
Lastly, confirm that redundancy is working by ssh’ing into the dc1 server and turning off the DC server
~$ sudo systemctl stop samba-ad-dc
# On dc2 try and use kinit
~$ kinit Administrator
# If you are asked for your password and it says it will expire then the backup server is working.
# On dc1, turn the primary DC back on.
~$ sudo systemctl start samba-ad-dc
References
- Samba 4 Active Directory Domain Controller on Ubuntu 18.04 Server
- Setting up Samba as an Active Directory Domain Controller
- Joining a Samba DC to an Existing Active Directory
A domain controller on Linux server?! Impossible! The reaction is valid, especially for those who hear the concept for the first time. Turns out that not only can you set up a domain controller Linux server, but you can also do so for free!
Whether you opt for Linux for cost, standardization, or greener, leaner tech stack, learning how to set up a Linux DC is a good skill for every administrator.
Read on to learn how to use Samba as a reliable domain controller Linux server.
Scan Your AD for 930+ Million Compromised Passwords. Download Specops Password Auditor, a FREE read only tool that identifies password-related vulnerabilities.
Prerequisites
This tutorial will be a hands-on demonstration. If you’d like to follow along, be sure you have an Ubuntu Server. This tutorial will use an Ubuntu Server 22.04 LTS with the following configuration.
- Hostname:
oddjobs-dc
- IP Address:
192.168.8.10
- Domain:
OJI.COM
- FQDN:
oddjobs-dc.oji.com
Preparing the Domain Controller on Linux Server
After meeting all the prerequisites, you must ensure there are no default operating system settings that might hamper the functioning of the DC. Don’t worry. This step is not as complicated as it may sound. Follow the below steps to accomplish this task.
Setup the Hosts File Entry
The first task is to add your server’s hostname and FQDN entries in the local hosts (/etc/hosts
) file.
1. First, open your preferred SSH client and log in to your Ubuntu server.
2. Open your hosts (/etc/hosts) file in a text editor, such as nano.
3. Delete any entry that maps your hostname or FQDN to any IP besides the static IP. For example, this server’s static IP address is 192.168.8.10, so leave this entry if it exists. Refer to the example below.
4. Next, add an entry to map your host’s FQDN and static IP address. In this tutorial, the server FQDN is oddjobs-dc.oji.com, so the entry to add is:
192.168.8.10 oddjobs-dc.oji.com oddjobs-dc
5. Save the hosts (/etc/hosts) file and exit the editor.
Confirm Hostname and FQDN Resolution
Run the commands below to confirm the server’s hostname and that the FQDN resolves to the correct IP address.
# verify server FQDN
hostname -A
# verify FQDN resolves to your server IP address
ping -c1 oddjobs-dc.oji.com
As you can see below, the commands returned the expected FQDN and IP address.
Disable the Network Name Resolution Service
Ubuntu has a service called systemd-resolved
, which takes care of the DNS resolution requests. This service is unsuitable for Samba, and you must disable it and manually configure the DNS resolver instead.
1. Disable the systemd-resolved service by running the command below.
sudo systemctl disable --now systemd-resolved
2. Next, remove the symbolic link to the file /etc/resolv.conf.
sudo unlink /etc/resolv.conf
3. Create a new /etc/resolv.conf file in your text editor. This example uses nano.
sudo nano /etc/resolv.conf
4. Populate the /etc/resolv.conf file with the following information. Replace 192.168.8.10 with your server’s IP address and oji.com with your domain. Leave the nameserver 1.1.1.1 as the fallback DNS resolver, which is the public DNS resolver by Cloudflare.
# your Samba server IP Address
nameserver 192.168.8.10
# fallback resolver
nameserver 1.1.1.1
# your Samba domain
search oji.com
Your /etc/resolv.conf should look similar to the screenshot below.
5. Save the file and exit the editor.
Installing Samba
After completing the server preparation, it is time to install Samba and other required packages to provision the domain controller.
1. First, ensure that the repository cache is up to date by running the below command.
2. Run the command below to install the required packages for a fully functioning domain controller.
sudo apt install -y acl attr samba samba-dsdb-modules samba-vfs-modules smbclient winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools
3. On the Configuring Kerberos Authentication step, type the DNS domain in uppercase. In this example, the default realm domain is OJI.COM. Highlight Ok, and press Enter to accept the value.
4. On the next screen asking for the Kerberos servers for your realm, type the server hostname and press Enter.
5. On the next screen asking for the Administrative server for your Kerberos realm, type the server hostname and press Enter.
6. After the configuration, disable the unnecessary services (winbind, smbd, and nmbd).
sudo systemctl disable --now smbd nmbd winbind
7. Enable and activate the samba-ad-dc service. This service is what Samba needs to act as an Active Directory domain controller Linux server.
# unmask the samba-ad-dc service
sudo systemctl unmask samba-ad-dc
# enable samba-ad-dc service
sudo systemctl enable samba-ad-dc
Provisioning the Domain Controller Linux Server
Using the samba-tool binary, you can now provision the domain controller upon your Samba installation. Samba-tool is a configuration tool to interact with and configure various aspects of a Samba-based AD.
1. For good measure, backup the existing /etc/samba/smb.conf and /etc/krb5.conf files.
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo mv /etc/krb5.conf /etc/krb5.conf.bak
2. Run the below command to promote the Samba to an Active Directory domain controller Linux server.
The –use-rfc2307 switch enables the Network Information Service (NIS) extension, which allows the DC to manage UNIX-based user accounts appropriately.
sudo samba-tool domain provision --use-rfc2307 --interactive
3. Answer the prompts as follows.
- Realm – the tool automatically detects your Kerberos realm. In this example, the realm is
OJI.COM
. Press Enter to accept the default.
- Domain – the tool automatically detects the NetBIOS domain name. In this example, the NetBIOS is
OJI
. Press Enter to continue.
- Server role – the tool automatically populates the server role as a domain controller (
dc
). Press Enter to continue.
- DNS backend – the default is
SAMBA_INTERNAL
. Press Enter to accept the default.
- DNS forwarder IP address – type the fallback resolver address you specified in
resolve.conf
earlier, which is1.1.1.1
. Press Enter to continue.
- Administrator password – set the password of the default domain administrator. The password you specify must meet Microsoft’s minimum complexity requirements. Press Enter to proceed.
- Retype password – retype the default domain administrator password and press Enter.
At the end of the configuration, you’ll see the following information.
4. The samba-tool command generated the Samba AD Kerberos configuration file at /var/lib/samba/private/krb5.conf. You must copy this file to /etc/krb5.conf. To do so, run the following command.
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
5. Finally, start the samba-ad-dc service.
sudo systemctl start samba-ad-dc
sudo systemctl status samba-ad-dc
As you can see below, the service status is now active (running).
Testing the Domain Controller Linux Server
The Samba AD DC server is now running. In this section, you will perform a few post-installation tests to confirm key components are functioning as desired. One such test is to attempt logging into the default network shares on the DC.
Run the smbclient command to log on as the default administrator account and list (ls) the contents of the netlogon share.
smbclient //localhost/netlogon -U Administrator -c 'ls'
Enter the default admin password. The share should be accessible without errors if the DC is in a good state. As you can see below, the command listed the netlogon share directory.
Verifying DNS Resolution for Key Domain Records
Run the commands below to look up the following DNS records.
- TCP-based LDAP SRV record for the domain.
- UDP-based Kerberos SRV record for the domain.
- A record of the domain controller.
host -t SRV _ldap._tcp.oji.com
host -t SRV _kerberos._udp.oji.com
host -t A oddjobs-dc.oji.com
Each command should return the following results, indicating that the DNS resolution works.
Testing Kerberos
The last test is to attempt to issue a Kerberos ticket successfully.
1. Execute the kinit command for the administrator user. The command automatically appends the realm to the user account. For example, the administrator will become [email protected], where OJI.com is the realm.
2. Type the administrator password on the prompt and press Enter. If the password is correct, you’ll see a Warning message about the password expiration, as shown below.
3. Run the klist command below to list all tickets in the ticket cache.
The screenshot below shows that the Kerberos ticket for the administrator account is in the ticket cache. This result indicates that Kerberos authentication works on your domain controller Linux server.
Extend the functionality of Group Policy and simplify the management of fine-grained password policies. Target any GPO level, group, user, or computer with dictionary and passphrase settings with Specops Password Policy. Try it Free!
Conclusion
Congratulations on reaching the end of this tutorial. You have now learned to stand up an Active Directory domain controller Linux server quickly. Deepen your knowledge on the subject by learning to create users and join client computers in the domain.
В сегодняшней статье я опишу и продемонстрирую процесс подключения Samba к доменной сети Windows в качестве рядового участника.
В четвертой версии Samba появилась возможность использовать сервер с Linux в качестве контроллера домена. И, хотя это давно перестало быть новостью, я надеюсь, что многим пригодится информация из этой и следующих статей. Итак, сегодня я настрою контроллер домена на Ubuntu Server 16.04 в стандартной конфигурации, а заодно расскажу и покажу, как это сделать.
Установка пакетов.
Одной только Samba нам будет недостаточно. Для аутентификации пользователей понадобится Kerberos, о котором уже говорилось ранее, для синхронизации времени — NTP, для управления правами доступа — ACL (система, многим известная как «виндовые галочки»). Если в сети присутствуют принтеры, которыми нужно управлять удаленно, придется установить и настроить СUPS. Samba 4 содержит встроенный DNS с ограниченной функциональностью, поэтому я буду использовать именно его. Если требуется полноценный DNS-сервер, добавьте в список BIND.
Устанавливаем минимальный набор, необходимый для нашей задачи:
sudo apt install samba samba-tool krb5-user ntp acl
Пакет acl, вероятно, уже установлен у вас в системе, поскольку он входит в стандартный набор Ubuntu 16.04, 16.10 и 17.04. Весьма вероятно, что он никуда не денется и в следующих версиях.
Kerberos попросит указать область по умолчанию. Можно оставить поля пустыми, позже мы все равно получим сгенерированный автоматически конфиг Kerberos.
Настройка Samba и Kerberos.
Для формирования файла /etc/samba/smb.conf воспользуемся утилитой samba-tool. То же самое в случае необходимости можно сделать и вручную, просто вписав соответствующие строки.
Для начала переименуем стандартный smb.conf, чтобы позволить samba-tool создать для нас новый.
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old
Базовый вариант команды для формирования конфига Samba в роли контроллера домена выглядит так:
sudo samba-tool domain provision --use-rfc2307 --interactive
Сюда могут быть добавлены дополнительные параметры, но о самом необходимом нас и без того спросят. Кроме того, в случае проблем вы можете сделать логи более подробными, добавив ключ -d и число от 0 до 10. Значение по умолчанию — 1.
Теперь вам нужно лишь вводить данные в ответ на соответствующие запросы. В квадратных скобках указывается значение по умолчанию, если оно подходит, достаточно просто нажать Enter.
Realm | полное_имя_домена |
Domain | короткое_имя_домена |
Server Role | оставляем по умолчанию (dc) |
DNS Backend | если не планируется отдельный DNS-сервер, оставьте SAMBA_INTERNAL |
DNS Forwarder IP Adress | 8.8.8.8 ( это DNS от Google), если только в вашей сети не настроен собственный сервер доменных имен. |
После этого нужно будет придумать и дважды ввести пароль администратора домена.
Обратите внимание! Минимальная длина пароля — 7 символов. Если это условие не будет соблюдено или найдутся другие ошибки, придется вводить последнюю команду и все параметры заново.
На скриншоте видно, что подходящий конфигурационный файл Kerberos сгенерировался автоматически.
Вот его содержимое:
Однако этот файл нужен нам в другом месте. Вместо того, чтобы перемещать его, создадим ссылку там, где необходимо. Перед этим переименуем старый файл, чтобы избежать конфликта и не потерять исходный вариант.
sudo mv /etc/krb5.conf /etc/krb5.conf.old
sudo ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf
Параметр DNS Forwarder IP Adress — это адрес DNS-сервера, к которому будет выполнен запрос в том случае, если локальный, то есть, встроенный в Samba, сервер имен не найдет соответствия. Вы можете вписать сюда none, чтобы предотвратить разрешение доменных имен где-либо еще. При этом доступ к внешним сайтам по имени станет невозможным.
Настройка статического IP.
Динамически назначаемый IP-адрес — не лучшее решение для контроллера домена, он должен иметь статический IP. Для этого нужно знать имя сетевого интерфейса, а выяснить его можно так:
netstat -i
Затем открываем /etc/network/interfaces и приводим его примерно к следующему содержанию:
auto имя_интерфейса
iface имя_интерфейса inet static
address 192.168.0.100 (или другой ip, который будет иметь сервер)
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.100
dns-search имя_домена (sambadomain.test в моем случае)
Перезагружаемся и смотрим, все ли у нас получилось:
ip addr
Отлично, IP соответствует только что указанному в конфиге:
В качестве DNS я указал статический адрес, который был прописан для этого сервера. При разрешении имен запрос будет направлен к внутреннему DNS Samba, который мы уже настроили. И, если подходящий результат не будет найден, запрос перенаправится на 8.8.8.8, который мы указали в качестве дополнительного DNS.
Давайте проверим, все ли работает как надо:
ping google.com
Если google.com или любой другой сайт успешно пингуется, значит, доступ к сети вы не сломали и внешние имена благополучно разрешаются через удаленный DNS-сервер.
На этом пока все. Мы сделали немало, но впереди еще много интересного.