Это старая версия документа!


Статья не законченна! Продолжение следует!
Контролер домена на базе Samba4


Дано:

Домен TRANSIT
Realm TRANSIT.LOCAL
Контролер домена DC1.TRANSIT.LOCAL
IP контролера домена 192.168.10.188
IP шлюза и сервера времени 192.168.10.250
Тестовый компьютер с Windows XP SP3 WIN-NOUTE
IP тестового компьютер с Windows XP SP3 192.168.10.199
Тестовый компьютер с Windows 7 (32bit) WIN7-TEST
IP тестового компьютер с Windows 7 (32bit) 192.168.10.198
Администратор домена Administrator
Пользователь домена v_pupkin
Система Slackware 14.0, ядро 3.2.29-smp без KDE и всем, что с ним связано.


Размышления

Вообще-то я против размещения файлового сервера и контролера домена на одном компьютере. Но ради демонстрации разграничений прав доступа, без дополнительной машины - файлового сервера, всё будет на одном контролере домена. Не понятные мне моменты я буду описывать. И очень бы хотел, чтобы знающие люди объяснили мне, почему так происходит или так и должно быть. Буду весьма признателен!

Подготовка и настройка

Для домашних папок (профилей) пользователей выделим отдельный диск /dev/sdb и отформатируем его в ext4. Единственный раздел диска /dev/sdb1 будем монтировать как /home со спец опциями для возможности раздачи прав. Для этого добавим строчку в /etc/fstab.

/dev/sdb1        /home            ext4        user_xattr,acl,barrier=1         1   1

Далее, удалим пакеты bind, samba и ntp, скачаем последние версии и пересоберем их. В принципе, можно эти пакеты не удалять, а потом просто обновить, но для чистоты эксперимента я их удалил. Кроме того, нам понадобится еще и Kerberos. Разработчики самбы советуют использовать heimdal, но у меня с MIT Kerberos динамические обновления DNS работали в десятки раз быстрее и обновлялись PTR записи, чего не скажешь об heimdal. Я покажу как собрать bind и для того и для другого, но кто какой будет использовать в работе - решайте сами :) .

Сервер времени (ntpd)

Установим и настроим сервер времени на нашем контролере домена, который будет «черпать» время с нашего шлюза и с которым компьютеры сети будут синхронизироваться (позже, настроим это в групповых политиках). Как настроить сервер времени на внешние сервера, в примере наш шлюз, можно почитать ТУТ .

 
# removepkg ntp* 
# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz
# tar xf ntp-4.2.6p5.tar.gz
# cd ntp-4.2.6p5.tar.gz
# ./configure \
--prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc \
--bindir=/usr/sbin \
--sbindir=/usr/sbin \
--mandir=/usr/man \
--with-crypto \
--enable-ntp-signd \
--program-prefix= \
--program-suffix=
# make 
# make install DESTDIR=/tmp/ntp-4.2.6p5-i486-2
# cd /tmp/ntp-4.2.6p5-i486-2
# makepkg  -l y -c n /tmp/ntp-4.2.6p5-i486-2.tgz
# upgradepkg --reinstall --install-new /tmp/ntp-4.2.6p5-i486-2

Правим файл /etc/ntp.conf

server 127.127.1.0
fudge  127.127.1.0 stratum 10
server 192.168.10.250  iburst prefer
driftfile /etc/ntp/ntp.drift
logfile /var/log/ntp.log
ntpsigndsocket /var/lib/samba/ntp_signd
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap nopeer

Дважды синхронизируемся с нашим шлюзом:

# ntpdate 192.168.10.250
 8 Feb 19:12:07 ntpdate[12579]: adjust time server 192.168.10.250 offset 0.010195 sec

# ntpdate 192.168.10.250
 8 Feb 19:12:40 ntpdate[12580]: adjust time server 192.168.10.250 offset -0.004425 sec

Даем права на запуск скрипту старта ntpd:

# chmod 0775 /etc/rc.d/rc.ntpd

И стартуем сервер времени

# /etc/rc.d/rc.ntpd start
Starting NTP daemon:  /usr/sbin/ntpd -g

Через некоторое время проверяем синхронизацию:

# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
=====================================================================
 LOCAL(0)        .LOCL.          10 l   21   64    3    0.000    0.000   0.000
*192.168.10.250  62.117.76.142    2 u   17   64    3    0.101   -0.515   0.013

Сервер времени работает.

Kerberos

При помощи sbopkg правим слакбилд и инфо, собираем и устанавливаем последнюю версию на сегодня:
krb5 (Installed: krb5-1.11-i486-1_SBo) или
heimdal-1.5.3 (Installed: heimdal-1.5.3-i486-2_SBo)

или скачиваем с официальных сайтов, собираем пакет и устанавливаем.

DNS сервер (bind)

Берём SlackBuild для bind с MIT Kerberos и распаковываем.
Скачиваем последнюю версию bind с https://www.isc.org/downloads в каталог со SlackBuild'ом. Правим Slackbuid в части версии и запускаем его.
Для тех, кто поставил heimdal, надо в SlackBuild'e изменить:

--with-gssapi=/usr/kerberos

на

--with-gssapi=/usr/heimdal

Устанавливаем полученный пакет.

Для того, чтобы не искать программы от kerberos добавим их в /etc/profile для MIT Kerberos:

.....
.....
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/kerberos/bin:/usr/kerberos/sbin"
.....
.....

для heimdal:

.....
.....
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/heimdal/bin:/usr/heimdal/sbin"
.....
.....

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

# groupadd -g 250 named
# useradd -u 250 -d /dev/null -s /bin/false -g named named

подправим файл /etc/rc.bind, предварительно убрав комментарий в начале строки:

NAMED_OPTIONS="-4 -u named"

дадим права на запуск этого файла:

# chmod 0755 /etc/rc.d/rc.bind

изменим владельца на каталоги и файлы нужные для корректной работы bind:

# mkdir /var/log/named
# chown -R named:named /var/log/named
# chown -R named:named /var/run/named
# chown -R named:named /var/named

теперь отредактируем файл /etc/named.conf. Я привожу свой. Строки относящиеся к самбе должны присутствовать обязательно, остальное по вкусу.

# файл появится после процедуры подготовки домена
include "/etc/samba/private/named.conf";

# Логирование
logging {
channel default_ch {file "/var/log/named/named.log" 100M;
severity debug;
print-time yes;
print-category yes;
};

channel security_ch {file "/var/log/named/security.log" size 100M;
severity info;
print-time yes;
print-category yes;
};

category default { default_ch; };
category security { security_ch; };
};

options {
        directory "/var/named";
      # файл появится после процедуры подготовки домена
        tkey-gssapi-keytab "/etc/samba/private/dns.keytab";
      # не понятные запросы отдаем шлюзу
        forwarders { 192.168.10.250; };
        listen-on { 127.0.0.1;192.168.10.188; };
        allow-recursion {127.0.0.1;192.168.10.0/24; };
};

//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "caching-example/named.root";
};

zone "localhost" IN {
  type master;
  file "caching-example/localhost.zone";
  allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
  type master;
  file "caching-example/named.local";
  allow-update { none; };
};

отредактируем файл /etc/resolv.conf:

domain transit.local
nameserver 192.168.10.188

DNS сервер у нас готов, но запускать его, пока, не будем, так как нет еще файлов баз и настроек, которые появятся после процедуры подготовки домена. Чем, собственно, и займемся далее.

Samba 4

Если планируется использование кластера (компиляция с ключами –with-cluster-support и –with-ctdb-dir), то необходимо собрать пакет CTDB:

# wget http://ftp.sernet.de/pub/ctdb/1.0.114/src/ctdb-1.0.114.5.tar.gz
# tar xf ctdb-1.0.114.5.tar.gz
# cd ctdb-1.0.114.5
# cd ctdb
# ./autogen.sh 
# ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/man 
# make 
# make install DESTDIR=/tmp/ctdb-1.0.114.5
# cd /tmp/ctdb-1.0.114.5
# makepkg  -l y -c n /tmp/ctdb-1.0.114.5.tgz
# upgradepkg --install-new /tmp/ctdb-*.t?z

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

Если, допустим, мы находимся в каталоге /install, то нижеследующая команда создаст в этом каталоге подкаталог samba-master и скачает туда исходники.

# git clone git://git.samba.org/samba.git samba-master
 
 Cloning into 'samba-master'...
 remote: Counting objects: 1106530, done.
 remote: Compressing objects: 100% (255106/255106), done.
 remote: Total 1106530 (delta 855940), reused 1094079 (delta 845694) 
 Receiving objects: 100% (1106530/1106530), 215.57 MiB | 1.34 MiB/s, done.
 Resolving deltas: 100% (855940/855940), done.
 Checking out files: 100% (7159/7159), done.

Переходим в этот каталог, собираем самбу и устанавливаем собранный пакет:

# ./configure \
--prefix=/usr \
--libdir=/usr/lib \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--mandir=/usr/man \
--sysconfdir=/etc \
--with-configdir=/etc/samba \
--with-piddir=/var/run \
--with-privatedir=/etc/samba/private \
--localstatedir=/var \
--with-lockdir=/var/cache/samba \
--with-logfilebase=/var/log/samba \
--enable-cups \
--with-acl-support \
--with-automount \
--with-quotas \
--with-syslog \
--with-utmp \
--with-winbind \
--with-ldap \
--enable-gnutls \
--with-swat \
--with-ads \
--with-sendfile-support \
--with-dnsupdate \
--with-profiling-data \
--download \
--enable-fhs 
# make
# make install DESTDIR=/tmp/samba-4.1
# cd /tmp/samba-4.1
# makepkg -l y -c n /tmp/samba-4.1.tgz
# upgradepkg --install-new /tmp/samba-*.t?z

Далее начинаем процедуру подготовки домена. Но перед этим нужно определиться с DNS сервером, потому-что будет запрос на DNS backend и мы должны выбрать:

  1. SAMBA_INTERNAL — Указываем, если у нас уже есть DNS-сервер установленный на другой машине и мы просто будем пересылать туда запросы;
  2. BIND9_DLZ — Указываем, если будем поднимать DNS-сервер на этом же контролере домена, но зоны будут храниться не в файле, а в базе (например LDAP или MySQL), подробней можно почитать ТУТ;
  3. BIND9_FLATFILE — Это старый, добрый и привычный метод с хранением зон в обычном текстовом файле.

Я выбрал BIND9_DLZ :)

При вводе пароля выбирайте сложные пароли, содержащие символы латинского алфавита в верхнем и нижнем регистрах, цифры и спец символы, иначе в дальнейшем, получите сообщение о не соответствии пароля политике безопасности.
# samba-tool domain provision

Realm [TRANSIT.LOCAL]: 
 Domain [TRANSIT]: 
 Server Role (dc, member, standalone) [dc]: 
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password: 
Retype password: 
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=transit,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
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=transit,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /etc/samba/private/named.conf for an example configuration include file for BIND
and /etc/samba/private/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 4 has been generated at /etc/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              dc1
NetBIOS Domain:        TRANSIT
DNS Domain:            transit.local
DOMAIN SID:            S-1-5-21-3866714810-3925281757-2563473890

Так как у нас BIND 9.9.2, то редактируем файл /etc/samba/private/named.conf и получаем:

dlz "AD DNS Zone" {
    # For BIND 9.8.0
    #database "dlopen /usr/lib/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.0
     database "dlopen /usr/lib/samba/bind9/dlz_bind9_9.so";
};

Копируем файл /etc/samba/private/krb5.conf в /etc/krb5.conf и если существует, то заменяем:

 # cp /etc/samba/private/krb5.conf /etc

Создаем скрипт запуска самбы /etc/rc.d/rc.samba_ad:

#! /bin/bash
#
# samba4       Bring up/down samba4 service
#
. /etc/init.d/functions

CWD=$(pwd)
prog="samba4"

start() {
          # Attach irda device

          echo -n $"Starting $prog: "
          /usr/sbin/samba
          sleep 2
          if ps ax | grep -v "grep" | grep -q /sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi
          echo
        }

stop() {
         # Stop service.

         echo -n $"Shutting down $prog: "
         killall samba
         sleep 2
         if ps ax | grep -v "grep" | grep -q /sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi
         echo
       }

status() {
           /usr/sbin/samba --show-build
         }
# See how we were called.
  case "$1" in
  start)
         start
         ;;
  stop)
         stop
         ;;
  status)
         status irattach
         ;;
  restart|reload)
         stop
         start
         ;;
  *)
         
  echo $"Usage: $0 {start|stop|restart|status}"
  exit 1 
  
esac
  
exit 0

Делаем этот скрипт исполняемым:

# chmod 0755 /etc/rc.d/rc.samba_ad

и для автозапуска при старте системы, пропишем его в /etc/rc.d/rc.local

#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.

/etc/rc.d/rc.samba_ad start

Для теста создадим каталог:

# mkdir /home/test

и приведём файл /etc/samba/smb.conf к следующему виду:

# Global parameters
[global]
        workgroup = TRANSIT
        realm = TRANSIT.LOCAL
        netbios name = DC1
        server role = active directory domain controller
        server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate

[netlogon]
        path = /var/lib/samba/sysvol/transit.local/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No

[test]
path = /home/test
comment = Test Share
read only = no

Всё! У нас всё готово к тестированию нашего контролера домена, осталось запустить DNS-сервер и самбу:

# /etc/rc.d/rc.bind start
Starting BIND:  /usr/sbin/named -4 -u named

# /etc/rc.d/rc.samba_ad start
Starting samba4:                                           [  OK  ]

Тестирование

Для начала получим билетик от Kerberos:

# kinit administrator@TRANSIT.LOCAL
 Password for administrator@TRANSIT.LOCAL:
 Warning: Your password will expire in 38 days on Fri 22 Mar 2013 08:37:07 PM MSK

# klist
 Ticket cache: FILE:/tmp/krb5cc_0
 Default principal: administrator@TRANSIT.LOCAL

 Valid starting    Expires           Service principal
 12/02/2013 09:02  12/02/2013 19:02  krbtgt/TRANSIT.LOCAL@TRANSIT.LOCAL
        renew until 13/02/2013 09:02

Если забыли какой давали пароль пользователю Administrator, то под root можно его сбросить:

# samba-tool user setpassword administrator

Проверяем самбу:

 
# smbclient --version
 Version 4.1.0pre1-GIT-6c2d6ad

# smbclient -L localhost -U%
 Domain=[TRANSIT] OS=[Unix] Server=[Samba 4.1.0pre1-GIT-6c2d6ad] 

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk      
        sysvol          Disk      
        test            Disk      Test Share
        IPC$            IPC       IPC Service (Samba 4.1.0pre1-GIT-6c2d6ad)
 Domain=[TRANSIT] OS=[Unix] Server=[Samba 4.1.0pre1-GIT-6c2d6ad]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

и с какой-нибудь машины с Linux и самбой на борту:

# smbclient //192.168.10.188/netlogon -UAdministrator -c 'ls'
 Enter Administrator's password: 
 Domain=[TRANSIT] OS=[Unix] Server=[Samba 4.1.0pre1-GIT-6c2d6ad]
  .                                   D        0  Fri Feb  8 20:36:55 2013
  ..                                  D        0  Fri Feb  8 20:37:10 2013

                35277 blocks of size 1048576. 27967 blocks available

проверяем DNS и динамические обновления:

# host -t SRV _ldap._tcp.transit.local.
 _ldap._tcp.transit.local has SRV record 0 100 389 dc1.transit.local.

# host -t SRV _kerberos._udp.transit.local.
 _kerberos._udp.transit.local has SRV record 0 100 88 dc1.transit.local.

# host -t A dc1.transit.local.
 dc1.transit.local has address 192.168.10.188

# samba_dnsupdate --verbose --all-names
 IPs: ['fe80::217:31ff:fe89:51be%eth0', '192.168.10.188']
 Calling nsupdate for A transit.local 192.168.10.188
 Outgoing update query:
 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
 ;; UPDATE SECTION:
 transit.local.          900     IN      A       192.168.10.188

 Calling nsupdate for A dc1.transit.local 192.168.10.188
 Outgoing update query:
 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
 ;; UPDATE SECTION:
 dc1.transit.local.      900     IN      A       192.168.10.188

 Calling nsupdate for A gc._msdcs.transit.local 192.168.10.188
 Outgoing update query:
 ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
 ;; UPDATE SECTION:
 gc._msdcs.transit.local. 900    IN      A       192.168.10.188

 .....
 .....
 .....

Всё работает, теперь настроим компьютеры с Windows для работы в нашем домене и с одной из них будем им управлять.

Подключение компьютеров

Windows XP SP3

Войдем в систему как локальный администратор.

Клик правой кнопкой мыши на «Сетевое окружение» → «Свойства»
Клик правой кнопкой мыши на «Подключение по локальной сети»(или как оно там у вас называется) → «Свойства» → двойной клик на «Протокол Интернета (TCP/IP)» и меняем на наши данные.

Клик правой кнопкой мыши на «Мой компьютер» → «Свойства»
Вкладка «Имя компьютера» → кнопка «Изменить»
Ставим точку на «домен» и вводим имя нашего домена «TRANSIT»
Нажимаем на кнопку «ОК» и вводим имя пользователя «Administrator» и пароль, что дали во время процедуры подготовки домена
и еще раз на «ОК»

Если увидели такое сообщение, поздравляю ваш компьютер с Windows XP SP3 в домене :)

После нас попросят перезагрузиться, что мы и сделаем.
И после перезагрузки попытаемся войти как доменный пользователь.

После входа в систему, убедимся, что наш компьютер в домене. Клик правой кнопкой мыши на «Мой компьютер» → «Свойства» → Вкладка «Имя компьютера»

Управление доменом

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

Для управления доменом из Windows XP нам необходимо 2 пакета.
Пакет средств администрирования (Adminpak)
Пакет инструментов поддержки (SupportTools)

Скачиваем их и устанавливаем. После установки в «Панели управления» → «Администрирование» у нас появятся дополнительные пункты для управления доменом. Для начала воспользуемся одним из них - «DNS». Для подключения к нашему DNS серверу вводим его IP-адрес.

Как видим в прямой зоне есть и сам контролер и наш компьютер с Windows XP.

Обратная зона пуста, надо её создать и прописать там наш контролер. Для этого кликаем правой кнопкой мыши на «Зоны обратного просмотра» → «Создать новую зону…».

В мастере создания новой зоны выбираем пункт «Основная зона» и нажимаем кнопку «Далее >».

Указываем реплики и нажимаем кнопку «Далее >».

Указываем код сети (ID) - 192.168.10. и нажимаем кнопку «Далее >».

Разрешаем только безопасные динамические обновления и нажимаем кнопку «Далее >».

Завершаем создание зоны нажав на кнопку «Готово».

Как видим, зона успешно создана.

Теперь необходимо «прописать» сюда наш контролер домена. Другими словами, создать для него обратный указатель.
Для этого нажимаем правой кнопкой мыши в любом пустом месте в правом окне и выбираем пункт «Создать указатель…»

В IP-номер узла вписываем «188», а в «имя узла» его полное доменное имя или выбираем через кнопку «Обзор» в зоне прямого просмотра. После всего нажимаем кнопку «ОК».

Как видим, PTR-запись для нашего контролера домена создалась.

Теперь перерегистрируем наш компьютер с Windows XP на нашем DNS сервере.

И видим, что PTR-запись для нашего компьютера с Windows XP, создалась автоматически.

Windows 7

Управление доменом

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

Для управления доменом из Windows 7 нам необходим пакет.
Средства удаленного администрирования

Скачиваем его и устанавливаем. Чтобы можно было начать управление доменом, еще нужно проделать несколько «телодвижений» :
«Пуск» → «Панель управления» → «Программы и компоненты» → «Включение или отключение компонентов Windows».
Выбираем «Средства удаленного администрирования сервера» и ставим необходимые нам галки.

Нажимаем «Ок» и нвидим, что в «Пуск» → «Панель управления» → «Администрирование» появились нужные нам компоненты управления.

Ну, и для настройки DNS проделываем всё точно также как Здесь

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:addc (generated for current page)