Контроллер доменов AD Samba4 на базе Ununtu
![](/images/news/samba4.jpg)
Как поднять контроллер AD на базе Linux и Samba 4.
Все будет базироваться на серверной версии UBUNTU 16.04.4
Некоторые данные для будущего сервера:
- IP адрес сервера: 192.168.55.11/24
- Шлюз в сети: 192.168.55.1
- DNS: 192.168.55.1
- Доменное имя, которое будет применяться в организации: DOMAIN.NAME
- Имя сервера: ad1 (делаем основной сервер AD, в дальнейшем поднимем резервный)
Как устанавливать UBUNTU-SERVER, думаю нет смысла описывать, поэтому сразу к сути.
Настроим сетевую карту, но сперва узнаем, как она обзывается в системе командой
# ifconfig -a
ens160 Link encap:Ethernet HWaddr 00:0b:29:02:21:ac
inet addr:192.168.55.11 Bcast:192.168.55.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:22ac/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:523579 errors:0 dropped:808 overruns:0 frame:0
TX packets:31913 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:47263740 (47.2 MB) TX bytes:8491826 (8.4 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:6852 errors:0 dropped:0 overruns:0 frame:0
TX packets:6852 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:699385 (699.3 KB) TX bytes:699385 (699.3 KB)
в нашем случае это ens160,
далее правим файл настроек:
$ sudo nano /etc/network/interfaces
нужно чтоб выглядело вот так:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
iface ens160 inet static
address 192.168.55.11
gateway 192.168.55.1
netmask 255.255.255.0
dns-nameservers 127.0.0.1 192.168.55.1
dns-search domain.name
auto ens160
Следом нужно просмотреть файл fstab командой:
$ sudo nano /etc/fstab
для проверки активации ACL.
Если такое отсутствует, то нужно дописать acl:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=0a0e8c94-72a4-4325-ad63-126f871bef62 / ext4 errors=remount-ro,acl 0 1
# /home was on /dev/sda2 during installation
UUID=6bd8b8d0-5650-4422-a414-c8d5a3bcd44f /home ext4 defaults,acl 0 2
# swap was on /dev/sda3 during installation
UUID=18fc300a-8a86-11e8-a4a1-000c290222ac none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
И перезагружаем наш сервер:
$ sudo reboot
Подготовительные работы закончены, переходим к основным действиям:
Обновляем все что можно:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
Задаем имя нашего сервера в будущем домене:
$ sudo hostnamectl set-hostname ad1
Можно проверить или скорректировать, открыв файл
$ sudo nano /etc/hostname
GNU nano 2.5.3
File: /etc/hostname
ad1
Устанавливаем необходимые нам пакеты:
$ sudo apt-get install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind
В процессе установки Kerberos, система задаст несколько вопросов чтоб настроить контроллер домена :
Default Kerberos version 5 realm : DOMAIN.NAME (!!большими буквами)
Kerberos servers for your realm: domain.name
Administrative server for your Kerberos realm: domain.name
После окончания установки, останавливаем всех демонов Самбы:
$ sudo systemctl stop samba-ad-dc.service smbd.service nmbd.service winbind.service
$ sudo systemctl disable samba-ad-dc.service smbd.service nmbd.service winbind.service
И удаляем стандартный конфигурационный файл Samba, т.к. в процессе предоставления домена, Самба создаст новый conf-файл и если не удалить, то выкинет с ошибкой. Хотя, лучше не удалять, а просто переименовать:
$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.back
Начинаем священнодействовать с Cамбой и создавать наш контроллер домена:
$ sudo samba-tool domain provision --use-rfc2307 --interactive
В интерактивном режиме можно наблюдать за конфигурацией и отвечать на некоторые вопросы…
Как рекомендуют на одном буржуйском ресурсе, все лучше оставить по дефолту, кроме первой строки, тут мы указываем наш домен заглавными буквами.
Realm: DOMAIN.NAME
Дальше везде жмем Enter, кроме Administrator password: — здесь надо постараться придумать пароль администратора домена… и в следующей строке подтвердить его.
Переименовываем или удаляем конфигурационный файл Kerberos и задаем символический линк вместо него на другой conf-файл и стартуем демон Samba AD DC:
$ sudo mv /etc/krb5.conf /etc/krb5.conf.back
$ sudo ln -s /var/lib/samba/private/krb5.conf /etc/
$ sudo systemctl start samba-ad-dc.service
$ sudo systemctl enable samba-ad-dc.service
Перезапускаем сервер целиком.
По сути, наш контроллер домена готов. Чтоб убедиться, что мы все сделали верно, проведем несколько тестов. Начнем проверять верным пингом, просмотрим, как все резолвится:
$ ping domain.name
$ ping ad1.domain.name
$ ping ad1
Если все работает, мои поздравления, значит с преобразованием имен проблем нет.. И сделаем несколько запросов контроллеру домена:
$ host -t A domain.name
$ host -t A ad1.domain.name
$ host -t SRV _kerberos._udp.domain.name
$ host -t SRV _ldap.tcp.domain.name
На всякий случай убедимся в работе Kerberos, проверив аутентификацию запросом тикета для админской учетки и проверкой его кеширования.
kinit Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
klist
После первой команды вводим пароль администратора домена (не путать с админским паролем в Ubuntu), система ругнется, предупредив, что ваш пароль будет действовать примерно 40 дней… пропускаем это предупреждение мимо ушей, главное, аутентификация работает.. Вторая команда покажет путь кеширования вашего тикета, когда создан, когда закончится… Если это так, то Kerberos также отрабатывает то, что от него требуется.
Казалось бы, можно начинать вводить виндовые машины в домен, однако нужно сперва создать и запустить сервис синхронизации времени, т.к. расхождение более чем в 5 минут уже будет создавать проблемы при присоединении к домену. Для этого мы установим и настроим NTP -демон.
Устанавливаем его командой:
$ sudo apt-get install ntp ntpdate
Далее правим config-файл службы:
$ sudo nano /etc/ntp.conf
после строки driftfile /var/lib/ntp/ntp.drift добавляем строку
ntpsigndsocket /var/lib/samba/ntp_signd/
Это позволит клиентским машинам отправлять NTP-запросы к серверу используя Active Directory
Следующий момент — тут по желанию, однако я поменял в блоке серверов NTP серверы точного времени с дефолтных на родные, российские…
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
# pool 0.ubuntu.pool.ntp.org iburst
# pool 1.ubuntu.pool.ntp.org iburst
# pool 2.ubuntu.pool.ntp.org iburst
# pool 3.ubuntu.pool.ntp.org iburst
pool ntp1.stratum2.ru iburst
pool ntp2.stratum2.ru iburst
pool ntp3.stratum2.ru iburst
pool ntp4.stratum2.ru iburst
pool ntp5.stratum2.ru iburst
# Use Ubuntu's ntp server as a fallback.
pool ntp1.stratum1.ru
И, наконец, после строк: # Needed for adding pool entries
restrict source notrap nomodify noquery
добавляем строку
restrict default kod nomodify notrap nopeer mssntp
Закрываем, сохраняем…
Даем службе NTP разрешение на чтение NTP-signed и перезапускаем службу:
$ sudo chown root:ntp /var/lib/samba/ntp_signd/
$ sudo chmod 750 /var/lib/samba/ntp_signd/
$ sudo systemctl restart ntp
Когда я пытался провести тест с синхронизацией времени, командой
$ sudo ntpdate -qu ad1
Система вернула мне ошибку, что отсутствуют серверы для синхронизации. Может я где-то нарукожопил, однако на всякий случай припишу сюда команду принудительной синхронизации:
Сперва останавливаем демона NTP:
$ sudo systemctl stop ntp.service
Далее заставляем эту заразу работать вручную:
$ sudo ntpdate -b ntp2.stratum2.ru
Возвращаем ей демона обратно и проверяем:
$ sudo systemctl start ntp.service
$ sudo systemctl status ntp.service
Если все ровно, получим следующее:
● ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp; bad; vendor preset: enabled)
Active: active (running) since Сб 2018-07-21 18:49:44 +05; 21h ago
Docs: man:systemd-sysv-generator(8)
Process: 1068 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
Tasks: 1
Memory: 1.6M
CPU: 4.443s
CGroup: /system.slice/ntp.service
└─1144 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:118
июл 21 18:49:49 ad1 ntpd[1144]: Soliciting pool server 88.147.254.234
июл 21 18:49:52 ad1 ntpd[1144]: Soliciting pool server 91.189.89.198
июл 21 18:49:53 ad1 ntpd[1144]: Soliciting pool server 91.189.89.199
июл 21 18:49:54 ad1 ntpd[1144]: Soliciting pool server 91.189.94.4
июл 21 18:49:55 ad1 ntpd[1144]: Soliciting pool server 91.189.91.157
июл 21 18:49:55 ad1 ntpd[1144]: Soliciting pool server 2001:67c:1560:8003::c8
июл 21 18:49:55 ad1 ntpd[1144]: receive: Unexpected origin timestamp from 88.147.254.230
июл 21 18:58:54 ad1 ntpd[1144]: 91.189.89.199 local addr 192.168.55.11 -> <null>
июл 21 18:58:54 ad1 ntpd[1144]: 91.189.89.198 local addr 192.168.55.11 -> <null>
июл 21 18:59:45 ad1 ntpd[1144]: 91.189.94.4 local addr 192.168.55.11 -> <null>
Теперь проведем тестирование работы NTP:
$ sudo ntpdate -du ad1.domain.name
Убеждаемся, что наша служба синхронизации времени работает как положено.
На этом все работы по созданию основного контроллера домена закончены.
Однако, как изестно, два лучше одного и от резервирования никогда не стоит отказываться. Поэтому, следующая задача — поднятие вторичного контроллера домена. Но об этом позже…
- RusLan