Этот текст основан на 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
adminpack sp2 xp/2003 x32 rus «Так как 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
adminpack sp2 xp/2003 x64 rus можно взять загрузочные скрипты (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 нет)