Содержание
Дата написания: апрель 2017 г.
Автор: Graf
Контролер домена на базе 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-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 и мы должны выбрать:
- SAMBA_INTERNAL — Указываем, если у нас уже есть DNS-сервер установленный на другой машине и мы просто будем пересылать туда запросы;
- BIND9_DLZ — Указываем, если будем поднимать DNS-сервер на этом же контролере домена, но зоны будут храниться не в файле, а в базе (например LDAP или MySQL), подробней можно почитать ТУТ;
- 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 в домене :)
После нас попросят перезагрузиться, что мы и сделаем.
И после перезагрузки попытаемся войти как доменный пользователь.
После входа в систему, убедимся, что наш компьютер в домене.
Клик правой кнопкой мыши на «Мой компьютер» → «Свойства» → Вкладка «Имя компьютера»
Управление доменом
Для управления доменом из 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 в домене :)
После нас попросят перезагрузиться, что мы и сделаем.
И после перезагрузки войдем как доменный пользователь.
Управление доменом
Для управления доменом из 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.