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 конкретно под конкретную группу. Интересно что будет если правила начнут противоречить, но до этого можно и не доводить — только помнить что, где отмечено, за чем и для кого эммм.

  • Дмитрий

    Спасибо, очень интересно, я ставил уже версия 4,11 видимо поэтому в реестре вин7 ничего не пришлось править сам вошел в домен, хотя ругнувшись. samba_dnsupdate —verbose | grep Failed на это тоже не ругался.

  • Сергей Дубинин

    Статья классная .. была задача (чисто для себя) поднять полноценный домен .. делал всё на ощупь, но всё вроде работает .. есть одно НО .. по ссылке \10.0.3.1shara всё ок, а вот \dc.intrashara — матерится и не пускает … не в курсе почему такие приколы? .. был бы очень признателен )))

  • AlexandrBu
  • Влад

    Спасибо.

  • Андрей Сычёв

    После этой команды: «/usr/local/bin/smbclient //localhost/netlogon -U Administrator -P -c ‘ls'» выскакивает ошибка: «ERROR: Unable to fetch machine password for DS-SAMBA$@ITO.DS-SAMBA in domain ITO »

    В чём может быть причина?

  • Андрей Сычёв

    Разобрался. Спасибо)

  • Alex

    Уважаемый автор, я новичок в линукс. Подскажите вот установил я kubuntu есть два диска /dev/sda1 с точкой монтирования на которой линукс, /dev/sda5 второй пустой диск, /dev/sda6/ — swap

    Застрял на этом шаге
    И добавляем ACL в параметры присоединения дисков

    # Device Mountpoint FStype Options Dump Pass#
    /dev/ada0p2 / ufs rw,acls 1 1
    делаю у себя у меня другая картина

  • AlexandrBu

    Добрый день! Да, но установка описана не для линукса, а для FreeBSD поэтому и файлы разные.