Контроллер доменов AD Samba4 на базе Ununtu

. (Part.1) (Part.2) (Part.3)

Задача: есть коммерческая фирма, с постоянно растущим количеством сотрудников, есть необходимость в централизованном управлении пользовательскими машинами, регулировании прав доступа и прочими стандартными требованиями… И при этом нужно сделать все так, чтоб все было честно, без пиратства, ну и не тратить денежные средства на творения мелкомягких жлобов от программирования хотя бы в серверном сегменте.

А поможет в этом старая добрая samba на базе серверной версии UBUNTU 16.04 (точнее, на момент написания статьи, была использован релиз 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:

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

Можно проверить или скорректировать, открыв файл /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, система задаст несколько вопросов чтоб настроить контроллер домена :

  1. Default Kerberos version 5 realm : DOMAIN.NAME   (!!большими буквами)
  2. Kerberos servers for your realm: domain.name
  3. 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 administrator@DOMAIN.NAME
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

Убеждаемся, что наша служба синхронизации времени работает как положено.

На этом все работы по созданию основного контроллера домена закончены.

Однако, как изестно, два лучше одного и от резервирования никогда не стоит отказываться. Поэтому, следующая задача — поднятие вторичного контроллера домена. Но об этом позже…

One thought on “Контроллер доменов AD Samba4 на базе Ununtu”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

один × четыре =

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)