Контроллер домена на linux для windows

Время на прочтение6 мин

Количество просмотров251K

Этот вариант может быть полезен для небольших организаций с компьютерами под управлением Windows.
Нет необходимости приобретать недешевую Windows Server для организации AD и CAL лицензии для доступа к контроллеру домена.
В конечном итоге имеем плюшки AD: групповые политики, разграничение прав доступа к ресурсам и т.д.

Я попытался написать подробный алгоритм действий необходимых для организации Active Directory (AD) Domain Controller (DC) на базе Ubuntu Server.

Рассмотрим настройку контроллера домена на примере Ubuntu Server 12.04.4 LTS или Ubuntu Server 13.10, инструкция подходит для обоих вариантов без дополнительных изменений

1. Установка Ubuntu

Думаю установка Ubuntu-server не вызовет проблем даже у большинства пользователей компьютеров.
Желательно при установке ОС сразу правильно указать название машины в сети (hostname) с указанием домена (для примера использую dc1.domain.local), чтобы в дальнейшем меньше надо было править конфигурацию в файлах.
Если в сети не присутствует DHCP-сервер, установщик предложит ввести IP-адрес, маску сети, шлюз и DNS.
Во время установки, также желательно установить OpenSSH server, чтобы иметь удаленный доступ к серверу, а также правильно указать часовой пояс, в котором находится машина.

2. Настройка параметров сетевого адаптера

Настройки сети хранятся в файле /etc/network/interfaces
Редактируем его на свой вкус. В качестве редактора можно использовать nano, vi и т.п.
Для редактирования файлов понадобятся root права, их можно получить например командой

sudo su

после этого, Вы будете работать из под пользователя root.
О том что Вы работаете с правами root пользователя свидетельствует знак # в приглашении командной строки
Либо Вы можете перед каждой командой, которая требует root доступа, приписывать sudo

sudo nano /etc/network/interfaces

В конфигурации Вашего сетевого интерфейса, скорее всего, будет

iface eth0 inet dhcp

поменяем настройки на использование статичного ip-адреса.
В моем случае они выглядят вот так:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.10.10
dns-nameservers 192.168.10.10
dns-search domain.local domain

После изменения сетевых настроек необходимо перезапустить сетевой сервис

/etc/init.d/networking restart

3. Установка необходимых пакетов

Если Вы все же не установили OpenSSH server на первом этапе, это можно сделать командой

apt-get install ssh

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

apt-get update && apt-get upgrade

Для того, чтобы компьютеры сети сверяли время по нашему серверу установим ntp-сервер

apt-get install ntp

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

apt-get install git checkinstall build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr docbook-xsl libcups2-dev acl

4. Сборка Samba4

Для корректной работы Samba потребуется поддержка vfs на уровне файловой системы, для этого внесем изменения в /etc/fstab, необходимо добавить user_xattr,acl,barrier=1 в настройки корневого раздела /

nano /etc/fstab

должна получится строка, что-то вроде этой:

/dev/mapper/dc1—vg-root / ext4 user_xattr,acl,barrier=1,errors=remount-ro 0 1

после чего необходимо перезагрузить компьютер

reboot

Не забываем про root права

sudo su

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

cd /usr/src
git clone -b v4-1-stable git://git.samba.org/samba.git samba-v4-1-stable

конфигурируем, компилируем и устанавливаем Samba

cd samba-v4-1-stable && ./configure --enable-debug && make && checkinstall

Параметр —enable-debug необходим для отображения более подробной информации в логах Samba.

После того, как соберется и установится Samba (это долгое занятие), для удобства её использования, необходимо прописать пути до исполняемых файлов /usr/local/samba/sbin и /usr/local/samba/bin в файлах /etc/sudoers переменная secure_path и /etc/environment переменная PATH, добавив строку :/usr/local/samba/sbin:/usr/local/samba/bin

nano /etc/sudoers

должна получится строчка что-то вроде этой:

Defaults secure_path=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/samba/sbin:/usr/local/samba/bin«

nano /etc/environment

должна получится строчка что-то вроде этой:

PATH=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/samba/sbin:/usr/local/samba/bin«

перезагрузимся еще раз (на всякий случай)

reboot

5. Поднимаем AD

В качестве DNS сервера AD будем использовать Samba, поэтому отключаем bind командой

service bind9 stop && update-rc.d bind9 disable

Для манипуляций с AD в Samba существует инструмент samba-tool.
Для первоначальной настройки Samba вводим команду

samba-tool domain provision

Если на первом этапе Вы правильно указали имя компьютера, все настройки, которые запросит программа, можно оставить поумолчанию.
Во время настройки будет запрошен пароль пользователя Administrator для AD, он должен соответствовать требованиям сложности пароля поумолчанию: хотябы одна буква верхнего регистра, хотябы одна цифра, минимум 8 символов.
Если же пароль не подошел по сложности и Вы увидели ошибку вроде этой:

ERROR(ldb): uncaught exception — 0000052D: Constraint violation — check_password_restrictions: the password is too short. It should be equal or longer than 7 characters!

то перед повторным выполнением первоначальной настройки, необходимо удалить содержимое каталогов /usr/local/samba/private/ и /usr/local/samba/etc/
Если необходимо изменить сложность паролей это можно сделать командой

samba-tool domain passwordsettings set --min-pwd-length=6 --complexity=off --max-pwd-age=0 --min-pwd-age=0

эта команда отключает требование сложности, отключает сроки действия паролей, устанавливает минимальную длину пароля 6 символов

Далее необходимо подправить настройки Samba и добавить туда следующие строки в секцию [global]

nano /usr/local/samba/etc/smb.conf

allow dns updates = nonsecure and secure
printing = bsd
printcap name = /dev/null

Это позволит динамически обновлять DNS-записи на сервере, при входе рабочей станции (под управлением windows) в домен и отключит поддержку печати, которая постоянно выдает ошибки в лог.

В файле /etc/resolvconf/resolv.conf.d/head необходимо указать наш DNS-сервер Samba 127.0.0.1

echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/head

и перезапустить сервис resolvconf

service resolvconf restart

Также установим Kerberos клиент

apt-get install krb5-user

и настроим на AD с помощью файла созданного на этапе samba-tool domain provision

mv /etc/krb5.conf /etc/krb5.conf.old
cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

Для автоматического запуска сервиса Samba необходим скрипт:

nano /etc/init.d/samba4

/etc/init.d/samba4

#! /bin/sh
### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Samba daemons
### END INIT INFO
#
# Start/stops the Samba daemon (samba).
# Adapted from the Samba 3 packages.
#
PIDDIR=/var/run/samba
SAMBAPID=$PIDDIR/samba.pid

# clear conflicting settings from the environment
unset TMPDIR
# See if the daemon and the config file are there
test -x /usr/local/samba/sbin/samba -a -r /usr/local/samba/etc/smb.conf || exit 0

. /lib/lsb/init-functions

case "$1" in
start)
log_daemon_msg "Starting Samba 4 daemon" "samba"
# Make sure we have our PIDDIR, even if it’s on a tmpfs
install -o root -g root -m 755 -d $PIDDIR
if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then
log_end_msg 1
exit 1
fi

log_end_msg 0
;;
stop)
log_daemon_msg "Stopping Samba 4 daemon" "samba"

start-stop-daemon --stop --quiet --name samba $SAMBAPID
# Wait a little and remove stale PID file
sleep 1
if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
then
# Stale PID file (samba was succesfully stopped),
# remove it (should be removed by samba itself IMHO.)
rm -f $SAMBAPID
fi

log_end_msg 0
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: /etc/init.d/samba4 {start|stop|restart|force-reload}"
exit 1
;;
esac

exit 0

его необходимо сделать исполняемым

chmod 755 /etc/init.d/samba4

и создать настройки поумолчанию

update-rc.d samba4 defaults

Перезагружаем компьютер

reboot

6. Проверяем работоспособность сервера

У нас должна быть запущена samba после перезагрузки

ps aux | grep samba

root 865 0.3 3.0 95408 31748? Ss 18:59 0:00 /usr/local/samba/sbin/samba -D

Должен работать DNS сервер

nslookup dc1

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: dc1.domain.local
Address: 192.168.10.1

Должны быть доступны сетевые ресурсы AD

smbclient -L localhost -U%

Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Sharename Type Comment
— — — netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.6)
Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
Server Comment
— — Workgroup Master
— ——-

Должен подключаться Kerberos

kinit administrator

Warning: Your password will expire in 41 days on Wed Apr 23 18:49:14 2014

Должен храниться Ticket kerberos’a

klist

Valid starting Expires Service principal
12/03/2014 19:17 13/03/2014 05:17 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL

Должна проходить аутентификация netlogon

smbclient //localhost/netlogon -UAdministrator -c 'ls'

Domain=[DOMAIN] OS=[Unix] Server=[Samba 4.1.6]
. D 0 Wed Mar 12 18:46:48 2014
… D 0 Wed Mar 12 18:49:15 2014

Вот и всё.
Можно вводить в домен клиентов, заводить пользователей.

Управлять AD можно:
частично при помощи samba-tool на Ubuntu
при помощи Administration Tools Pack на Windows XP
при помощи Remote Server Administration Tools (RSAT) на Windows 7 и выше

Этот пост можно считать неким переводом официального wiki Samba, который находится по адресу:
wiki.samba.org/index.php/Samba_AD_DC_HOWTO, с моими дополнениями.

P.S. Если кому-то будет интересно могу еще написать «мануал» про включение резервного контроллера на Ubuntu в домен.

Использование Samba 4 в роли контроллера домена Active Directory. Такой способ позволяет вводить Windows 7/8 в домен безо всяких манипуляций с реестром.

Возможности

Поддерживаются базовые возможности Active Directory:

  • Аутентификация рабочих станций Windows и Linux и служб;
  • Авторизация и предоставление ресурсов;
  • Групповые политики (GPO);
  • Перемещаемые профили (Roaming Profiles);
  • Поддержка инструментов Microsoft для управления серверами (Remote Server Administration Tools) с компьютеров под управлением Windows (под WINE не работает);
  • Поддержка протоколов SMB2 и SMB3 (в том числе с поддержкой шифрования);
  • Репликация с другими серверами (в том числе с Windows 2012).

Не поддерживается

Не поддерживаются следующие возможности[1]:

  • Не реплицируется хранилище SYSVOL (можно использовать osync[2][3]);
  • Доверительные отношения с некоторыми ограничениями[4]):
    • Правила SID filtering не реализованы;
    • Невозможно добавить пользователей и группы в доменные группы доверенного домена;
  • Не поддерживаются поддомены[5];
    • В Samba отсутствует полноценная поддержка фантомных объектов[6];
    • Проблемы при построении структуры AD (Active Directory browser), проблемы при поиске объектов в другом домене;
    • При применении групповых политик в многодоменной среде могут быть проблемы с определением, в каком домене находится компьютер;
  • DFS работает только в режиме одиночного сервера;
  • Не реализован протокол DFS-R[7];
  • Не полностью реализована поддержка контроллеров домена только на чтение[8] — RODC[9];
  • Ограничения размера базы TDB в 4 ГБ[10], приводит к невозможности перехода от леса доменов к плоской структуре с одним доменом (решено в samba-4.9 и старше с использованием бекенда LMDB[11]).
  • Не закончено тестирование поддержки CTDB (хранение данных в кластерной инфраструктуре);
  • Не закончено тестирование работы Winbind.

Смотрите также статью Возможности и ограничения Samba 4 как контроллера домена Active Directory на http://habrahabr.ru/.

Внимание! Samba AD DC функционирует на уровне контроллера доменов Windows 2008 R2. Вы можете ввести его в домен Windows 2012 как клиента, но не как контроллер домена.

Установка

1) Установите пакет task-samba-dc  с версии 4.3.1  для Samba DC на базе Heimdal Kerberos или task-samba-dc-mitkrb5  с версии 4.10.3-alt4  для Samba DC на базе MIT Kerberos, который установит необходимое.

Примечание: До версии 4.3.1 требовалось явно установить пакеты: samba-DC python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-client krb5-kinit

Примечание: Samba на базе Heimdal Kerberos использует KDC несовместимый с MIT Kerberos, поэтому на контроллере домена на базе Heimdal Kerberos из пакета samba-dc, для совместимости с клиентской библиотекой libkrb5, в krb5.conf (в блоке —- libdefaults) необходимо отключить использование ядерного кеша ключей — KEYRING:persistent:%{uid}:

# control krb5-conf-ccache default

2) Так как Samba в режиме контроллера домена (Domain Controller, DC) использует свой сервер LDAP, свой центр распределения ключей KDC (сервер Kerberos) и свой сервер DNS (если не включен плагин BIND9_DLZ), перед установкой
остановите конфликтующие службы krb5kdc и slapd, а также bind:

# for service in bind krb5kdc nmb smb slapd; do chkconfig $service off; service $service stop; done

или

# systemctl disable --now bind krb5kdc nmb smb slapd

Примечание: Можно также отключить службы и выключить автозагрузку служб графическим способом в ЦУС. Например, в ALT Server зайдите в Система > Администрирование > ЦУС > Режим эксперта> Системные службы.

Примечание: При использовании плагина BIND9_DLZ службу bind после создания домена потребуется включить.

Создание нового домена

Восстановление к начальному состоянию samba

Очищаем базы и конфигурацию Samba (если уже создавался домен):

# rm -f /etc/samba/smb.conf
# rm -rf /var/lib/samba
# rm -rf /var/cache/samba
# mkdir -p /var/lib/samba/sysvol

Внимание! Обязательно удаляйте /etc/samba/smb.conf перед созданием домена:

rm -f /etc/samba/smb.conf

Выбор имени домена и контроллера домена

Имя домена должно состоять минимум из двух компонентов, разделенных точкой, например, domain.alt. Если используется домен с суффиксом .local, потребуется отключить службу avahi-daemon на сервере и на подключаемых Linux-компьютерах.

Имя контроллера домена (DC) должно быть полным доменным именем (dc.domain.alt) и иметь имя узла (dc) длиной не более 15 символов.

Важно: необходимо избегать конфликта netbios имени машины и netbios имени домена. Убедитесь, что netbios имя локальной машины (хоста) отличается от netbios имени домена. В случае контроллера домена имя узла (например, dc в dc.domain.alt) и имя домена (domain.alt) должны быть различными.

Для установки постоянного имени машины используйте следующую команду:

hostnamectl set-hostname <name>

В системах, в которых управление сетью осуществляется через etcnet и используется SysVinit вместо systemd, полное доменное имя (FQDN) прописывается в конфигурационном файле /etc/sysconfig/network:

HOSTNAME=dc.domain.alt

Во все остальных случаях параметр HOSTNAME игнорируется.

Для временной установки имени машины (до перезагрузки системы) можно использовать следующие команды:

# hostname dc.domain.alt
# domainname domain.alt

Создание домена с SAMBA_INTERNAL

Создание домена одной командой

Создание контроллера домена domain.alt с паролем администратора Pa$$word:

# samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc

Примечание: В команду можно добавить параметр, который позволяет указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена:

--option="dns forwarder=xxx.xxx.xxx.xxx"

Интерактивное создание домена

Примечание: У Samba свой собственный DNS-сервер. В DNS forwarder IP address нужно указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена.

В примере показано создание домена domain.alt.

Запустите samba-tool domain provision:

# samba-tool domain provision
Realm [DOMAIN.ALT]: 
 Domain [DOMAIN]: 
 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) [127.0.0.1]: 
Administrator password: 
Retype password: 
Looking up IPv4 addresses
More than one IPv4 address found. Using 192.168.1.1
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=domain,DC=alt
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=domain,DC=alt
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/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:              c228
NetBIOS Domain:        DOMAIN
DNS Domain:            domain.alt
DOMAIN SID:            S-1-5-21-80639820-2350372464-3293631772

При запросе ввода нажимайте Enter за исключением запроса пароля администратора («Administrator password:» и «Retype password:»).

Примечание: Пароль администратора должен быть не менее 7 символов и содержать символы как минимум трёх групп из четырёх возможных: латинских букв в верхнем и нижнем регистрах, чисел и других небуквенно-цифровых символов.

Параметры —use-rfc2307 —use-xattrs=yes позволяют поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.

Запуск службы

Установите службу по умолчанию и запустите её:

# systemctl enable --now samba

Примечание: Если служба после установки никаким способом не запускается, перезагрузите сервер

Конфликт между systemd-resolved и samba

Если перед запуском samba был настроен и запущен ресолвер systemd-resolved, то samba не запустится (или запустится с ошибками), так как происходит конфликт между systemd-resolved и samba из-за того, что обе службы пытаются прослушивать один и тот же порт 53. Systemd-resolved слушает DNS-запросы на интерфейсе 127.0.0.53:53, а samba требует доступ на всех интерфейсах *:53.

В логах Samba на это могут указать следующие ошибки:

  1. Ошибка при попытке занять порт 53 (DNS):
    stream_setup_socket: Failed to listen on 0.0.0.0:53 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
    Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
    
  2. Ошибка обновления DNS-зоны:
    Failed DNS update with exit code 1
    

Варианты решения конфликта:

  1. Ограничение интерфейсов Samba
    Если systemd-resolved необходим, Samba можно настроить так, чтобы она слушала только определённые IP-адреса, привязанные к интерфейсам. Например,чтобы настроить привязку всех сервисов Samba к интерфейсам eth0 и loopback (lo), необходимо добавить следующие параметры в секцию [global] конфигурационного файла smb.conf:

    bind interfaces only = yes
    interfaces = lo eth0
    
  2. Отключение systemd-resolved
    Если нет необходимости использовать systemd-resolved, то его можно отключить:

    # systemctl disable --now systemd-resolved
    
    Затем убедитесь, что /etc/resolv.conf настроен правильно, то есть указывает на сервер DNS, которым управляет Samba.
    Для корректного отключения и настройки механизма преобразования имен хостов в адреса IP, необходимо ознакомиться со статьей Ресолвер.

Проверка процессов на порту 53

Для диагностики можно использовать команду:

Она покажет, какие процессы используют порт 53. Например:

udp   UNCONN 0  0   127.0.0.53%lo:53   0.0.0.0:*   users:(("systemd-resolve",pid=1234,fd=12))
udp   UNCONN 0  0   192.168.1.1:53     0.0.0.0:*   users:(("named",pid=5678,fd=5))

Примечание: При использовании в качестве DNS-бэкенда BIND9_DLZ конфликт не возникает

Создание домена с BIND9_DLZ

По умолчанию в Samba используется dns-backend = SAMBA_INTERNAL, для возможности переключения режимов dns_backend для сервера SAMBA_INTERNAL/BIND9_DLZ требуется внести следующие изменения:

  1. Установить необходимые пакеты (bind и bind-utils) на сервер:
    # apt-get install bind bind-utils
    
  2. На сервере в файл /etc/samba/smb.conf в блок [global] добавить строку:
  3. Отключить chroot:
    # control bind-chroot disabled
    
  4. Отключить KRB5RCACHETYPE:
    # grep -q KRB5RCACHETYPE /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
    
  5. Подключить плагин BIND_DLZ:
    # grep -q 'bind-dns' /etc/bind/named.conf || echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf
    
  6. Привести /etc/bind/options.conf к виду (вместо {} подставить свои параметры в «»):
    options {
            version "unknown";
            directory "/etc/bind/zone";
            pid-file "";
            dump-file "/var/run/named_dump.db";
            statistics-file "/var/run/named.stats";
            recursing-file "/var/run/recursing";
    
            tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
    
            forwarders { {{ samba_dns_forward }}; };
            allow-query { localnets; {{ samba_network }}; };
            allow-recursion { localnets; {{ samba_network }}; };
    
            max-cache-ttl 86400;
    };
    
    logging {
            category lame-servers {null;};
    };
    
    Например:
    options {
    	    version "unknown";
    	    directory "/etc/bind/zone";
    	    pid-file "";
    	    dump-file "/var/run/named_dump.db";
    	    statistics-file "/var/run/named.stats";
    	    recursing-file "/var/run/recursing";
    
    	    tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
            minimal-responses yes;
    
            //может понадобиться отключить dnssec
            //dnssec-enable no;
            //dnssec-validation no;
    	        
    	    allow-query { localnets; 192.168.0.0/24; };
    	    allow-recursion { localnets; 192.168.0.0/24; };
    	
    	    include "/etc/bind/resolvconf-options.conf";
    	    max-cache-ttl 86400;
    
    };
    
    logging {
            category lame-servers {null;};
    };
    
    zone "example.test" {
           type forward;
           forwarders { 192.168.0.113; };
    };
    
  7. Выполнить остановку bind:
  8. При выполнении команды создания домена одной командой указать тип dns-backend = BIND9_DLZ:
    # samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --server-role=dc
    
  9. Далее произвести рестарт — samba, bind:
    # systemctl restart samba
    # systemctl restart bind
    

Настройка Kerberos

Откройте от имени суперпользователя на редактирование файл /etc/krb5.conf.

Параметру «dns_lookup_realm» присвойте значение false.

В секции [libdefaults] раскомментируйте строку «default realm» и введите название области заглавными буквами.

В секции [realms] вместо EXAMPLE.COM введите название области, а вместо example.com в «default domain» введите IP-адрес сервера с Samba.

В секции [domain_realm] замените example.com и EXAMPLE.COM на ваш домен с сохранением регистра.

Альтернативный вариант

В момент создания домена Samba автоматически конфигурирует шаблон файла /var/lib/samba/private/krb5.conf для вашего домена.

То есть, его можно просто скопировать с заменой:

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

Проверка работоспособности

1. Общая информация о домене:

# samba-tool domain info 127.0.0.1
Forest           : domain.alt
Domain           : domain.alt
Netbios domain   : DOMAIN
DC name          : c228.domain.alt
DC netbios name  : C228
Server site      : Default-First-Site-Name
Client site      : Default-First-Site-Name

2. Просмотр предоставляемых служб:

# smbclient -L localhost -U administrator
Enter TEST\administrator's password: 

	Sharename       Type      Comment
	---------       ----      -------
	sysvol          Disk      
	netlogon        Disk      
	public          Disk      Public Stuff
	free            Disk      
	IPC$            IPC       IPC Service (Samba 4.14.10)
SMB1 disabled -- no workgroup available

3. Проверка конфигурации DNS

3.1 Убедитесь в наличии nameserver 127.0.0.1 в /etc/resolv.conf:

host domain.alt

3.2 Проверяем имена хостов:

  • адрес _kerberos._udp.*адрес домена с точкой
# host -t SRV _kerberos._udp.domain.alt.
_kerberos._udp.domain.alt has SRV record 0 100 88 c228.domain.alt.
  • адрес _ldap._tcp.*адрес домена с точкой
# host -t SRV _ldap._tcp.domain.alt.
_ldap._tcp.domain.alt has SRV record 0 100 389 c228.domain.alt.
  • адрес хоста.*адрес домена с точкой
# host -t A c228.domain.alt.
c228.domain.alt has address 192.168.1.1

Если имена не находятся, проверяйте выключение службы named.

  systemctl status named

4. Проверка Kerberos:

Внимание! Имя домена должно быть в верхнем регистре, иначе выдаст:

kinit: KDC reply did not match expectations while getting initial credentials
# kinit administrator
Password for administrator@DOMAIN.ALT: 
Warning: Your password will expire in 41 days on Вт 11 ноя 2014 08:58:30

Просмотр полученного билета:

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.ALT

Valid starting       Expires              Service principal
30.09.2014 10:23:54  30.09.2014 20:23:54  krbtgt/DOMAIN.ALT@DOMAIN.ALT
        renew until 01.10.2014 10:23:45

Внимание! Для серверов, не внесённых в зону обратного просмотра DNS, авторизация через nslcd по GSSAPI будет вылетать с диагностикой:

Local error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Server not found in Kerberos database)

Управление пользователями

Создать пользователя с паролем[12], :

samba-tool user create <имя пользователя>
samba-tool user setexpiry <имя пользователя>

Например,

samba-tool user create ivanov --given-name='Иван Иванов' --mail-address='ivanov@stand.alt'

Просмотреть доступных пользователей:

samba-tool user list

Удалить пользователя:

samba-tool user delete <имя пользователя>

Отключить пользователя:

samba-tool user disable <имя пользователя>

Включить пользователя:

samba-tool user enable <имя пользователя>

Изменить пароль пользователя:

samba-tool user setpassword <имя пользователя>

Не забудьте разблокировать пользователя:

samba-tool user setexpiry <имя пользователя> --noexpiry

Внимание! Не допускайте одинаковых имён для пользователя и компьютера, это может привести к коллизиям (например, такого пользователя нельзя добавить в группу). [13]

Если компьютер с таким именем заведён, удалить его можно командой:

samba-tool computer delete <имя>

Добавить группу:

samba-tool group add groupname

Добавить UNIX-группу:

samba-tool group add groupname --nis-domain=samdom --gid-number=<next available GID>

Удалить группу:

samba-tool group delete groupname

Добавить пользователя в группу:

samba-tool group addmembers "Domain Users" user
samba-tool group addmembers "Domain Users" user,user1,user2

Удалить пользователя из группы:

samba-tool group removemembers "Domain Users" user
samba-tool group removemembers "Domain Users" user,user1,user2

Пользователи группы:

samba-tool group listmembers "Domain Users" | grep username

Группы пользователя:

samba-tool user show username

Смотрим значение memberOf.

Заведение дополнительного DC

Подробная инструкция на английском языке: https://wiki.samba.org/index.php/Join_a_domain_as_a_DC

Примечание: В дополнительных DC соблюдать те же правила, что и в основном DC)

Примечание: Для корректного взаимодействия обязательно проверить синхронизацию времени на серверах (актуально при использовании виртуальных машин, и снапшотов!)

Имя узла: dc2.domain.alt (192.168.1.106). Предполагается, что пакет task-samba-dc уже установлен.

1. Заводим IP-адрес для dc2 на PDC (с версии Samba 4.7 и выше запись вносится автоматически):

Внимание! Указание аутентифицирующей информации (имени пользователя и пароля) обязательно!

# samba-tool dns add 192.168.1.1 domain.alt DC2 A 192.168.1.106 -U administrator

2. На dc2.domain.alt правим файл /etc/krb5.conf:

[libdefaults]
default_realm = DOMAIN.ALT
dns_lookup_realm = false
dns_lookup_kdc = true

Примечание: Перед вводом в домен в resolvconf обязательно должен быть добавлен PDC как nameserver.

3. Получаем билет и убеждаемся, что билет получен:

Внимание! Имя домена должно быть указано в верхнем регистре

# kinit administrator@DOMAIN.ALT
Password for administrator@DOMAIN.ALT: 
Warning: Your password will expire in 37 days on Пт 14 ноя 2014 14:31:40
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.ALT

Valid starting       Expires              Service principal
07.10.2014 18:51:01  08.10.2014 04:51:01  krbtgt/DOMAIN.ALT@DOMAIN.ALT
        renew until 08.10.2014 18:50:51

4. Вводим в домен:

# samba-tool domain join domain.alt DC -Uadministrator --realm=domain.alt

Если всё нормально, в конце видим:

Joined domain DOMAIN (SID S-1-5-21-80639820-2350372464-3293631772) as a DC

5. После успешного ввода в домен в resolvconf необходимо сменить адрес PDC на адрес вторичного DC (в нашем примере 192.168.1.106).

6. Запускаем службу samba, сразу переводя её в запускаемую по умолчанию:

# systemctl enable --now samba

Репликация

Внимание! Помните, что без успешной двунаправленной репликации в течение 14 дней DC исключается из Active Directory

Внимание! Указание аутентифицирующей информации (имени пользователя и пароля) обязательно!

Примечание: Начиная с версии samba 3.5 топология репликации выстраивается автоматически, следовательно пункты 1. и 2. можно пропустить

1. Реплицируем на вторичном DC (с первичного):

# samba-tool drs replicate dc2.domain.alt c228.domain.alt dc=domain,dc=alt -Uadministrator

(сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP).

2. Реплицируем на вторичном DC (на первичный):

# samba-tool drs replicate с228.domain.alt dc2.domain.alt dc=domain,dc=alt -Uadministrator

(сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP).

Примечание: Имя домена в именах серверов можно опустить (если они одинаковые)

3. Просмотр статуса репликации на PDC:

# samba-tool drs showrepl

Примечание: Если репликация на Windows не работает, добавьте в Active Directory Sites and Services новое соединение Active Directory. Реплицируйте на DC, подождите минут 5 и пробуйте реплицировать с Samba на Windows

Доверительные отношения

Доверительные отношения позволяют аутентифицироваться под пользователями не только текущего домена, но и доверенных.

Подробнее:

  • Samba/InterdomainTrustRelationships
  • Trusts

Усиление безопасности КД

Возможность анонимного получения списка пользователей, групп и т.п.

Samba наследует поведение домена NT4, которое больше не требуется в режиме Active Directory. Например, следующая команда возвращает всех пользователей домена:

# rpcclient -U "" -c enumdomusers dc1.domain.alt

Для отключения этого внесите изменения в конфигурационный файл /etc/samba/smb.conf

[global]
restrict anonymous = 2

p.s. Также может потребоваться работа с полем dSHeuristics (подробно — http://support.microsoft.com/kb/326690).

samba-tool forest  directory_service dsheuristics 0000000

Отключение Netbios

Если конфигурация DNS выполнена правильно, старые протоколы NetBIOS, которые больше не нужны, могут быть отключены.
Внесите изменения в конфигурационный файл /etc/samba/smb.conf в секцию global

[global]
disable netbios = yes
smb ports = 445

Отключение роли сервера печати

Контроллер домена не следует настраивать с ролью сервера печати. Сервер Samba, настроенный как файловый сервер, лучше подходит для этой функции.

[global]
printcap name = /dev/null
load printers = no
disable spoolss = yes
printing = bsd

Отключение NTLMv1

Протокол аутентификации NTLMv1 появился в начале 1990-х годов и был быстро заменен на NTLMv2 из-за недостатков безопасности. Он больше не полезен в современных сетях, за исключением случаев использования MS-CHAP-v2, который является протоколом по умолчанию для аутентификации 802.1x на рабочих станциях Windows (например, аутентификация Radius для подключений Wi-Fi). В этом случае MS-CHAP-v2 использование NTLMv1 можно до некоторой степени допустить, поскольку он инкапсулирован в другой, более надежный протокол.

В Samba есть возможность глобально отключить NTLMv1, если он не используется для аутентификации MS-CHAP-v2. Поэтому рекомендуется добавить следующий параметр в конфигурационный файл /etc/samba/smb.conf.

[global]
ntlm auth = mschapv2-and-ntlmv2-only

Генерация дополнительных хешей паролей

Чтобы разрешить передачу хешей в другую базу аутентификации, можно попросить Samba-AD генерировать дополнительные хеши, когда пользователь меняет свой пароль.

[global]
password hash userPassword schemes = CryptSHA256 CryptSHA512

Защита DNS-записей wpad и isatap

Серверы Windows AD имеют глобальный черный список запросов DNS с двумя записями:

  • wpad
  • isatap

В разделе реестра GlobalQueryBlockList перечислены эти две записи DNS, чтобы предотвратить создание таких записей и перенаправление сетевого трафика неавторизованным объектом, действующим в локальной сети. Протокол автоматического обнаружения веб-прокси (WPAD) по умолчанию настроен в браузерах WPAD, в частности в браузерах Internet Explorer.

Даже если конфигурации wpad и isatap не используются, все равно важно создать эти две записи, чтобы предотвратить их использование обходным путем, поскольку в Samba-AD нет способа заблокировать создание записей, как в Microsoft AD.

# samba-tool dns add `hostname -s` `hostname -d` wpad A 127.0.0.1 -P
# samba-tool dns add `hostname -s` `hostname -d` isatap A 127.0.0.1 -P

Больше информации по ссылке: https://technet.microsoft.com/en-us/library/cc794902%28v=ws.10%29.aspx

Ограничение диапазона динамических портов

По умолчанию Active Directory использует очень широкий динамический диапазон для вызовов MS-RPC.
Рекомендуется ограничить этот диапазон. Для этого добавьте следующую строку в раздел [global] файла /etc/samba/smb.conf:

[global]
rpc server dynamic port range = 50000-55000

P.S. Не забудьте перенастроить фаервол, если он используется

Аудит запросов к папкам SYSVOL и NetLogon

Измнения в /etc/samba/smb.conf:

[global]
...
full_audit:failure = none
full_audit:success = pwrite write renameat
full_audit:prefix = IP=%I|USER=%u|MACHINE=%m|VOLUME=%S
full_audit:facility = local7
full_audit:priority = NOTICE
...
[sysvol]
...
vfs objects = dfs_samba4, acl_xattr, full_audit
...
[netlogon]
...
vfs objects = dfs_samba4, acl_xattr, full_audit

Отправка логов аудита в rsyslog

Настройка [rsyslog]

rsyslog на том же хосте

/etc/samba/smb.conf

[global]
log level = 1 auth_json_audit:3@/var/log/samba/samba_audit.log

/etc/rsyslog.d/send_samba.conf

module(load="imfile" PollingInterval="10") #needs to be done just once
input(type="imfile"
     File="/var/log/samba/samba_audit.log"
     Tag="samba_auth"
     Severity="info"
     Facility="auth")
if ($syslogtag == "samba_auth") then {
   action(type="omfwd" target="dc1.domain.alt" port="514" protocol="tcp"
          action.resumeRetryCount="100"
          queue.type="linkedList" queue.size="10000")
}

rsyslog на вышестоящем хосте

/etc/rsyslog.d/recv_samba.conf

$ModLoad imtcp
$InputTCPServerRun 514
if ($syslogtag == "samba_auth")  then /var/log/samba/audit_auth.log

Ссылки

  • Рекомендуемые серверные установочные образы (после установки выполните обновление ОС):
    • Альт Сервер
    • Альт Линукс СПТ 7.0 (сертификат ФСТЭК)
    • стартеркиты: x86_64, i586 (GPL)
    • существуют сборки samba-DC для порта на «Эльбрус»
  • Тестовые образы:
    • altlinux-p7-server-samba4.iso (старая стабильная ветка)
    • regular-server-samba4.iso (нестабильная ветка)
  • Документация на русском языке:
    • Инструкция по настройке Samba в качестве контроллера домена, совместимого с Active Directory
    • Samba4 — использование Python Scripting Interface
    • Возможности и ограничения Samba 4 как контроллера домена Active Directory
    • Samba DC в качестве второго контроллера в домене AD Windows 2012R2 и перемещаемые папки для клиентов на Windows и Linux
  • wiki.samba.org:
    • Samba AD DC HOWTO
    • Installing RSAT on Windows for AD Management
    • Добавление ещё одного DC в домен
    • Samba & Windows Profiles
    • Join an additional Samba DC to an existing Active Directory
    • Backup and restore an Samba AD DC
    • Samba Security Documentation
  • Иные ресурсы:
    • Заведение групповых политик для домена (ролик)
    • Samba 4 — domain controller#Join domain with a linux machine

Советы

  • Введите в домен машину с Windows, установите на неё Remote Server Administration Tools и управляйте доменом из графического интерфейса.
  • Для того, чтобы посмотреть конфигурацию LDAP контроллера домена, получите билет Kerberos (через kinit) и выполните:
ldapsearch -LLL -b '' -s base -x
  • Для отключения проверки необходимой длины и стойкости паролей выполните:
samba-tool domain passwordsettings set --complexity=off
samba-tool domain passwordsettings set --history-length=0
samba-tool domain passwordsettings set --min-pwd-age=0
samba-tool domain passwordsettings set --max-pwd-age=0
  • Для просмотра всех записей DNS домена выполните:
samba-tool dns query localhost test.altlinux '@' ALL -U 'Administrator%Pa$$word'
  • Для удаления заведённого хоста выполните:
samba-tool dns delete localhost test.altlinux host-51 A 192.168.3.51 -U 'Administrator%Pa$$word'

Troubleshooting

Если домен не создаётся с ошибкой типа ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2241
Удалите директиву include или includedir в /etc/krb5.conf[14]

This post will detail how to setup a pair of active directory domain
controllers using Samba 4 on Ubuntu 20.04 Server. One will be a primary domain controller and the other will be a backup domain controller. This provides redundancy incase one server has to go down for updates.

Pre-Requisites

  • Two independent linux servers, this guide will use Ubuntu 20.04 Server.
  • A domain name, sometimes called a fully qualified domain name (FQDN).

Network Configuration

You should configure these as static IP addresses on your router.

Hostname Domain IP Address
dc1 ad.ifsg.ca 192.168.2.10
dc2 ad.ifsg.ca 192.168.2.11

Setup the Primary Domain Controller

This is broken up into pre-configuration of the server, installation and post-installation configuration.

Pre-configuration of the server

Set the hostname of the primary domain controller to dc1

~$ sudo hostnamectl set-hostname dc1

Edit the hosts file to resolve dc1’s hostname to the static IP address of this
server

~$ sudo nano /etc/hosts
  # Add the following line to the /etc/hosts file:
  192.168.2.10    dc1.ad.ifsg.ca    dc1

Package installation

Install all of the required packages for Samba

~$ sudo apt-get install -y acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools

Provision the primary Samba domain controller. The first step is to ensure
that Samba is not running, search for any Samba processes and if it is present
kill the «root process» pid.

~$ ps -ax | grep samba
      1593 ?        Ss     0:00 samba: root process 
      4319 pts/0    S+     0:00 grep --color=auto samba
~$ sudo kill 1593

Now move the default smb.conf and krb5.conf files installed by the package manager 

~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig

Run the samba-tool in interactive mode to configure the primary domain controller

  • This needs to be run as root (aka sudo), so it can write the configuration files to /etc/ and elsewhere 
  • The configuration tool will first ask for you to provide several pieces of information, the default is between square brackets []. You should be able to click through with the defaults, but the following were the settings I used:
    • Realm = AD.IFSG.CA 
    • Domain = AD 
    • DNS backbone = SAMBA_INTERNAL
      • I am configuring using the Internal DNS, you can use BIND9 but that is outside the scope of this guide.
    • DNS forwarder IP address = 208.67.222.222 208.67.220.220
      • Several DNS IPs can be provided by separating them with a space
  • Administrator password
    • Should meet the minimum requirements as indicated in Microsoft’s complexity requirements
~$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [AD.IFSG.CA]
Domain [AD]
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) [127.0.0.53]: 208.67.222.222 208.67.220.220
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
 Unable to determine the DomainSID, can not enforce uniqueness constrant on local domainSIDs
Adding DomainDN: DC=ad,DC=ifsg,DC=ca
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers and extended rights
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
 Repackaging database from v1 to v2 format
 Repack: repacked 10000 records so far
 Repackaging database from v1 to v2 format 
 Repackaging database from v1 to v2 format 
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=ad,DC=ifsg,DC=ca
Creating DomainDnsZones and ForestDnsZones partitions
Population DomainDnsZones and ForestDnsZones partitions
 Repacking database from v1 to v2 format
Setting up sam.lbd rootDSE marking as syncronized
Fixing privision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of the file with your system krb5.conf or replace it with this one.  Do not create a symlink!
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role:           active directory domain controller
Hostname:              dc1
NetBIOS Domain:        AD
DNS Domain:            ad.ifsg.ca
DOMAIN SID:            S-1 ... 

Post install configuration and testing

Copy the krb5.conf file that samba-tool created to /etc/

~$ sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

The Samba domain controller can now be started

~$ sudo samba

Check the DNS settings

~$ host -t SRV _ldap._tcp.ad.ifsg.ca 
 Host _ldap._tcp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t SRV _kerberos._udp.ad.ifsg.ca 
 Host _kerberos._udp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t A dc1.ad.ifsg.ca
 dc1.ad.ifsg.ca has address 192.168.2.10

This seems to indicate that DNS is not working properly, per Rico Sharp’s documentation, this is caused by Ubuntu’s built-in DNS server (systemd-resolve) is overriding the internal DNS server that Samba has. We can see this is the case by checking what is listening on port 53

~$ sudo netstat -tulpn | grep :53
tcp     0      0 127.0.0.53:53    0.0.0.0:*    LISTEN   120/systemd-resolve
udp     0      0 127.0.0.53:53    0.0.0.0:*             120/systemd-resolve

To fix this we can disable the systemd-resolve service on the server

~$ sudo systemctl stop systemd-resolved
~$ sudo systemctl disable systemd-resolved
~$ sudo unlink /etc/resolv.conf
~$ sudo nano /etc/resolv.conf
 nameserver 192.168.2.10
 search ad.ifsg.ca
~$ sudo reboot

Start the Samba domain controller again

~$ sudo samba

Check the DNS settings again, these should resolve correctly now

~$ host -t SRV _ldap._tcp.ad.ifsg.ca 
 _ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc1.ad.ifsg.ca.
~$ host -t SRV _kerberos._udp.ad.ifsg.ca 
 _kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc1.ad.ifsg.ca.
~$ host -t A dc1.ad.ifsg.ca
 dc1.ad.ifsg.ca has address 192.168.2.10

We now need to configure the network time protocol (NTP) server, chronyd. Chronyd enables time syncronization which is required by the DC to function; however, by default it is not configured during the Samba setup process. What is more, the Samba instructions point us in the wrong direction for where the NTP socket folder is setup.

~$ samba -b | grep 'NTP' | awk '{print $NF}'
  /var/lib/samba/ntp_signd

By default, the permissions and group settings will not let chronyd use this socket.

~$ ls -ld /var/lib/samba/ntp_signd
  drwxr-x--- 2 root root 4096 Jan 24 05:08 /var/lib/samba/ntp_signd

Change the permissions as follows.

~$ sudo chown root:_chrony /var/lib/samba/ntp_signd/
~$ sudo chmod 750 /var/lib/samba/ntp_signd/
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root _chrony 4096 Jan 24 05:08 /var/lib/samba/ntp_signd

Now edit the chronyd configuration file to connect it to the above socket and enable connections on the network.

~$ sudo nano /etc/chrony/chrony.conf 
 # Settings for Samba DC
 allow 192.168.2.0/24 # dns netmask
 ntpsigndsocket /var/lib/samba/ntp_signd

By defafult Samba is not configured to run as a service meaning it will not startup automatically with the server. Running Samba as a service can be accomplished using systemd. First though, kill the Samba process so the service setup does not fail.

~$ ps -ax | grep samba
      1593 ?        Ss     0:00 samba: root process 
      4319 pts/0    S+     0:00 grep --color=auto samba
~$ sudo kill 1593

Now configure Samba to run as a systemd service. Mask the smbd, nmbd and winbind services and unmask the samba-ad-dc service.

~$ sudo systemctl mask smbd nmbd winbind
~$ sudo systemctl disable smbd nmbd winbind
~$ sudo systemctl stop smbd nmbd winbind
~$ sudo systemctl unmask samba-ad-dc
~$ sudo systemctl start samba-ad-dc
~$ sudo systemctl enable samba-ad-dc

Reboot the server and test!

~$ sudo reboot
~$ sudo systemctl status samba-ad-dc

Now confirm the server is working, test using kinit

~$ kinit Administrator

If you this worked, you should have entered your password and seen a message about your password expiring in # days

Setup the Backup Domain Controller

This will also be broken up into a few different sections

Pre-configuration of the server

Set the hostname of the primary domain controller to dc2

~$ sudo hostnamectl set-hostname dc2

Edit the hosts file to resolve dc1 and dc2 hostnames to the static IP address of each server

~$ sudo nano /etc/hosts
  # Add the following line to the /etc/hosts file:
  192.168.2.10    dc1.ad.ifsg.ca    dc1
  192.168.2.11    dc2.ad.ifsg.ca    dc2

Package installation

Install all of the required packages for Samba

~$ sudo apt-get install -y acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools

Provision the backup Samba domain controller. The first step is to ensure
that Samba is not running, search for any Samba processes and if it is present
kill the «root process» pid.

~$ ps -ax | grep samba
      1593 ?        Ss     0:00 samba: root process 
      4319 pts/0    S+     0:00 grep --color=auto samba
~$ sudo kill 1593

Now move the default smb.conf and krb5.conf files installed by the package manager 

~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig

Now move the default smb.conf and krb5.conf files installed by the package manager 

~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
~$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig

We can now try and install the backup DC server

~$ sudo samba-tool domain join ad.ifsg.ca DC -W AD -U Administrator

We get an error that it can’t find a primary AD server to connect to. This seems to be related to the systemd-resolved and is preventing samba-tool from seeing the primary AD server. To fix this edit the /etc/resolv.conf and try again.

~$ sudo cp /etc/resolv.conf /etc/resolv.conf.orig
~$ sudo nano /etc/resolv.conf
 Change nameserver to 192.168.2.10
 Change search to ad.ifsg.ca

Try installing the backup DC server again

~$ sudo samba-tool domain join ad.ifsg.ca DC -W AD -U Administrator
Finding a writable DC for domain 'ad.ifsg.ca'
Found DC dc1.ad.ifsg.ca
 Password for [AD\Administrator]:
workgroup is AD
realm is ad.ifsg.ca
 Adding CN=DC2,OU=Domain Controlls,DC=ac,DC=ifsg,DC=ca
 Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ac,DC=ifsg,DC=ca
 Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ac,DC=ifsg,DC=ca
 Adding SPNs to CN=DC2,OU=Domain Controllers,DC=ac,DC=ifsg,DC=ca
 Setting acount password for DC2$
 Enabling account
 Calling bare provision
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
 Unable to determine the DomainSID, can not enforce uniqueness constrant on local domainSIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of the file with your system krb5.conf or replace it with this one.  Do not create a symlink!
 Provision OK for domain DN DC=ad,DC=ifsg,DC=ca
 Starting replication
 [ works through replicating the databases ]
Adding 1 remote DNS records for DC2.ad.ifsg.ca
Adding DNA A record DC2.ad.ifsg.ca for IPv4: 192.168.2.11
Adding DNS CNAME record [long id]._msdcs.ad.ifsg.ca for DC2.ad.ifsg.ca
All other DNS recordxcs (like _ldap SRV records) will be created samba_dnsupdate on first startup
Replicating new DNS records in DC=DomainDnsZones,DC=ad,DC=ifsg,DC=ca
Replicating new DNS records in DC=ForestDnsZones,DC=ad,DC=ifsg,DC=ca
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSyncronized and dsServiceName
Setting up secrets database
Joined daomin AD (SID S-1 ... ) as a DC

Post install configuration and testing

Copy the krb5.conf file that samba-tool created to /etc/

~$ sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

We can attempt startup of the Samba backup domain controller

~$ sudo samba

Check the DNS settings

~$ host -t SRV _ldap._tcp.ad.ifsg.ca 
 Host _ldap._tcp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t SRV _kerberos._udp.ad.ifsg.ca 
 Host _kerberos._udp.ad.ifsg.ca not found: 3(NXDOMAIN)
~$ host -t A dc1.ad.ifsg.ca
 dc1.ad.ifsg.ca has address 192.168.2.10

Same problem as we saw with the primary DC server. Checking what is listening on port 53 indicates the same problem.

~$ sudo netstat -tulpn | grep :53
tcp     0      0 127.0.0.53:53    0.0.0.0:*    LISTEN   120/systemd-resolve
udp     0      0 127.0.0.53:53    0.0.0.0:*             120/systemd-resolve

To fix this we can disable the systemd-resolve service on the server

~$ sudo systemctl stop systemd-resolved
~$ sudo systemctl disable systemd-resolved
~$ sudo unlink /etc/resolv.conf
~$ sudo nano /etc/resolv.conf
 nameserver 192.168.2.11
 search ad.ifsg.ca
~$ sudo reboot

Start the Samba domain controller again

~$ sudo samba

Check the DNS settings again, these should resolve correctly now. There will be two lines in for ldap and kerberos connections as we now have a second domain controller.

~$ host -t SRV _ldap._tcp.ad.ifsg.ca 
 _ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc1.ad.ifsg.ca.
 _ldap._tcp.ad.ifsg.ca has SRV record 0 100 389 dc2.ad.ifsg.ca.
~$ host -t SRV _kerberos._udp.ad.ifsg.ca 
 _kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc1.ad.ifsg.ca.
 _kerberos._udp.ad.ifsg.ca has SRV record 0 100 88 dc2.ad.ifsg.ca.
~$ host -t A dc1.ad.ifsg.ca
 dc1.ad.ifsg.ca has address 192.168.2.10
~$ host -t A dc2.ad.ifsg.ca
 dc2.ad.ifsg.ca has address 192.168.2.11

As before we need to configure the NTP server chronyd.

~$ samba -b | grep 'NTP' | awk '{print $NF}'
  /var/lib/samba/ntp_signd

By default, the permissions and group settings will not let chronyd use this socket.

~$ ls -ld /var/lib/samba/ntp_signd
  drwxr-x--- 2 root root 4096 Jan 24 05:08 /var/lib/samba/ntp_signd

Change the permissions as follows.

~$ sudo chown root:_chrony /var/lib/samba/ntp_signd/
~$ sudo chmod 750 /var/lib/samba/ntp_signd/
~$ ls -ld /var/lib/samba/ntp_signd
drwxr-x--- 2 root _chrony 4096 Jan 24 05:08 /var/lib/samba/ntp_signd

Now edit the chronyd configuration file to connect it to the above socket and enable connections on the network.

~$ sudo nano /etc/chrony/chrony.conf 
 # Settings for Samba DC
 allow 192.168.2.0/24 # dns netmask
 ntpsigndsocket /var/lib/samba/ntp_signd

By defafult Samba is not configured to run as a service meaning it will not startup automatically with the server. Running Samba as a service can be accomplished using systemd. First though, kill the Samba process so the service setup does not fail.

~$ ps -ax | grep samba
      1593 ?        Ss     0:00 samba: root process 
      4319 pts/0    S+     0:00 grep --color=auto samba
~$ sudo kill 1593

Now configure Samba to run as a systemd service. Mask the smbd, nmbd and winbind services and unmask the samba-ad-dc service.

~$ sudo systemctl mask smbd nmbd winbind
~$ sudo systemctl disable smbd nmbd winbind
~$ sudo systemctl stop smbd nmbd winbind
~$ sudo systemctl unmask samba-ad-dc
~$ sudo systemctl start samba-ad-dc
~$ sudo systemctl enable samba-ad-dc

Reboot the server and test!

~$ sudo reboot
~$ sudo systemctl status samba-ad-dc

Now confirm the server is working, test using kinit

~$ kinit Administrator

If you this worked, you should have entered your password and seen a message about your password expiring in # days

Lastly, confirm that redundancy is working by ssh’ing into the dc1 server and turning off the DC server

~$ sudo systemctl stop samba-ad-dc 
 # On dc2 try and use kinit
~$ kinit Administrator
 # If you are asked for your password and it says it will expire then the backup server is working. 
 # On dc1, turn the primary DC back on.
~$ sudo systemctl start samba-ad-dc

References

  1. Samba 4 Active Directory Domain Controller on Ubuntu 18.04 Server
  2. Setting up Samba as an Active Directory Domain Controller
  3. Joining a Samba DC to an Existing Active Directory

A domain controller on Linux server?! Impossible! The reaction is valid, especially for those who hear the concept for the first time. Turns out that not only can you set up a domain controller Linux server, but you can also do so for free!

Whether you opt for Linux for cost, standardization, or greener, leaner tech stack, learning how to set up a Linux DC is a good skill for every administrator.

Read on to learn how to use Samba as a reliable domain controller Linux server.

Scan Your AD for 930+ Million Compromised Passwords. Download Specops Password Auditor, a FREE read only tool that identifies password-related vulnerabilities.

Prerequisites

This tutorial will be a hands-on demonstration. If you’d like to follow along, be sure you have an Ubuntu Server. This tutorial will use an Ubuntu Server 22.04 LTS with the following configuration.

  • Hostname: oddjobs-dc
  • IP Address: 192.168.8.10
  • Domain: OJI.COM
  • FQDN: oddjobs-dc.oji.com

Preparing the Domain Controller on Linux Server

After meeting all the prerequisites, you must ensure there are no default operating system settings that might hamper the functioning of the DC. Don’t worry. This step is not as complicated as it may sound. Follow the below steps to accomplish this task.

Setup the Hosts File Entry

The first task is to add your server’s hostname and FQDN entries in the local hosts (/etc/hosts) file.

1. First, open your preferred SSH client and log in to your Ubuntu server.

2. Open your hosts (/etc/hosts) file in a text editor, such as nano.

3. Delete any entry that maps your hostname or FQDN to any IP besides the static IP. For example, this server’s static IP address is 192.168.8.10, so leave this entry if it exists. Refer to the example below.

Delete unnecessary hosts entry

Delete unnecessary hosts entry

4. Next, add an entry to map your host’s FQDN and static IP address. In this tutorial, the server FQDN is oddjobs-dc.oji.com, so the entry to add is:

192.168.8.10 oddjobs-dc.oji.com oddjobs-dc
Add your domain controller Linux server FQDN and host

Add your domain controller Linux server FQDN and host

5. Save the hosts (/etc/hosts) file and exit the editor.

Confirm Hostname and FQDN Resolution

Run the commands below to confirm the server’s hostname and that the FQDN resolves to the correct IP address.

# verify server FQDN
hostname -A

# verify FQDN resolves to your server IP address
ping -c1 oddjobs-dc.oji.com

As you can see below, the commands returned the expected FQDN and IP address.

Verify the FQDN and IP resolution

Verify the FQDN and IP resolution

Disable the Network Name Resolution Service

Ubuntu has a service called systemd-resolved, which takes care of the DNS resolution requests. This service is unsuitable for Samba, and you must disable it and manually configure the DNS resolver instead.

1. Disable the systemd-resolved service by running the command below.

sudo systemctl disable --now systemd-resolved
Disable the DNS resolver service

Disable the DNS resolver service

2. Next, remove the symbolic link to the file /etc/resolv.conf.

sudo unlink /etc/resolv.conf

3. Create a new /etc/resolv.conf file in your text editor. This example uses nano.

sudo nano /etc/resolv.conf

4. Populate the /etc/resolv.conf file with the following information. Replace 192.168.8.10 with your server’s IP address and oji.com with your domain. Leave the nameserver 1.1.1.1 as the fallback DNS resolver, which is the public DNS resolver by Cloudflare.

# your Samba server IP Address
nameserver 192.168.8.10

# fallback resolver
nameserver 1.1.1.1

# your Samba domain
search oji.com

Your /etc/resolv.conf should look similar to the screenshot below.

Update the DNS resolver file

Update the DNS resolver file

5. Save the file and exit the editor.

Installing Samba

After completing the server preparation, it is time to install Samba and other required packages to provision the domain controller.

1. First, ensure that the repository cache is up to date by running the below command.

2. Run the command below to install the required packages for a fully functioning domain controller.

sudo apt install -y acl attr samba samba-dsdb-modules samba-vfs-modules smbclient winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools

3. On the Configuring Kerberos Authentication step, type the DNS domain in uppercase. In this example, the default realm domain is OJI.COM. Highlight Ok, and press Enter to accept the value.

Configure the default realm

Configure the default realm

4. On the next screen asking for the Kerberos servers for your realm, type the server hostname and press Enter.

Type the Kerberos server hostname

Type the Kerberos server hostname

5. On the next screen asking for the Administrative server for your Kerberos realm, type the server hostname and press Enter.

Type the administrative server hostname

Type the administrative server hostname

6. After the configuration, disable the unnecessary services (winbind, smbd, and nmbd).

sudo systemctl disable --now smbd nmbd winbind
Disable unnecessary services

Disable unnecessary services

7. Enable and activate the samba-ad-dc service. This service is what Samba needs to act as an Active Directory domain controller Linux server.

# unmask the samba-ad-dc service
sudo systemctl unmask samba-ad-dc

# enable samba-ad-dc service
sudo systemctl enable samba-ad-dc
Activate and enable the samba-ad-dc service

Activate and enable the samba-ad-dc service

Provisioning the Domain Controller Linux Server

Using the samba-tool binary, you can now provision the domain controller upon your Samba installation. Samba-tool is a configuration tool to interact with and configure various aspects of a Samba-based AD.

1. For good measure, backup the existing /etc/samba/smb.conf and /etc/krb5.conf files.

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo mv /etc/krb5.conf /etc/krb5.conf.bak

2. Run the below command to promote the Samba to an Active Directory domain controller Linux server.

The –use-rfc2307 switch enables the Network Information Service (NIS) extension, which allows the DC to manage UNIX-based user accounts appropriately.

sudo samba-tool domain provision --use-rfc2307 --interactive

3. Answer the prompts as follows.

  • Realm – the tool automatically detects your Kerberos realm. In this example, the realm is OJI.COM. Press Enter to accept the default.
  • Domain – the tool automatically detects the NetBIOS domain name. In this example, the NetBIOS is OJI. Press Enter to continue.
  • Server role – the tool automatically populates the server role as a domain controller (dc). Press Enter to continue.
  • DNS backend – the default is SAMBA_INTERNAL. Press Enter to accept the default.
  • DNS forwarder IP address – type the fallback resolver address you specified in resolve.conf earlier, which is 1.1.1.1. Press Enter to continue.
  • Administrator password – set the password of the default domain administrator. The password you specify must meet Microsoft’s minimum complexity requirements. Press Enter to proceed.
  • Retype password – retype the default domain administrator password and press Enter.
Configure the domain controller Linux server

Configure the domain controller Linux server

At the end of the configuration, you’ll see the following information.

Domain provisioning results

Domain provisioning results

4. The samba-tool command generated the Samba AD Kerberos configuration file at /var/lib/samba/private/krb5.conf. You must copy this file to /etc/krb5.conf. To do so, run the following command.

sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

5. Finally, start the samba-ad-dc service.

sudo systemctl start samba-ad-dc
sudo systemctl status samba-ad-dc

As you can see below, the service status is now active (running).

active (running)

active (running)

Testing the Domain Controller Linux Server

The Samba AD DC server is now running. In this section, you will perform a few post-installation tests to confirm key components are functioning as desired. One such test is to attempt logging into the default network shares on the DC.

Run the smbclient command to log on as the default administrator account and list (ls) the contents of the netlogon share.

smbclient //localhost/netlogon -U Administrator -c 'ls'

Enter the default admin password. The share should be accessible without errors if the DC is in a good state. As you can see below, the command listed the netlogon share directory.

List the netlogon share

List the netlogon share

Verifying DNS Resolution for Key Domain Records

Run the commands below to look up the following DNS records.

  • TCP-based LDAP SRV record for the domain.
  • UDP-based Kerberos SRV record for the domain.
  • A record of the domain controller.
host -t SRV _ldap._tcp.oji.com
host -t SRV _kerberos._udp.oji.com
host -t A oddjobs-dc.oji.com

Each command should return the following results, indicating that the DNS resolution works.

Query the DNS SRV and A records

Query the DNS SRV and A records

Testing Kerberos

The last test is to attempt to issue a Kerberos ticket successfully.

1. Execute the kinit command for the administrator user. The command automatically appends the realm to the user account. For example, the administrator will become [email protected], where OJI.com is the realm.

2. Type the administrator password on the prompt and press Enter. If the password is correct, you’ll see a Warning message about the password expiration, as shown below.

Acquiring a Kerberos ticket

Acquiring a Kerberos ticket

3. Run the klist command below to list all tickets in the ticket cache.

The screenshot below shows that the Kerberos ticket for the administrator account is in the ticket cache. This result indicates that Kerberos authentication works on your domain controller Linux server.

View Kerberos tickets in the ticket cache

View Kerberos tickets in the ticket cache

Extend the functionality of Group Policy and simplify the management of fine-grained password policies. Target any GPO level, group, user, or computer with dictionary and passphrase settings with Specops Password Policy. Try it Free!

Conclusion

Congratulations on reaching the end of this tutorial. You have now learned to stand up an Active Directory domain controller Linux server quickly. Deepen your knowledge on the subject by learning to create users and join client computers in the domain.

В сегодняшней статье я опишу и продемонстрирую процесс подключения Samba к доменной сети Windows в качестве рядового участника.

В четвертой версии Samba появилась возможность использовать сервер с Linux в качестве контроллера домена. И, хотя это давно перестало быть новостью, я надеюсь, что многим пригодится информация из этой и следующих статей. Итак, сегодня я настрою контроллер домена на Ubuntu Server 16.04 в стандартной конфигурации, а заодно расскажу и покажу, как это сделать.

Установка пакетов.

Одной только Samba нам будет недостаточно. Для аутентификации пользователей понадобится Kerberos, о котором уже говорилось ранее, для синхронизации времени — NTP, для управления правами доступа — ACL (система, многим известная как «виндовые галочки»). Если в сети присутствуют принтеры, которыми нужно управлять удаленно, придется установить и настроить СUPS. Samba 4 содержит встроенный DNS с ограниченной функциональностью, поэтому я буду использовать именно его. Если требуется полноценный DNS-сервер, добавьте в список BIND.

Устанавливаем минимальный набор, необходимый для нашей задачи:

sudo apt install samba samba-tool krb5-user ntp acl

Пакет acl, вероятно, уже установлен у вас в системе, поскольку он входит в стандартный набор Ubuntu 16.04, 16.10 и 17.04. Весьма вероятно, что он никуда не денется и в следующих версиях.

Kerberos попросит указать область по умолчанию. Можно оставить поля пустыми, позже мы все равно получим сгенерированный автоматически конфиг Kerberos.

Установка пакетов

Настройка Samba и Kerberos.

Для формирования файла /etc/samba/smb.conf воспользуемся утилитой samba-tool. То же самое в случае необходимости можно сделать и вручную, просто вписав соответствующие строки.

Для начала переименуем стандартный smb.conf, чтобы позволить samba-tool создать для нас новый.

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old

Базовый вариант команды для формирования конфига Samba в роли контроллера домена выглядит так:

sudo samba-tool domain provision --use-rfc2307 --interactive

Сюда могут быть добавлены дополнительные параметры, но о самом необходимом нас и без того спросят. Кроме того, в случае проблем вы можете сделать логи более подробными, добавив ключ -d и число от 0 до 10. Значение по умолчанию — 1.

Теперь вам нужно лишь вводить данные в ответ на соответствующие запросы. В квадратных скобках указывается значение по умолчанию, если оно подходит, достаточно просто нажать Enter.

Realm полное_имя_домена
Domain короткое_имя_домена
Server Role оставляем по умолчанию (dc)
DNS Backend если не планируется отдельный DNS-сервер, оставьте SAMBA_INTERNAL
DNS Forwarder IP Adress 8.8.8.8 ( это DNS от Google), если только в вашей сети не настроен собственный сервер доменных имен.

После этого нужно будет придумать и дважды ввести пароль администратора домена.

Обратите внимание! Минимальная длина пароля — 7 символов. Если это условие не будет соблюдено или найдутся другие ошибки, придется вводить последнюю команду и все параметры заново.

Настройка Samba и Kerberos

Настройка Samba и Kerberos

На скриншоте видно, что подходящий конфигурационный файл Kerberos сгенерировался автоматически.

Вот его содержимое:

Настройка Samba и Kerberos

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

sudo mv /etc/krb5.conf /etc/krb5.conf.old  
sudo ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf

Параметр DNS Forwarder IP Adress — это адрес DNS-сервера, к которому будет выполнен запрос в том случае, если локальный, то есть, встроенный в Samba, сервер имен не найдет соответствия. Вы можете вписать сюда none, чтобы предотвратить разрешение доменных имен где-либо еще. При этом доступ к внешним сайтам по имени станет невозможным.

Настройка статического IP.

Динамически назначаемый IP-адрес — не лучшее решение для контроллера домена, он должен иметь статический IP. Для этого нужно знать имя сетевого интерфейса, а выяснить его можно так:

netstat -i

Настройка статического IP

Затем открываем /etc/network/interfaces и приводим его примерно к следующему содержанию:

auto имя_интерфейса
iface имя_интерфейса inet static
address 192.168.0.100 (или другой ip, который будет иметь сервер)
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.100
dns-search имя_домена (sambadomain.test в моем случае)

Перезагружаемся и смотрим, все ли у нас получилось:

ip addr

Отлично, IP соответствует только что указанному в конфиге:

Настройка статического IP

В качестве DNS я указал статический адрес, который был прописан для этого сервера. При разрешении имен запрос будет направлен к внутреннему DNS Samba, который мы уже настроили. И, если подходящий результат не будет найден, запрос перенаправится на 8.8.8.8, который мы указали в качестве дополнительного DNS.

Давайте проверим, все ли работает как надо:

ping google.com

Если google.com или любой другой сайт успешно пингуется, значит, доступ к сети вы не сломали и внешние имена благополучно разрешаются через удаленный DNS-сервер.

Настройка статического IP

На этом пока все. Мы сделали немало, но впереди еще много интересного.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Delta chat для windows
  • Драйвер для microsoft kernel debug network adapter windows 10
  • Apple touchpad для windows
  • Windows 7 максимальная kdfx sp1 x86 reborn full
  • Дискорд 64 бита windows 10 официальный сайт