Skip to content

Document Header

Установка и настройка samba 4 server в режиме Domain Controller

Установка и настройка samba 4 server в режиме Domain Controller published on 33 комментария к записи Установка и настройка samba 4 server в режиме Domain Controller

Этот текст основан на Samba 4 AD DC HOWTO, но имеет некоторые существенные дополнения.

Если вы собираете samba 4 из исходников и у вас нет 100% уверенности в успехе, то настоятельно рекомендую 1-ую установку проводить на тестовом стенде. Samba 4 критична к зависимостям, установка пройдет без ошибок, а проблемы могут возникнуть на стадии поднятия AD или при работе с ним.

При установке будем использовать:
Installation Directory: /usr/local/samba
Server Hostname: pdc
DNS Domain Name: test.loc
NT4 Domain Name: test
IP Address: 192.168.1.2
Server Role: DC

Скачиваем последний релиз samba 4 с официального сайта. В моем случае это 4.0.3

Распаковываем:

# tar –zxf samba-4.0.3.tar.gz

Установка/обновление

Если хотите «отловить» не установленные зависимости или дополнительные компоненты можно, например, так:

# ./configure --enable-debug --enable-selftest > /root/samba4.log 2>&1
# cat /root/samba4.log | grep "not found" > /root/samba4_not_found.log

Стандартная установка, рекомендованная разработчиками такая:

# ./configure --enable-debug --enable-selftest
# make
# make install

Добавляем запись в /etc/resolv.conf:

domain test.loc
nameserver 192.168.1.2

C wikipedia: «Так как Avahi использует зону .local для своих целей, эту зону нельзя использовать в локальной сети. Однако .local может уже использоваться в локальной сети, и перестраивать сетевую адресацию будет накладно»

avahi пока пользоваться не доводилось, поэтому выкладываю как есть.

Запуск скрипта установки:

# /usr/local/samba/bin/samba-tool domain provision

Если название сервера было предварительно сконфигурировано, можно соглашаться, нажимая enter

Realm [TEST.LOC]: TEST.LOC
Domain [TEST]: TEST
Server Role [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: SAMBA_INTERNAL
DNS forwarder IP address (write 'none' to disable forwarding) [8.8.8.8]: 8.8.8.8
При начальной установке SAMBA_INTERNAL не умеет обрабатывать (resolve) внешние адреса (например, адреса интернет). Для этого стоит использовать внешний DNS forwarder IP address.
Administrator Password:

Требуется использовать стойкий пароль, включающий минимальную длину и «сложность».

После этого создается AD и устанавливается схема по умолчанию windows 2003R2.

До запуска samba я бы рекомендовал добавить следующую строку в /usr/local/samba/etc/smb.conf:

Allow dns updates = True | signed

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

true – неподписанное обновление
signed – только подписанное обновление
false – без обновления

Можно так же создать тестовую общую папку share и прописать ее в конфигурационный файл /usr/local/samba/etc/smb.conf.
В моем случае это выглядит так:

# Global parameters
[global]
workgroup = TEST
realm = TEST.LOC
netbios name = PDC
server role = active directory domain controller
allow dns updates = True
dns forwarder = 8.8.8.8

[netlogon]
path = /usr/local/samba/var/locks/sysvol/test.loc/scripts
read only = No

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

[share]
path = /share
comment = Share
read only = No

Если samba4 собрала свой Kerberos, а проверить это можно наличием файла /usr/local/samba/private/krb5.conf, то стандартный файл Kerberos, который обычно лежит в /etc лучше куда-нибудь переместить. А на его месте лучше создать ссылку:

# ln -s /usr/local/samba/private/krb5.conf /etc/

Примечание: Я сначала удалил стандартный /etc/krb5.conf как и предлагалось на официальном сайте, но при автообновлении пакетов моего дистрибутива стандартный файл был автоматически создан заново. Что привело к проблемам kinit/klist.

Сам же /usr/local/samba/private/krb5.conf должен выглядеть примерно так:

[libdefaults]
default_realm = TEST.LOC
dns_lookup_realm = false
dns_lookup_kdc = true

Перед запуском samba 4 не забудьте остановить другую версию samba (если имеется и запущена), а так же named, если будете использовать samba 4 DNS.

Запускаем samba:

# /usr/local/samba/sbin/samba

для отладки я пользовался

# /usr/local/samba/sbin/samba -i --debuglevel=9

На сайте производителя так же рекомендовано использовать:
Для разработчиков

# /usr/local/samba/sbin/samba -i -M single

Для отладки (samba запускается, ограничиваясь единым процессом, все сообщения журнала печатаются в стандартный вывод)

# gdb --args /usr/local/samba/sbin/samba -i -M single

Здесь можно взять загрузочные скрипты (initscripts) для различных ситем

При старте samba у меня открываются следующие порты tcp:

# nmap -sS 127.0.0.1

PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
636/tcp  open  ldapssl
1024/tcp open  kdm
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl

При старте samba у меня открываются следующие порты udp:

# nmap -sU 127.0.0.1

PORT     STATE         SERVICE
53/udp   open          domain
88/udp   open|filtered kerberos-sec
137/udp  open          netbios-ns
138/udp  open|filtered netbios-dgm
389/udp  open|filtered ldap
464/udp  open|filtered kpasswd5
631/udp  open|filtered ipp (cups)

Если все нормально, то стоит пройти ряд тестов, что убедиться, что все у нас в порядке с sambaclient, dns, Kerberos.

sambaclient

Запускаем:

$ /usr/local/samba/bin/smbclient -L localhost -U%

Получаем:

Sharename       Type      Comment
---------       ----      -------
IPC$            IPC       IPC Service (Samba 4.0.3)
share           Disk      Share
sysvol          Disk
netlogon        Disk

Если проблемы, делаем следующее:

# killall samba
# rm -v -- /usr/local/samba/var/run/smbd-fileserver.conf.pid
# /usr/local/samba/sbin/samba

Проверяем аутентификацию в домене. Запускаем:

$ smbclient //localhost/netlogon -UAdministrator%'p4$$word' -c 'ls'

Получаем:

Domain=[TEST] OS=[Unix] Server=[Samba 4.0.3]
.                                   D        0  Wed Sep 12 21:00:36 2012
..                                  D        0  Wed Sep 12 21:02:28 2012

dns

$ host -t SRV _ldap._tcp.test.loc.
_ldap._tcp.test.loc has SRV record 0 100 389 dc.test.loc.
$ host -t SRV _kerberos._udp.test.loc.
_kerberos._udp.test.loc has SRV record 0 100 88 pdc.test.loc.
$ host -t A pdc.test.loc.
pdc.test.loc has address 192.168.1.2

Примечание: Если вы выбрали DNS SAMBA_INTERNAL, то какая-либо дополнительная настройка, включая динамическое обновление не требуется. Настройку Bind описывать не буду, так как сам не пробовал. Почитать об этом можно в оригинальной статье.
Динамическое обновление DNS стартует каждые 10 минут и использует утилиту samba_dnsupdate. Чтобы динамическое обновление в принципе было возможным нужна утилита  nsupdate из комплекта Bind. Для проверки можно использовать:

# /usr/local/samba/sbin/samba_dnsupdate --verbose --all-names

Kerberos

В следующей команде название домена ОБЯЗАТЕЛЬНО В ВЕРХНЕМ РЕГИСТРЕ.

$ kinit administrator@TEST.LOC
Password:

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@TEST.LOC

Valid starting     Expires            Service principal
02/10/10 19:39:48  02/11/10 19:39:46  krbtgt/TEST.LOC@TEST.LOC

В случае проблем проверяйте /etc/resolve.conf и /usr/local/samba/share/setup/krb5.conf с настройками, описанными выше.

Настройка NTP

dhcp-server сообщает компьютерам с динамическими адресами ip адрес локального сервера NTP. Если вы используете dhcpd, то нужно добавить следующую строку в dhcpd.conf


option    ntp-servers 192.168.1.2;


Примечание: Вообще расхождение времени более чем на 5 минут между клиентом и сервером было серьезной проблемой при авторизации samba 3.x в домене. Клиенты Kerberos не могли пройти проверку подлинности на сервере.
Эта синхронизация требовалась для предотвращения возможности использования атакующим старого аутентификатора, чтобы замаскироваться под легального пользователя.
На клиентах в домене samba 4 для теста я сбил время и дату на несколько суток, часов, минут назад. При этом мне удавалось не только авторизовываться, но и добавлять компьютеры в домен. А при 1-ом входе компьютера в домен часы синхронизировались.
Однако, расхождение во времени стало проблемой при добавлении windows контроллеров домена и репликацией между windows домен контроллерами и samba 4 dc.

Для корректной работы ntpd вам потребуется версия ntpd (=>4.2.6) поддерживающая signed ntp. Т.е. версия поставляемая с  RHEL6 и Ubuntu < 11.04 старая. Ntpd в Debian Squeeze поддерживает signed ntp.

Если у вас старая версия, то сервис ntpd будет запускаться корректно, при этом в логах (в моем случае в /var/log/messages) будет писать что-то вроде:

configure: keyword "mssntp" unknown, line ignored
configure: keyword "ntpsigndsocket" unknown, line ignored
configure: keyword "mssntp" unknown, line ignored

Синхронизация при этом происходить не будет.

Для того, чтобы заработала синхронизация времени добавляем в ntp.conf минимальный набор строк:

ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default mssntp

Можно добавить такой набор строк в ntp.conf:

server 127.127.1.0
fudge 127.127.1.0  stratum 12
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default mssntp

Ну, а это расширенный набор ntp.conf:

server 127.127.1.0
fudge  127.127.1.0 stratum 10
server 0.pool.ntp.org  iburst prefer
server 1.pool.ntp.org  iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

Дальше можно приступить к администрированию AD либо средствами samba, либо средствами windows. Об этом в следующей статье.

Ссылки на пакеты администрирования для windows:
adminpack sp2 xp/2003 x32 rus
adminpack sp2 xp/2003 x64 rus
rsat for win 7 sp1 x32/x64 rus
rsat for win 8 x32/x64 rus
rsat for win 8.1 x32/x64 rus
gpmc sp1 xp/2003 x32 eng (для xp/2003 x64 gpmc нет)

Требования к ОС Samba 4 server в режиме Domain Controller

Требования к ОС Samba 4 server в режиме Domain Controller published on Комментариев к записи Требования к ОС Samba 4 server в режиме Domain Controller нет

Данный текст является переводом Samba 4 AD DC HOWTO Samba_OS_Requirements, с некоторыми дополнениями из практики. Установка проводилась на тестовом стенде на Linux RHEL Scientific 6.3/RHEL 6.4
Если вы собираете samba 4 из исходников, то настоятельно рекомендую 1-ую установку проводить на тестовом стенде. Samba 4 критична к зависимостям. Некоторые не обнаруженные компоненты, требуемых версий samba 4 установит сама и будет корректно работать. Например:
tdb
pylloc-util
popt
ldb
pyldb-util
Однако, без некоторых зависимостей samba 4 нормально соберется и установится, но проблемы начнутся на стадии создания AD или последующей работе в домене.
Для отслеживания зависимостей я использовал:

./configure --enable-debug --enable-selftest > /root/samba4.log 2>&1
cat /root/samba4.log | grep "not found" > /root/samba4_not_found.log

Требования:

Необходимо:

Python большая часть samba 4 написана на питоне, включая сборку системы на waf.

Желательно:

acl – требуется для успешного создания в режиме AD DC. При отсутствии этой библиотеки, самба нормально соберется, но не будет доступна возможность изменения ACL под управлением windows. Будут возникать ошибки при создании AD при помощи установочного скрипта (provision) или при создании smb.conf вручную с +s3fs.
Xattr
Blkid
Gnutls
Readline
Openldap – В официальном HOWTO сказано: «требуется для сборки samba 3 с поддержкой LDAP. Если этого компонента не будет, самба соберется, но не удастся обновить AD существующего домена samba 3, через установочный скрипт (provision).» Однако, практика показала, что без наличия установленного openldap скрипт provision отказывается не только обновить существующий AD, но и создать новый.
С другой стороны (для RHEL) наличие в системе предустановленного пакета openldap-servers мешало корректному запуску samba 4 и открытию tcp портов:
636/tcp ldapssl
3268/tcp globalcatLDAP
3269/tcp globalcatLDAPssl
Следовательно, не удавалось получить доступ к глобальному каталогу со всеми вытекающими последствиями.
cups – общий доступ для принтеров
bsd или setproctitle — for process title updating support
xsltproc and docbook XSL stylesheets – для руководств (man) и документации

Для различных ОС стоит учитывать особенности версий python, kerberos и bind (если решите его использовать)
Для корректной работы с acl требуется поддержка расширенных атрибутов файлов (xattr) файловой системой.
Если ваша файловая система не поддерживает расширенных атрибутов xattr, то вы можете имитировать его, добавив следующую строку в файл smb.conf:

posix:eadb = /usr/local/samba/eadb.tdb

Это поместит все дополнительные атрибуты (NT ACLs, DOS EAs, streams etc), в tdb. По мнению разработчиков это не эффективно, и не очень хорошо масштабируется.

Debian или Ubuntu

Fedora

Red Hat Enterprise Linux или CentOS

openSUSE

Gentoo

Поддержка файловых систем

Debian / Ubuntu

Debian / Ubuntu published on Комментариев к записи Debian / Ubuntu нет


# apt-get install 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 krb5-user docbook-xsl libcups2-dev

Примечание: docbook-xsl, xsltproc, and inkscape – могут потребоваться для сборки руководств (man).
Примечание: если требуется поддержка pam winbind, нужно установить пакет libpam0g-dev

Для использования Dynamically Loadable Zones (DLZ) с Bind on Debian Lenny

Если вы хотите использовать Dynamically Loadable Zones (DLZ), добавьте соответствующую опцию (dlopen) в зависимости от версии bind. Для сборки скаченного архива могут понадобиться библиотеки: libkrb5-dev and libssl-dev

$ apt-get install libkrb5-dev libssl-dev
$ tar -zxvf bind9.x.x.tar.gz
$ cd bind9.x.x

Bind9.8.0

$ ./configure --with-gssapi=/usr/include/gssapi  --with-dlz-dlopen=yes

Bind9.8.1

$ ./configure --with-gssapi=/usr/include/gssapi  --with-dlopen=yes
$ make
$ make install

Red Hat Enterprise Linux или CentOS

Red Hat Enterprise Linux или CentOS published on Комментариев к записи Red Hat Enterprise Linux или CentOS нет


# yum install gcc libacl-devel libblkid-devel gnutls-devel
readline-devel python-devel gdb pkgconfig krb5-workstation
zlib-devel setroubleshoot-server
setroubleshoot-plugins policycoreutils-python
libsemanage-python setools-libs-python setools-libs
popt-devel libpcap-devel sqlite-devel libidn-devel
libxml2-devel libacl-devel libsepol-devel libattr-devel
keyutils-libs-devel cyrus-sasl-devel cups-devel

Примечание: docbook-style-xsl.noarch и libxslt.x86_64 нужны для руководств (man).