Active Directory на базе Ubuntu Linux


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat) Настройка рабочих станций под управлением Ubuntu Linux Мое портфолио, сертификаты и разработки
bind dns dns update firewall gita gita-dev.ru ldap samba winbind windows домен
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 3 недели, 3 дня)

Как вводить Linux в Windows домен я уже рассказывал, а сегодня мы построим полноценный домен Active Directory, где контроллером домена будет выступать Ubuntu Server. Я бы не рекомендовал вам использовать такое решение в продакшн в качестве полноценного RW-контроллера домена, путь и резервного, а в качестве Read Only контроллера домена я пробовал использовать Ubuntu Server и все работает отлично.

 

Еще одним применением такой конструкции может быть организация централизованного доступа (единый логин-пароль к сервисам) без использования Windows-сервера с Active Directory. Домен совместимый с Active Directory мы будем строить на базе Samba 4 и согласно официального сайта Samba (https://www.samba.org/) текущая версия SAMBA - Samba 4.9.0.

В поставку Linux-дистрибутива Ubuntu Server 16.04 входит samba версии:

# apt-cache policy samba
samba:
 Установлен: (отсутствует)
 Кандидат:  2:4.3.11+dfsg-0ubuntu0.16.04.16
 Таблица версий:
    2:4.3.11+dfsg-0ubuntu0.16.04.16 500
       500 http://ru.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
    2:4.3.11+dfsg-0ubuntu0.16.04.15 500
       500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
    2:4.3.8+dfsg-0ubuntu1 500
       500 http://ru.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Версия 4.3.11 это мягко говоря не первая свежесть и для наших задач сервер Active Directory лучше скомпилировать из исходных кодов последней стабильной версии.

Сборка Samba 4.9.0 из исходных кодов

Загружаем и распаковываем архив с текущей стабильной версией:

# cd /usr/src/
# wget https://download.samba.org/pub/samba/stable/samba-4.9.0.tar.gz
# tar -xvf ./samba-4.9.0.tar.gz
# cd ./samba-4.9.0/

Устанавливаем необходимые для сборки пакеты:

# aptitude install build-essential liblmdb++-dev libjansson-dev libkrb5-dev heimdal-multidev pkgconf
# aptitude install gnutls-dev libgpgme11-dev libarchive-dev libacl1-dev libldap2-dev libpam0g-dev libtasn1-bin
# aptitude install libfam-dev libncurses-dev liblmdb-dev
# cd /usr/src/
# wget http://www.digip.org/jansson/releases/jansson-2.11.tar.gz
# tar -xvf ./jansson-2.11.tar.gz
# cd /usr/src/jansson-2.11/
# ./configure
# make
# make install
# ldconfig
# cd /usr/src/samba-4.9.0/

Сборка:

# ./configure --with-gpgme --with-quotas --with-dnsupdate --with-automount \
   --with-cluster-support --with-regedit --with-ads --with-winbind --with-ads
# make && make install

Моя инфраструктура для тестирования Active Directory на базе Ubuntu Server

Внутренний домен internal.gita-dev.ru в идеале должен стать частью глобального домена gita-dev.ru, а часть внутренней сети 10.211.0.0/16 должна дополнительно обслуживаться DHCP-сервером и вводимые в домен рабочие станции должны автоматически регистрироваться в Active Directory DNS. Схему тестовой инфраструктуры Gita-DEV можно схематически описать следующим образом.

Конфигурационный файл контроллера домена

Конфигурационный файл smb.conf создается автоматически в процессе выполнения команды:

/usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --realm internal.gita-dev.ru \
--domain internal --server-role dc --dns-backend BIND9_FLATFILE \
--option="interfaces=lo master-bridge" --option="bind interfaces only=yes"

Пробежимся по всем указанным мной параметрам конфигурации:

--use-rfc2307 - обеспечивает поддержку одинаковых идентификаторов пользователей и групп в Linux-системах (я про эту проблему уже писал в статье про ввод Linux в Windows-домен)

--realm internal.gita-dev.ru - полное имя создаваемого домена (Kerberos realm)

--domain internal - NetBios имя домена (короткое)

--server-role dc - Роль сервера контроллер домена

--dns-backend BIND9_FLATFILE - информация о DNS-записях будет храниться в виде файла для bind (скоро этот удобный механизм удалят и придется использовать встроенные в Samba 4 механизмы DNS-сервера)

interfaces=lo master-bridge и bind interfaces only=yes - дополнительные параметры указывающие, что работать будем только со строго определенным набором интерфейсов.

Дополнительно можно указать еще и пароль администратора или вам его создадут автоматически. Если все прошло как надо, то вы получите следующее сообщение:

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=internal,DC=gita-dev,DC=ru
See /usr/local/samba/bind-dns/named.conf for an example configuration include file for BIND
and /usr/local/samba/bind-dns/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /usr/local/samba/private/krb5.conf
Merge the contents of this 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
Admin password:       xxxPasswordxxx
Server Role:          active directory domain controller
Hostname:             ad-1
NetBIOS Domain:       INTERNAL
DNS Domain:           internal.gita-dev.ru
DOMAIN SID:           S-1-5-21-3954735136-536341056-1970609469

Конфигурационный файл для контроллера домена довольно сильно отличается от типового файла клиента и выглядит следующим образом:

# Global parameters
[global]
       bind interfaces only = Yes
       interfaces = lo master-bridge
       netbios name = AD-1
       realm = INTERNAL.GITA-DEV.RU
       server role = active directory domain controller
       server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
       workgroup = INTERNAL
       idmap_ldb:use rfc2307 = yes

[netlogon]
       path = /usr/local/samba/var/locks/sysvol/internal.gita-dev.ru/scripts
       read only = No

[sysvol]
       path = /usr/local/samba/var/locks/sysvol
       read only = No

В файле /etc/hosts должен быть обязательно прописано полное доменное имя для ip-адреса контроллера домена:

127.0.0.1      localhost
10.211.0.4     ad-1.internal.gita-dev.ru

Домен у меня функционирует внутри VPN-тунеля, поэтому и адреса из VPN-сети, внешний интерфейс закрыт при помощи Firewall.

Тестовый запуск контроллера домена под управлением Ubuntu Linux

Устанавливаем керберос-сервер и копируем созданную конфигурацию:

# aptitude install krb5-config krb5-kdc
# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

Вы уже сейчас можете запустить Samba 4 в качестве контроллера домена, но при условии что у вас настроен bind на использование файла /usr/local/samba/bind-dns/dns/internal.gita-dev.ru.zone (он автоматически изменяется в процессе работы Samba DC). Давайте проведем тестовый запуск и посмотрим на содержимое этого файла. Запуск Samba 4 в режиме отладки производится командой:

# /usr/local/samba/sbin/samba -i -F -d 9

Созданный файл конфигурации DNS выглядит довольно монстроидально:

; -*- zone -*-
; generated by provision.pl
$ORIGIN internal.gita-dev.ru.
$TTL 1W
@              IN SOA ad-1  hostmaster (
                               2018091815  ; serial
                               2D             ; refresh
                               4H             ; retry
                               6W             ; expiry
                               1W )           ; minimum
                       IN NS  ad-1

           IN A   10.211.0.4
;

ad-1       IN A   10.211.0.4
gc._msdcs              IN A   10.211.0.4

172a423b-47f5-43ab-b24c-78b773da899a._msdcs    IN CNAME       ad-1
;
; global catalog servers
_gc._tcp               IN SRV 0 100 3268      ad-1
_gc._tcp.Default-First-Site-Name._sites IN SRV 0 100 3268      ad-1
_ldap._tcp.gc._msdcs   IN SRV 0 100 3268      ad-1
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs    IN SRV 0 100 3268 ad-1
;
; ldap servers
_ldap._tcp             IN SRV 0 100 389       ad-1
_ldap._tcp.dc._msdcs   IN SRV 0 100 389       ad-1
_ldap._tcp.pdc._msdcs  IN SRV 0 100 389       ad-1
_ldap._tcp.ee4751b1-6614-4254-80c2-c71873624c4c.domains._msdcs         IN SRV 0 100 389 ad-1
_ldap._tcp.Default-First-Site-Name._sites              IN SRV 0 100 389 ad-1
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs    IN SRV 0 100 389 ad-1
;
; krb5 servers
_kerberos._tcp         IN SRV 0 100 88        ad-1
_kerberos._tcp.dc._msdcs       IN SRV 0 100 88 ad-1
_kerberos._tcp.Default-First-Site-Name._sites  IN SRV 0 100 88 ad-1
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 88 ad-1
_kerberos._udp         IN SRV 0 100 88        ad-1
; MIT kpasswd likes to lookup this name on password change
_kerberos-master._tcp          IN SRV 0 100 88        ad-1
_kerberos-master._udp          IN SRV 0 100 88        ad-1
;
; kpasswd
_kpasswd._tcp          IN SRV 0 100 464       ad-1
_kpasswd._udp          IN SRV 0 100 464       ad-1
;
; heimdal 'find realm for host' hack
_kerberos              IN TXT INTERNAL.GITA-DEV.RU

Одной из целей которые я ставил при тестировании такого подхода, это интегрировать глобальный домен с внутренним и для этого нам потребуется создать так называемую зону условной пересылки. Перед тем как создавать зону условной пересылки, нам надо запустить bind на использование этих конфигурационных файлов, а начнем с установки пакетов:

# aptitude install bind9 bind9utils

Для настройки, просто создадим символическую ссылку на автообновляемую конфигурацию:

# cd /etc
# mv ./bind ./bind.bak
# ln -s /usr/local/samba/bind-dns /etc/bind
# chown -R bind:bind /usr/local/samba/bind-dns

Перезапускаем bind и проверяем, что все работает, для проверки работоспособности запросим несколько специфичных DNS-записей контроллера домена, например:

# nslookup gc._msdcs.internal.gita-dev.ru 127.0.0.1
Server:        127.0.0.1
Address:       127.0.0.1#53

Name:  gc._msdcs.internal.gita-dev.ru
Address: 10.211.0.4

Как вы видите, мы запрашиваем данные у локального DNS-сервера, а хотелось бы интегрировать запросы в глобальный домен. И это очень интересная задача у которой есть несколько путей решения. В результате ряда экспериментов, я пришел к выводу, что разумнее всего использовать stub-зоны, но для этого необходимо разрешить трансфер зоны с контроллера домена на наш виртуальный slave.

По умолчанию трансфер зоны естественно запрещен:

# dig AXFR internal.gita-dev.ru @10.211.0.4

Настроить трансфер зоны вы можете отредактировав конфигурационный файл (если вы используете bind_flat), а для режима встроенного DNS-сервера это пока не поддерживается.

На вышестоящем сервере соответственно прописываем передачу зоны для субдомена:

zone "internal.gita-dev.ru" {
   type stub;
   masters { 10.211.0.4; };
   file "internal.gita-dev.ru.db";
   check-names warn;
};

Автоматический запуск Samba 4 при старте сервера

Так как мы собрали Samba 4 из исходных кодов, то и механизмы автозапуска нам естественно придется сделать самостоятельно. Для автозапуска Samba я использую простой конфигурационный файл службы для SystemD. Создайте файл /lib/systemd/system/samba-ad-dc.service, со следующим содержимым:

[Unit]
Description=Samba Active Directory Domain Controller
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/samba/sbin/samba -D
PIDFile=/usr/local/samba/var/run/samba.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Настраиваем автозапуск и запускаем службу:

# systemctl enable samba-ad-dc
# systemctl start samba-ad-dc

Вводим рабочую станцию под управлением Windows 10 в созданный домен Active Directory

Для управления созданным доменом Active Directory можно при помощи консольной утилиты samba-tool. Для быстрого доступа без указания полного пути иы создаем символическую ссылку на нее:

# ln -s /usr/local/samba/bin/samba-tool /usr/bin/samba-tool

И хотя управлять созданным доменом можно из консоли, тем более что графических утилит управления AD в Linux так и не появилось, на практике это не очень удобно и например понижение политики сложности паролей выглядит следующим образом:

# samba-tool domain passwordsettings set --complexity=off\
  --min-pwd-length=3 --max-pwd-age=0\ 
  --min-pwd-age=0 --history-length=0

А запрос сведений о текущей политике паролей соответственно:

# samba-tool domain passwordsettings show
Password informations for domain 'DC=internal,DC=gita-dev,DC=ru'

Password complexity: on
Store plaintext passwords: off
Password history length: 24
Minimum password length: 7
Minimum password age (days): 1
Maximum password age (days): 42
Account lockout duration (mins): 30
Account lockout threshold (attempts): 0
Reset account lockout after (mins): 30

Сменить пароль администратора можно командой:

# samba-tool user setpassword Administrator

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

Ввод рабочей станции Windows в домен контролируемый контроллером домена под управлением Ubuntu Linux ничем не отличается от ввода в домен контролируемый контроллером домена Windows и установка инструментов управления тоже довольно типовая, но я на всякий случай я подготовил для вас видео.

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

Моя официальная страница на FaceBook
Мой микроблог в твиттер

Полноценный ввод рабочей станции Ubuntu Linux в Windows-домен

Полноценный ввод рабочей станции Ubuntu Linux в Windows-домен

Рабочая станция или сервер под управлением Linux-дистрибутива в Windows домене, миф или реальность? Давно уже не только реальность, а еще и достаточно типовая задача решаемая при помощи пошаговой инструкции, а если ее переложить в виде скрипта, то ввод в домен будет не сложнее чем при использовании родных утилит Windows. Так как последние версии Samba позволяют вводить рабочую станцию или сервер под управлением OS Linux в домен Windows практически без "танцев с бубном", мы проработали подробный план по вводу в домен для систем на базе Ubuntu Linux. Данная инструкция была многократно опробирована, как в рамках крупных проектов, так и типовых интерграций Ubuntu Workstations с Windows Active Directory.


Устранение проблем с разрешением DNS-имен для домена .local в современенных дистрибутивах Linux

Устранение проблем с разрешением DNS-имен для домена .local в современенных дистрибутивах Linux

То, что мы сегодня будем разбирать - это не проблема, а просто "песня". Такого рода вопросы очень любят мои коллеги, так как они предоставляют им возможность поспорить на тему баг это или фича, перетряхнуть древние записи на Stack Overflow, разлиться мыслью по древу или банально затеять обсуждение на пару сотен комментариев под заданным в профильной группе вопросом.


RhodeCode интеграция с Active Directory

RhodeCode интеграция с Active Directory

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


Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

После выхода Samba 4 ввести рабочую станцию под управлением Linux в Windows домен стало гораздо проще, но все еще переодически всплывают нестандартные ситации такие как ошибка No DNS domain configured for computer. Unable to perform DNS Update.


Как вы наверное понимаете, бесплатно сейчас работать никто не будет и если ответ на ваш вопрос потребует больше трех минут времени и вам требуется полноценная консультация, то расценки на мои услуги представленны ниже.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .