ITСooky

IT-рецепты съедобные и не очень!

Samba 4.1 как Контроллер Домена AD

дата 18.03.2014

Неплохая возможность сэкономить штуку баксов, хотя уже меньше — Microsoft не успевает подтягивать цены за инфляцией! Samba 4.1 как AD DC Контроллер Домена позволяет решать организационные вопросы, полностью как Windows Server 2012 — конечно она не может решать функциональные DNS, DHCP, NAT, IPSEC и пр — это надо отдельно прекручивать.

samba

А вот политики GPO (не функциональные, а организационные) пожалуйста — аутентификация, ввод в домен, добавить/ заблокировать пользователя, прописать шары, принтеры! Кстати тут надо поблагодарит Microsoft эти возможности Samba огромная заслуга Команды Разработчиков Samba, но и чуть-чуть Microsоft благодаря её открытости и непротивлению по этому вопросу.

А надо сразу сказать что это 15 версия этой статьи, и ровно 15-ая установка SAMBA4(4.1 теперь уже) во всех других была одна проблема домен переставал работать после перезагрузки сервера.
Эта установка отличается от других следующим:
— Я не добавлял пользователей в AD в консоли Samba на сервере
— Я в качестве Realm брал произвольное имя домена и имя реального хоста = SAMBA.ITCOOKY_VPS(далее подробнее)
Подтверждать взаимосвязи уже сил не было, работает главное!

Для развертывания Samba как AD нужно выполнить пару условий
— включить на диске ACL(не знаю почему)
— у всех клиентов должно быть настроено NTP автоматическая настройка точного время — это и при любых реализациях AD надо делать — главное чтобы на сервере было точное, а Win ПК подтянут из интернета автоматически(должны бы).

Идем в fstab
vi /etc/fstab
И добавляем ACL в параметры присоединения дисков

# </code>Device        Mountpoint      FStype  Options Dump    Pass#
/dev/ada0p2     /               ufs     rw,acls 1       1

Чтобы не перезагружать, подсоединим
mount -o acls /

Установка Samba 4.1

А надо сразу сказать что это очень свежий порт — февральский так что надо обновить порты
portsnap fetch extract && portsnap fetch update

Идем в порты
cd /usr/ports/net/samba41
make

По умолчанию всё подходит, попытаемся использоваться встроенный в Samba DNS сервер. Долго подкачивает что надо — может и сорваться, тогда еще раз make нажмите. При выборе местами проскакивает поддержка X11 графического интерфейса это точно не нужно можно не ставить.
make install
Когда я говорил «Долго» не предполагал что настолько!

А надо сразу сказать что при установке не создаются нужные для работы папки делаю их вручную
mkdir /var/db/samba4/
mkdir /var/log/samba4/

Отключаем наш DNS сервер(если он есть), так как мы выбрали SAMBA-овский
в rc.conf комментируем

#named_enable="YES"
#named_flags="-u bind"

И перезагружаемся!

Запускаем утилиту по запуску домена.
/usr/local/bin/samba-tool domain provision

Название Realm SAMBA.ITCOOKY_VPS формируется из:

SAMBA — имя домена — произвольное, именно оно будет служит именем домена для ввода ПК

ITCOOKY_VPS — название хоста сервера, его посмотреть можно командой:
uname -n

Вводим только то что жирным, где пусто там enter устраивает по-умолчанию.
Realm: SAMBA.ITCOOKY_VPS
Domain [samba]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write ‘none’ to disable forwarding) [212.188.4.10]: DNS вашего провайдера
Administrator password:
Пароль должен быт сложным типа 123qweQWE это требование AD

В папке /var/db/samba4/private создается файл krb5.conf скопируем его в /etc
cp /var/db/samba4/private/krb5.conf /etc/krb5.conf

Он простой

[libdefaults]
        default_realm = SAMBA.ITCOOKY_VPS
        dns_lookup_realm = false
        dns_lookup_kdc = true

Отредактируем файл resolv.conf
vi /etc/resolv.conf
В него надо добавить строки

search SAMBA.ITCOOKY_VPS
domain samba.itcooky_vps

Добавляем в rc.conf…

samba_server_enable="YES"

Автоматом появился файл /usr/local/etc/smb4.conf его не трогаем пока

# Global parameters
[global]
        workgroup = SAMBA
        realm = SAMBA.ITCOOKY_VPS
        netbios name = ITCOOKY_VPS
        server role = active directory domain controller
        dns forwarder = 212.188.4.10
[netlogon]
        path = /var/db/samba4/sysvol/samba.bsd/scripts
        read only = No

[sysvol]
        path = /var/db/samba4/sysvol
        read only = No

Запускаем Samba
/usr/local/sbin/samba start

Попробуем
/usr/local/bin/smbclient -L localhost -U%

Domain=[SAMBA] OS=[Unix] Server=[Samba 4.1.4]

	Sharename       Type      Comment
	---------       ----      -------
	netlogon        Disk      
	sysvol          Disk      
	IPC$            IPC       IPC Service (Samba 4.1.4)
Domain=[SAMBA] OS=[Unix] Server=[Samba 4.1.4]

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

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

Делаем
/usr/local/bin/smbclient //localhost/netlogon -U Administrator -P -c 'ls'

Domain=[SAMBA] OS=[Unix] Server=[Samba 4.1.4]
  .                                   D        0  Tue Mar 11 15:32:19 2014
  ..                                  D        0  Tue Mar 11 15:32:30 2014

		37649 blocks of size 262144. 8570 blocks available

Теперь опять редактируем
vi /etc/resolv.conf
Раньше тут был DNS провайдера, пишем IP SAMBA DOMENA он же будет и DNS и он же при установке спрашивал на какой DNS провайдера перекидывать запросы. Должно выглядеть так:

search SAMBA.ITCOOKY_VPS
domain samba.itcooky_vps
nameserver 192.168.1.200

Кстати в /etc/host пусть будет(ну она там и была) запись:

192.168.1.200 ITCooky_VPS

Проверяем
host -t SRV _ldap._tcp.SAMBA.ITCooky_VPS

_ldap._tcp.SAMBA.BSD has SRV record 0 100 389 itcooky_vps.samba.itcooky_vps.

Делаем
samba_dnsupdate --verbose | grep Failed

Видим ругается на второй интерфейс… пока не понятно, что это влечет!

Failed to find matching DNS entry A samba.bsd 192.168.2.200
Failed to find matching DNS entry A itcooky_vps.samba.itcooky_vps 192.168.2.200
Failed to find matching DNS entry A gc._msdcs.samba.itcooky_vps 192.168.2.200
/usr/bin/nsupdate: cannot specify -g	or -o, program not linked with GSS API Library
/usr/bin/nsupdate: cannot specify -g	or -o, program not linked with GSS API Library
/usr/bin/nsupdate: cannot specify -g	or -o, program not linked with GSS API Library
Failed nsupdate: 1
Failed nsupdate: 1
Failed nsupdate: 1
Failed update of 3 entries

Вставляем в раздел [global] в smb4.conf

nsupdate command = /usr/local/bin/samba-nsupdate -g

После перезагрузки Samba и пару раз запуска предыдушей команды, ошибки исчезают

В любом случае DNS записи можно добавить(но лучше этого не делать)
/usr/local/bin/samba-tool dns add
Usage: samba-tool dns add

Теперь проверим авторизацию
kinit administrator@SAMBA.ITCOOKY_VPS
Если после ввода запроса ничего не напишет значит все хорошо!

klist
Тоже что-то показывает(а мог и не показать) и это хорошо!

Credentials cache: FILE:/tmp/krb5cc_0
        Principal: administrator@SAMBA.ITCOOKY_VPS

  Issued           Expires          Principal
Mar  6 11:40:07  Mar  6 21:40:07  krbtgt/SAMBA.ITCOOKY_VPS@SAMBA.ITCOOKY_VPS

Делаем
net ads info
Вроде хорошо

LDAP server: LDAP server: 192.168.1.200
LDAP server name: itcooky_vps.samba.itcooky_vps
Realm: SAMBA.ITCOOKY_VPS
Bind Path: dc=SAMBA,dc=ITCOOKY_VPS
LDAP port: 389
Server time: Mon, 17 Mar 2014 19:03:36 MSK
KDC server: 192.168.1.200
Server time offset: 0

Проверяем
net ads testjoin

kerberos_kinit_password SAMBA@SAMBA.ITCOOKY_VPS failed: Client not found in Kerberos database
kerberos_kinit_password SAMBA@SAMBA.ITCOOKY_VPS failed: Client not found in Kerberos database
Join to domain is not valid: Improperly formed account name

Не приятно конечно, но не на что это не влияет, видимо это про какой-то другой джоин!

Домен работает!

Им можно управлять из консоли(лучше не надо), но я попытался установит граф. интерфейс phpLDAPadmin! С одной стороны он как то странной не работал, а сдругой на элементарно простое действие добавить пользователя выдавал анкету где надо было заполнить не прсто имя а еще ктоникто не знает что… поэтому решил воспользоваться инструментом от Microsft!

Ставлю по совету Samba AD management from windows а именно Remote Server Administration Tools for Windows 8.1

А надо сразу сказать что это тулза будет работать только с ПК введенного в Домен если на него войти под Доменным Администратором потому что при заходе она пароль не спрашивает, а пытается ввести тот что по учетке.

А надо сразу сказать что к Windows 8 и SAMBA4 это не касается, а вот в Windows 7,Vista, иногда XP и SAMBA3 не войти в домен если в реестре оных ПК по адресу
HKLM\System\CCS\Services\LanmanWorkstation\Parameters
недобавить или не отредактировать DWORD строки
DomainCompatibilityMode = 1
DNSNameResolutionRequired = 0

И в локальных политиках gpedit.msc не поменять на:
Computer Config > Windows Settings > Security Settings > Local Policies > Security Options
Тут выбираем как написано:
Network Security: LAN Manager Auth. Level: Send LM&NTLM use NTLMv2 session sec. if negociated
И два раза убрать галочку в с:
Network Security: Minimum session...clients: NO Required 128b encryption
Network Security: Minimum session... servеr: NO Required 128b encryption

А в случае Windows Enterprase 8.1 и Samba 4 зашел сам с полпинка — специально проверил на свежей установке, потому что тестовую уже успел поковырять пока Samba настраивал. Может ругнуться на DNS чего-то там но это не существенно.
itcooky_samba4_AD_03

А надо сразу сказать что первый вход под доменным пользоватлем, Windows 8 испытывает терпение(этого самого пользователя) на прочность словом Welcome и выигрывает я перезагрузился(хотя можно и дождаться). Тут тоже надо сразу сказать, что выключаться она тоже не хочет и приходится грубо её вырубать! Зато второй раз заходится за 37,5 секунд!

А надо сразу сказать что что после установки и перезагрузки ярлыка на эту тулзу нигде нет, даже в плитиках надо в консоли писать:
dsa.msc

Та да дан, не смотря на постоянную ругань винды(это было актуально на 3-11 установке сейчас не ругается) вижу и могу управлять тем что на Windows Server 2012 называется Active Directory Users and Computers
itcooky_samba4_AD_02
В упор не вижу тут настроек GPO, но может они вызываются другими тайными словами…

И точно, ничего скачивать не надо запускаем
gpmc.msc
это наша GPO мы её видим правим как Админ Домена
itcooky_samba4_AD_04

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

Создаем папки на свой вкус одна будет для админов другая для юзеров
mkdir /usr/samba_share
mkdir /usr/samba_share/admin
mkdir /usr/samba_share/users

Даем все права, наверное не самый лучший способ, но права будут определятся Доменом
chmod 777 /usr/samba_share/users
chmod 777 /usr/samba_share/users

Добавляем в smb4.conf
vi /usr/local/etc/smb4.conf
внизу

[Users]
     path = /usr/samba_share/users
     read only = no
[Admins]
     path = /usr/samba_share/admin
     read only = no

Перечитываем конфиг самбы, чтобы изменения вступили в силу
smbcontrol all reload-config

Дальнейшие настройки мы будем делать с Win ПК для этого, как пишут, надо группе Доменных админу дать права SeDiskOperatorPrivilege не забываем писать свой домен вместо SAMBA
net rpc rights grant 'SAMBA\Domain Admins' SeDiskOperatorPrivilege -Uadministrator
Права можно посмотреть командой
net rpc rights list accounts -Uadministrator

Теперь, еще раз благодорим Metro Интерфейс все нужные програмы до которых раньше можно было добраться мышкой теперь неизвестно где и учим команды.

Запускаем Computer Managment
[WIN]+[R]
compmgmt.msc
Тут выбираем Action > Connect to another computer вводим IP сервера и мы видем его шары! Нажимаем на нужную шару выбираем Properties
itcooky_samba4_AD_05

Удаляем Everyone группу из списка, добавляем Add группа Normalusers я её ранее добавил через дсаэмсыца, ставим права чтение запись — полные права не ставим(это права на изменение прав).
itcooky_samba4_AD_06

Прописываем в Домене, есть такой пункт почемуб не прописать
itcooky_samba4_AD_07
Повторяем также для админов.

Запускаем
gpmc.msc
Выбираемм Defautl Domaine Policy и Edit её
itcooky_samba4_AD_08

В User Configuration > Preferences > Windwos Settings > Drive Maps выбираем New > Mapped Driver
itcooky_samba4_AD_09

Настраиваем по желанию главное Action > Create и буковку диска выбрать, чтобы она с другими дисками не совпадала
itcooky_samba4_AD_10
Повторяем также для админов.

Теперь я загружаю второю или третью(да по этой теме третью) виртуальную машину захожу под юзером User в надежде что у меня появится два сетевых диска K и J, на один который я смогу войти, а на другйо нет потому что он для группы админов.
itcooky_samba4_AD_11

Ура! Юзерская шара-сетевой диск K появился и в него пишется, диск L даже не появился — правильно он для группы админов. По прямой ссылке \\192.168.1.200\Admins не заходит спрашивает парль юзерский не подходит!

Я еще пару дней понаблюдаю за Samba, пару раз по перезагружаю, но по-моему достойная замена Windows Server 2012 для управления большим парком ПК, а главное бесплатная и главное можно управлять также как Windows Serevr — пользоваться той же базой знаний!

UPD: Пока работает

Или вот еще что, полезная вещь запретить всем нормальным доменным пользователям менять настройки Network!

Заходим под админом домена в ПК введенный в домен. Запускаем:
[WIN]+[R]
gpmc.msc

Я хочу группе пользователей Normalusers запретить редактировать настройки сети. При этом я хочу чтобы они как участники Authenticated Users получали сетевые диски (чтобы их еще раз не настраивать для GPO Normalusers) — чтоже на это скажет логика GPO.

Для начала просто делаю еще одну GPO под названием NormalUsers где в Securuty Filter прописываю группу Normalusers
itcooky_samba4_AD_12

Редактируют эту GPO и в User Configuration > Polices > Administrative Templates > Network > Network Connections и включаю Enable запрет на Prohibit TCP/IP advenced configuration
itcooky_samba4_AD_13

Закрываю. Включаю другой ПК и захожу под User на комп, все отлично сетевые диски есть, появился вдруг как отключенный админский, при попытке открыть Propertis сетевого соединения просит пароль админа домена.
itcooky_samba4_AD_14

Логика GPO видимо следующая: для одной группы пользователей две GPO, но они не конфликтуют потому что большая часть настроек в ней не определены. Пользователю берется для него то что в GPO определено из обоих. Надо пользовать GPO Default Domain Policy для общих правил для всех, и GPO Normalusers конкретно под конкретную группу. Интересно что будет если правила начнут противоречить, но до этого можно и не доводить — только помнить что, где отмечено, за чем и для кого эммм.