ActiveDirectory/DC
Использование 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/.
Установка
1. Установите пакет task-samba-dc с версии 4.3.1 для Samba DC на базе Heimdal Kerberos или task-samba-dc-mitkrb5 с версии 4.10.3-alt4 для Samba DC на базе MIT Kerberos, который установит необходимое.
KEYRING:persistent:%{uid}
.# control krb5-conf-ccache default
2. Так как Samba в режиме контроллера домена (Doman Controller, DC) использует свой сервер LDAP, свой центр распределения ключей KDC (сервер Kerberos) и свой сервер DNS (если не включен плагин BIND9_DLZ), перед установкой остановите конфликтующие службы krb5kdc и slapd, а также bind:
# for service in smb nmb krb5kdc slapd bind; do chkconfig $service off; service $service stop; done
Создание нового домена
Восстановление к начальному состоянию samba
Очищаем базы и конфигурацию Samba (если уже создавался домен):
# rm -f /etc/samba/smb.conf
# rm -rf /var/lib/samba
# rm -rf /var/cache/samba
# mkdir -p /var/lib/samba/sysvol
rm -f /etc/samba/smb.conf
Выбор имени домена
Имя домена для разворачиваемого DC должно состоять минимум из двух компонентов, разделённых точкой.
При этом должно быть установлено правильное имя узла и домена для сервера hostnamectl set-hostname name:
- HOSTNAME=dc.domain.alt в /etc/sysconfig/network
- # 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
Интерактивное создание домена
В примере показано создание домена 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:»).
Параметры --use-rfc2307 --use-xattrs=yes позволяют поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.
Запуск службы
Установите службу по умолчанию и запустите её:
# systemctl enable --now samba
Создание домена с BIND9_DLZ
По умолчанию в Samba используется dns-backend = SAMBA_INTERNAL, для возможности переключения режимов dns_backend для сервера SAMBA_INTERNAL/BIND9_DLZ требуется внести следующие изменения:
- Установить необходимые пакеты (bind и bind-utils) на сервер:
# apt-get install bind bind-utils
- На сервере в файл /etc/samba/smb.conf в блок [global] добавить строку:
server services = -dns
- Отключить chroot:
# control bind-chroot disabled
- Отключить KRB5RCACHETYPE:
# grep -q KRB5RCACHETYPE /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
- Подключить плагин BIND_DLZ:
# grep -q 'bind-dns' /etc/bind/named.conf || echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf
- Привести /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"; //listen-on { localnets; {{ samba_network }}; }; forwarders { {{ samba_dns_forward }}; }; allow-query { localnets; {{ samba_network }}; }; //allow-query-cache { localnets; {{ samba_network }}; }; allow-recursion { localnets; {{ samba_network }}; }; max-cache-ttl 86400; //interfaces-interval 0; }; 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; //listen-on { localnets; 192.168.0.0; }; //forwarders { 8.8.8.8; }; 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; }; };
- Выполнить остановку bind:
# systemctl stop bind
- При выполнении команды создания домена одной командой указать тип dns-backend = BIND9_DLZ:
# samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --server-role=dc
- Далее произвести рестарт — samba, bind:
# systemctl restart samba # systemctl restart bind
Настройка Kerberos
Откройте от имени суперпользователя файл /etc/krb5.conf.
Проверить что установлено значение false в строке "dns_lookup_realm = false".
Раскомментируйте строку в [libdefaults] "default realm" и введите название области заглавными буквами.
Ниже, под строкой [realms] вместо EXAMPLE.COM введите название области, а вместо example.com в "default domain" введите IP-адрес сервера с Samba.
Под строкой [domain_realm] example.com и EXAMPLE.COM замените на ваш домен сохраняя регистр.
Альтернативный вариант
В момент создания домена Samba автоматически конфигурирует шаблон файла krb5.conf для вашего домена, и оставляет его в директории /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
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
Если компьютер с таким именем заведён, удалить его можно командой:
pdbedit -x -m <имя>
Добавить группу:
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
Имя узла: 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
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 запускаемой по умолчанию:
# chkconfig samba on
7. Запускаем службу, соответственно:
# service samba start
Репликация
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
Доверительные отношения
Доверительные отношения позволяют аутентифицироваться под пользователями не только текущего домена, но и доверенных.
Подробнее:
Ссылки
- Рекомендуемые серверные установочные образы (после установки выполните обновление ОС):
- Альт Сервер
- Альт Линукс СПТ 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:
- Иные ресурсы:
Советы
- Введите в домен машину с 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]