Установку будем проводить на системе с последними обновлениями. Хочу заметить что следует четко придерживаться последовательности вводимых команд для обеспечения успешной установки и конфигурирования. Отметим так же такой момент, что устанавливать будем актуальную на момент написания статьи версию 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, наслаждаемся).