Содержание

Дата написания: апрель 2017 г.
Автор: Graf

Контролер домена на базе Samba4
В виду того, что зона .local зарезервирована mDNS, настоятельно не рекомендуется использовать её в рабочем варианте.
Ниже приведённые названия даны, исключительно, только в качестве примеров.

Дано:

Домен 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-64 14.2, ядро 4.4.38 без DE и всем, что с ними связано.


Размышления

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

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

Для домашних папок (профилей) пользователей выделим отдельный диск /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.

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

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

 
# removepkg ntp* 
# wget wget https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.8p9.tar.gz
# tar xf ./ntp-4.2.8p9.tar.gz
# cd ntp-4.2.8p9.tar.gz
# ./configure \
--prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc \
--libdir=/usr/lib64 \
--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.8p9-x86_64-2
# cd /tmp/ntp-4.2.8p9-x86_64-2
# makepkg  -l y -c n /tmp/ntp-4.2.8p9-x86_64-2.txz
# upgradepkg --reinstall --install-new /tmp/ntp-4.2.8p9-x86_64-2.txz

Правим файл /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.15.1-x86_64-1_SBo) или скачиваем с официального сайта, собираем пакет и устанавливаем.

DNS сервер (bind)

Для точной уверенности в работе, лучше старый bind удалить, если был предустановлен.

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

дадим права на запуск файла /etc/rc.d/rc.bind:

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

создадим отсутствующий каталог:

# mkdir /var/log/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; };
        allow-update {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

Скачаем последнюю Samba соберем и установим.

# wget https://download.samba.org/pub/samba/stable/samba-4.6.2.tar.gz
# tar xf ./samba-4.6.2.tar.gz 
# cd samba-4.6.2
# ./configure \
--prefix=/usr \
--libdir=/usr/lib64 \
--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-ads \
--with-sendfile-support \
--with-dnsupdate \
--with-profiling-data \
--download \
--enable-fhs 
# make
# make install DESTDIR=/tmp/samba-4.6.2
# cd /tmp/samba-4.6.2
# makepkg -l y -c n /tmp/samba-4.6.2-x86_64-1.txz
# upgradepkg --install-new /tmp/samba-4.6.2-x86_64-1.txz

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

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

Я выбрал BIND9_DLZ :)

При вводе пароля выбирайте сложные пароли, содержащие символы латинского алфавита в верхнем и нижнем регистрах, цифры и спец символы, иначе в дальнейшем, получите сообщение о не соответствии пароля политике безопасности.
В дальнейшем политику паролей можно поменять средствами Windows или samba-tools:
  
# samba-tool domain passwordsettings --help
Usage: samba-tool domain passwordsettings (show|set <options>) [options]

Set password settings.

Password complexity, history length, minimum password length, the minimum
and maximum password age) on a Samba4 server.


Options:
.....
.....
# samba-tool domain provision --use-rfc2307 --interactive

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.10.4, то проверяем и при необходимости редактируем файл /etc/samba/private/named.conf:

dlz "AD DNS Zone" {
    # For BIND 9.8.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
     database "dlopen /usr/lib64/samba/bind9/dlz_bind9_10.so";

    # For BIND 9.11.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9_11.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]
        netbios name = DC1
        realm = TRANSIT.LOCAL
        server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
        workgroup = TRANSIT
        server role = active directory domain controller
        idmap_ldb:use rfc2307 = yes

[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

# /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 09 May 2017 08:37:07 PM MSK

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

 Valid starting    Expires           Service principal
 03/04/2017 09:02  08/05/2017 19:02  krbtgt/TRANSIT.LOCAL@TRANSIT.LOCAL
        renew until 09/05/2017 09:02

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

# samba-tool user setpassword administrator

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

 
# smbclient --version
 Version 4.6.2

# smbclient -L localhost -U%
 Domain=[TRANSIT] OS=[] Server=[] 

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk      
        sysvol          Disk      
        test            Disk      Test Share
        IPC$            IPC       IPC Service (Samba 4.6.2)
 Domain=[TRANSIT] OS=[] Server=[]

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

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

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

# smbclient //192.168.10.188/netlogon -UAdministrator -c 'ls'
 Enter Administrator's password: 
 Domain=[TRANSIT] OS=[Windows 6.1] Server=[Samba 4.6.2]
  .                                   D        0  Mon Apr  3 10:09:44 2017
  ..                                  D        0  Mon Apr  3 10:12:10 2017

                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

Войдем в систему как локальный администратор. Далее «Пуск» → «Панель управления» → «Сеть и Интернет» → «Центр управления сетями и общим доступом» → «Изменение параметров адаптера».
Клик правой кнопкой мыши на «Подключение по локальной сети»(или как оно там у вас называется) → «Свойства» → двойной клик на «Протокол Интернета версии 4 (TCP/IPv4)» и меняем на наши данные.

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

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

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

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

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

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

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

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

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

Slackware.14.0

Подключение компьютера на Slackware Linux 14.0 с использованием PAM, описано Здесь

Раздаем права

Для начала посмотрим есть ли наши компьютеры в AD:

И в DNS:



Всё отлично!
Теперь добавим пользователя домена.
Сначала создадим подразделение (UO).

Назовём его «IT».

И в него добавим пользователя.

Вносим все необходимые данные:

И видим, что пользователь создался.

Теперь зайдем на наш контролер домена и дадим права пользователям домена на папку «Test».
«Пуск» → «Выполнить» → вводим «\\dc1» (без кавычек), кликаем правой кнопкой мыши на папке «Test» → «Свойства», переходим на вкладку «Безопасность», кликаем на кнопке «Добавить» и выбираем группу «Domain Users»

даем необходимые права на папку.

Теперь перезагрузимся и войдем в систему под доменным пользователем v_pupkin

Далее проверим возможность записи в каталог «test».
«Пуск» → «Выполнить» → вводим «\\dc1\test» (без кавычек) и пробуем создать папку.

Всё работает!

Управлять правами и пользователями можно и с самого контролера домена при помощи утилиты samba-tool.

Ссылался на....


http://wiki.slackware.su/wiki:articles:samba4_ht

Обсуждаем на форуме