Вы здесь

Установка Samba 4 в качестве контроллера домена Active Directory на Debian Wheezy 7.0

Версия для печатиВерсия для печати

Установку будем проводить на системе с последними обновлениями. Хочу заметить что следует четко придерживаться последовательности вводимых команд для обеспечения успешной установки и конфигурирования. Отметим так же такой момент, что устанавливать будем актуальную на момент написания статьи версию Samba 4.1.2 из исходников на Debian Wheezy 7.0. Кроме того очень рекомендуется перед установкой провести обновление системы:

aptitude update
aptitude upgrade

Установим пакеты необходимые для сборки Samba 4 (подробную информацию по подготовке операционной системы можно найти на следующей странице http://wiki.samba.org/index.php/Samba_4/OS_Requirements):

aptitude 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 acl

Назначим нашему серверу статический IP, отредактировав файл /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.1
netmask 255.255.255.0
broadcast 192.168.3.255
dns-search test.loc
dns-domain test.loc
dns-nameservers 192.168.3.1

Приведем файл /etc/hosts к виду:

127.0.0.1 localhost
192.168.3.1 DC.TEST.LOC DC

Исправим hostname:

echo dc.test.loc > /etc/hostname

Перезагрузим сервер командой:

reboot

Выполним команды ниже:

hostname
hostname -f

Результатом выполнения обеих команд должно быть:

dc.test.loc

Теперь проверим конфигурацию ядра операционной системы.

cat /boot/config-`uname -r` | grep CONFIG_EXT

Если все нормально мы увидим следующее:

CONFIG_EXTRA_FIRMWARE=""
CONFIG_EXTCON=m
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_MAX8997=m
CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set

В нашем ядре есть поддержка XATTR, SECURITY и POSIX_ACL для файловых систем ext3 и ext4.

Посмотрим наш /etc/fstab.

Изменим строку

/dev/mapper/lvmbox-lvmroot / ext4 errors=remount-ro 0 1

на

/dev/mapper/lvmbox-lvmroot / ext4 errors=remount-ro,user_xattr,acl,barrier=1 1 1

И перезагрузим сервер.

Проведем тесты.

touch test.txt
setfattr -n user.test -v test test.txt
setfattr -n security.test -v test2 test.txt
getfattr -d test.txt

Результат должен быть такой:

file: test.txt
user.test="test"

Проверим security.test:

getfattr -n security.test -d test.txt

Результат:

file: test.txt
security.test="test2"

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

Для проверки поддержки ACL выполним с правами root:

touch test3.txt
setfacl -m g:adm:rwx test3.txt
getfacl test3.txt

Вывод последней команды должен быть:

group:adm:rwx

Далее, скачаем исходники Samba 4:

wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz

Теперь распакуем исходники:

tar xvf samba-latest.tar.gz

Перейдем в папку с распакованной Samba 4:

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

Сохраним предыдуший smb.conf:

mv /etc/samba/smb.conf{,.bak}

После установки сделаем символические ссылки:

mkdir /etc/samba
ln –s /usr/local/samba/etc/smb.conf /etc/samba
ln –s /usr/local/samba/sbin/* /usr/local/sbin
ln –s /usr/local/samba/bin/* /usr/local/bin

ВНИМАНИЕ: Замените значение realm на DNS-имя вашего сервера, domain на название домена (WINS), adminpass на желаемый пароль администратора PDC!

/usr/share/local/samba/bin/samba-tool domain provision --realm=TEST.LOC --domain=TEST --adminpass=SOMEPASSWORD \ 
--server-role='domain controller'

На данном этапе возможны сообщения типа «ERROR» и »… not found» , это нормально, кроме сообщения:

_ldb.LdbError: (19, '0000052D: Constraint violation - check_password_restrictions: 
the password does not meet the complexity criterias!')

Оно говорит о созданном пароле, не отвечающим критериям. В этом случае надо удалить smb.conf:

rm /etc/samba/smb.conf

и переконфигурировать предыдущей командой.

Поправим конфигурацию Bind9. Дописываем в конец файла /etc/bind/named.conf.local строчку:

include "/usr/local/samba/private/named.conf";

Далее заходим в /etc/bind/named.conf.options и добавляем следующие строчку:

tkey-gssapi-keytab “/usr/local/samba/private/dns.keytab”;

Далее выполняем следующие команды:

chgrp bind /usr/local/samba/private/dns.keytab
chmod g+r /usr/local/samba/private/dns.keytab

Теперь необходимо настроить резолвер. Добавляем в /etc/resolv.conf:

search TEST.LOC
domain TEST.LOC
nameserver 192.168.3.1

Но возникает очень серьезная проблема в Debian при перезагрузке либо при перезапуске сетевых интерфейсов (/etc/init.d/networking restart) происходит изменение файла /etc/resolv.conf. Обычно это происходит, если один из сетевых интерфейсов получает свой адрес по протоколу DHCP либо стоит специальная программа resolvconf, которая меняет конфигурацию файла resolv.conf. Рассмотрим вариант изменения конфигурации резолвера в случае использования DHCP-клиента. Нам надо добавить несколько строк в файл /etc/dhcp/dhclient.conf:

supersede domain-name “TEST.LOC”;
supersede domain-search “TEST.LOC”;
supersede domain-name-servers 192.168.3.1;

Переименовываем файл /etc/krb5.conf и копируем из директории Samba:

mv /etc/krb5.conf{,.bak}
cp /usr/local/samba/private/krb5.conf /etc/

Теперь проверим наличие в конфигурационном файле Kerberos (/etc/krb5.conf) следующих строк в секции [libdefaults]:

default_realm = TEST.LOC
dns_lookup_realm = false
dns_lookup_kdc = true

Примечание: название домена обязательно в верхнем регистре, иначе могут возникнуть ошибки.

Теперь добавим в секцию [realms] файла /etc/krb5.conf следующие строки:

TEST.LOC = {
    kdc = DC
    admin_server = DC
}

В секцию [domain_realm] файла /etc/krb5.conf:

.test.loc = TEST.LOC
test.loc = TEST.LOC

Теперь создадим скрипт для запуска Samba 4 (скрипт в готовом виде прикреплен к данной статье, поэтому можно скачать командой wget http://www.alexsey-smirnov.ru/sites/default/files/attachment/samba4.txt):

touch /etc/init.d/samba4
chmod +x /etc/init.d/samba4

Содержание скрипта следующее:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          samba4
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start Samba daemons
### END INIT INFO

#
# Start/stops the Samba daemon (samba).
# Adapted from the Samba 3 packages.
#

PIDDIR=/usr/local/samba/var/run
SAMBAPID=$PIDDIR/samba.pid

# clear conflicting settings from the environment
unset TMPDIR

# See if the daemon and the config file are there
test -x /usr/local/samba/sbin/samba -a -r /usr/local/samba/etc/smb.conf || exit 0

. /lib/lsb/init-functions

case "$1" in
    start)
        log_daemon_msg "Starting Samba 4 daemon" "samba"
        # Make sure we have our PIDDIR, even if it's on a tmpfs
        install -o root -g root -m 755 -d $PIDDIR

        if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then
            log_end_msg 1
            exit 1
        fi

        log_end_msg 0
        ;;
    stop)
        log_daemon_msg "Stopping Samba 4 daemon" "samba"

        start-stop-daemon --stop --quiet --name samba $SAMBAPID
        # Wait a little and remove stale PID file
        sleep 1
        if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
        then
            # Stale PID file (samba was succesfully stopped),
            # remove it (should be removed by samba itself IMHO.)
            rm -f $SAMBAPID
        fi

        log_end_msg 0

        ;;
    restart|force-reload)
        $0 stop
        sleep 1
        $0 start
        ;;
    *)
        echo "Usage: /etc/init.d/samba {start|stop|restart|force-reload}"
        exit 1
        ;;
esac

exit 0

Теперь добавим скрипт в автозагрузку:

insserv samba4
update-rc.d samba4 defaults

Перезапустим все службы:

/etc/init.d/networking restart
/etc/init.d/bind9 restart
/etc/init.d/samba4 start

Проверим работоспособность Kerberos:

kinit administrator@TEST.LOC

Если все хорошо команда попросит ввести пароль администратора домена Samba 4. При успешном вводе пароля выйдет сообщение о сроке действия пароля.

Проверяем работоспособность контроллера домена Samba 4:

smbclient -UAdministrator –Llocalhost

Ответом должно быть вроде этого:

Sharename       Type       Comment
 ---------       ----       -------
 netlogon        Disk      
 sysvol          Disk      
 IPC$            IPC        IPC Service
REWRITE: list servers not implemented

Правильность обновления DNS в Samba:

samba_dnsupdate -–verbose -–all-names

Если все нормально, то ошибок возникнуть не должно.

На этом начальная установка и настройка PDC завершена. На виндовом клиенте прописываем адрес нашего PDC в качестве первичного DNS-сервера, пингуем PDC по имени и вводим в домен (администратор домена - administrator)

Для управления доменом воспользуемся пакетом Adminpak.msi: для Windows 7, для Vista + RSAT, для Windows XP Pro + вторая часть.

Устанавливаем, в Меню выбираем пункт Выполнить, вбиваем dsa.msc, наслаждаемся).

Прикрепленные файлы: 
ВложениеРазмер
Иконка простого текстового файла Скрипт для запуска Samba 41.49 КБ