ActiveDirectory/DC: различия между версиями

Материал из ALT Linux Wiki
 
(не показано 165 промежуточных версий 29 участников)
Строка 1: Строка 1:
[[Файл:Samba_logo.png|frameless|right]]
{{Note| Кроме Wiki, читайте документацию к дистрибутиву, например: [https://docs.altlinux.org/ru-RU/alt-server/10.1/html-single/alt-server/index.html#sambadc--chapter Глава "Samba 4 в роли контроллера домена Active Directory" в описании Альт Сервер 10.1]}}
Использование Samba 4 в роли контроллера домена [https://ru.wikipedia.org/wiki/Active_Directory Active Directory]. Такой способ позволяет вводить Windows 7/8 в домен [[Домен/Windows#.D0.92.D1.85.D0.BE.D0.B4_.D0.B2_ALT-.D0.B4.D0.BE.D0.BC.D0.B5.D0.BD_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC_.D0.BD.D0.B0_Windows_7.2F8|безо всяких манипуляций с реестром]].
Использование Samba 4 в роли контроллера домена [https://ru.wikipedia.org/wiki/Active_Directory Active Directory]. Такой способ позволяет вводить Windows 7/8 в домен [[Домен/Windows#.D0.92.D1.85.D0.BE.D0.B4_.D0.B2_ALT-.D0.B4.D0.BE.D0.BC.D0.B5.D0.BD_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC_.D0.BD.D0.B0_Windows_7.2F8|безо всяких манипуляций с реестром]].


Строка 15: Строка 19:


Не поддерживаются следующие возможности[https://lists.samba.org/archive/samba/2014-October/186126.html]:
Не поддерживаются следующие возможности[https://lists.samba.org/archive/samba/2014-October/186126.html]:
* Не реплицируется хранилище SYSVOL (можно использовать osync[https://wiki.samba.org/index.php/SysVol_Bidirectional_Replication]);
* Не реплицируется хранилище SYSVOL (можно использовать osync[https://wiki.samba.org/index.php/SysVol_Bidirectional_Replication][https://wiki.samba.org/index.php/Rsync_based_SysVol_replication_workaround]);
* Доверительные отношения только в одном направлении (от Windows к Samba, но не наоборот[https://wiki.samba.org/index.php/FAQ#Trusts]) (что не позволяет реализовать лес доменов);
* Доверительные отношения с некоторыми ограничениями[https://wiki.samba.org/index.php/FAQ#Trust_Support]):
** Правила SID filtering не реализованы;
** Невозможно добавить пользователей и группы в доменные группы доверенного домена;
* Не поддерживаются поддомены[https://lists.samba.org/archive/samba/2015-June/192441.html];
* Не поддерживаются поддомены[https://lists.samba.org/archive/samba/2015-June/192441.html];
** В Samba отсутствует полноценная поддержка фантомных объектов[https://wiki.samba.org/index.php/Samba4/DRS_TODO_List#Phantom_objects];
** Проблемы при построении структуры AD (Active Directory browser), проблемы при поиске объектов в другом домене;
** При применении групповых политик в многодоменной среде могут быть проблемы с определением, в каком домене находится компьютер;
* [https://wiki.samba.org/index.php/DFS DFS] работает только в режиме одиночного сервера;
* [https://wiki.samba.org/index.php/DFS DFS] работает только в режиме одиночного сервера;
* Не реализовано DFS-R;
* Не реализован протокол DFS-R[https://wiki.samba.org/index.php/SysVol_replication_(DFS-R)];
* Не полностью реализовано RODC;
* Не полностью реализована поддержка контроллеров домена только на чтение[https://wiki.samba.org/index.php/Samba4/DRS_TODO_List#Support_RODC] - RODC[https://wiki.samba.org/index.php/Join_a_domain_as_a_RODC];
* ''В сборке ALT Linux '' не поддерживается CTDB (хранение данных в кластерной инфраструктуре);
* <strike>Ограничения размера базы TDB в 4 ГБ[http://ldapcon.org/2015/wp-content/uploads/2015/09/ivanova-samba_backend.pdf], приводит к невозможности перехода от леса доменов к плоской структуре с одним доменом</strike> (решено в samba-4.9 и старше с использованием бекенда LMDB[https://wiki.samba.org/index.php/Using_the_lmdb_database_backend]).
* Не работает Winbind.
* ''Не закончено тестирование'' поддержки CTDB (хранение данных в кластерной инфраструктуре);
* ''Не закончено тестирование'' работы Winbind.
 
Смотрите также статью [http://habrahabr.ru/post/272777/ Возможности и ограничения Samba 4 как контроллера домена Active Directory] на http://habrahabr.ru/.


{{Attention|Samba AD DC несовместима с OpenLDAP и MIT Kerberos, поэтому пока пакет {{pkg|samba-DC}} во избежание конфликтов не собран в репозитории.}}
{{Attention|Samba AD DC функционирует на уровне контроллера доменов Windows 2008 R2. Вы можете ввести его в домен Windows 2012 как клиента, но не как контроллер домена.}}
{{Attention|Samba AD DC функционирует на уровне контроллера доменов Windows 2008. Вы можете ввести его в домен Windows 2012 как клиента, но не как контроллер домена.}}


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


1. Так как Samba в режиме контроллера домена (Doman Controller, DC) использует как свой LDAP, так и свой сервер Kerberos, несовместимый с MIT Kerberos, перед установкой  
{{Note|До версии 4.3.1 требовалось явно установить пакеты: {{pkg|samba-DC python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-client krb5-kinit}}}}
 
{{Note|Samba на базе Heimdal Kerberos использует KDC несовместимый с MIT Kerberos, поэтому на контроллере домена на базе Heimdal Kerberos из пакета {{pkg|samba-dc}}, для совместимости с клиентской библиотекой libkrb5, в krb5.conf (в блоке —- libdefaults) необходимо отключить использование ядерного кеша ключей — <code>KEYRING:persistent:%{uid}</code>:
<source lang="text" highlight="1"># control krb5-conf-ccache default</source>
}}
 
2) Так как Samba в режиме контроллера домена (Domain Controller, DC) использует свой сервер LDAP, свой центр распределения ключей KDC (сервер Kerberos) и свой сервер DNS (если не включен плагин BIND9_DLZ), перед установкой  
остановите конфликтующие службы {{cmd|krb5kdc}} и {{cmd|slapd}}, а также {{cmd|bind}}:
остановите конфликтующие службы {{cmd|krb5kdc}} и {{cmd|slapd}}, а также {{cmd|bind}}:
chkconfig krb5kdc off
service krb5kdc stop
chkconfig slapd off
service slapd stop
chkconfig bind off
service bind stop


2. Установите пакеты {{pkg|samba-DC}}, которые конфликтуют с обычной samba:
<source lang="text" highlight="1"># for service in bind krb5kdc nmb smb slapd; do chkconfig $service off; service $service stop; done</source>
apt-get install samba-DC python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-client
или
удаляются пакеты:
<source lang="text" highlight="1"># systemctl disable --now bind krb5kdc nmb smb slapd</source>
alt-domain-server alterator-auth alterator-ldap-groups alterator-ldap-users alterator-openldap alterator-squid
 
host2cat ldap-user-tools libnetapi libsmbclient libwbclient netpolice-main openresolv-host2cat samba samba-client
{{Note|Можно также отключить службы и выключить автозагрузку служб графическим способом в [[ЦУС]]. Например, в ALT Server зайдите в Система > Администрирование > ЦУС > Режим эксперта> [[Alterator-services|Системные службы]].}}
samba-common samba-libs samba-winbind samba-winbind-clients squid-conf-host2cat squid-helpers
{{Note|При использовании плагина BIND9_DLZ службу {{cmd|bind}} после создания домена потребуется включить.}}
 
= Создание нового домена =
 
== Восстановление к начальному состоянию samba ==
 
Очищаем базы и конфигурацию Samba (если уже создавался домен):
<source lang="text" highlight="1-4"># rm -f /etc/samba/smb.conf
# rm -rf /var/lib/samba
# rm -rf /var/cache/samba
# mkdir -p /var/lib/samba/sysvol</source>
 
{{Attention|Обязательно удаляйте {{path|/etc/samba/smb.conf}} перед созданием домена: <source lang="bash">rm -f /etc/samba/smb.conf</source>}}
 
== Выбор имени домена и контроллера домена==
 
'''Имя домена''' должно состоять минимум из двух компонентов, разделенных точкой, например, domain.alt. Если используется домен с суффиксом .local, потребуется отключить службу avahi-daemon на сервере и на подключаемых Linux-компьютерах.


{{Note|Если вы не используете специальный дистрибутив с Samba AD DC, подключите дополнительные репозитории:
'''Имя контроллера домена (DC)''' должно быть полным доменным именем (dc.domain.alt) и иметь имя узла (dc) длиной не более 15 символов.
;для p7:
apt-repo add task 132256
apt-get update
;для Sisyphus:
apt-repo add task 138496
apt-get update
}}


= Миграция существующего сервера =
Для установки '''постоянного''' имени машины используйте следующую команду:
  hostnamectl set-hostname <name>


На базе https://wiki.samba.org/index.php/Samba4/samba-tool/domain/classicupgrade/HOWTO
В системах, в которых управление сетью осуществляется через etcnet и используется SysVinit вместо systemd, полное доменное имя (FQDN) прописывается в конфигурационном файле '''/etc/sysconfig/network''':


1. Скопируем для миграции данные в один каталог:
HOSTNAME=dc.domain.alt
<source lang="Bash">mkdir /var/lib/samba/dbdir
cp -pv /var/lib/samba/private/* /var/lib/samba/dbdir
cp -pv /var/lib/samba/{account_policy,gencache_notrans,group_mapping}.tdb /var/lib/samba/dbdir
</source>
Должно скопироваться пять файлов .tdb


2. [[Su|Под root]] запустим classicupgrade:
Во все остальных случаях параметр HOSTNAME игнорируется.
<source lang="Bash">samba-tool domain classicupgrade --dbdir=/var/lib/samba/dbdir --use-xattrs=yes --realm=school.alt /etc/samba/smb.conf</source>


= Выбор имени домена =
Для '''временной''' установки имени машины (до перезагрузки системы) можно использовать следующие команды:
# hostname dc.domain.alt
# domainname domain.alt


Имя домена для разворачиваемого DC должен состоять минимум из двух компонентов, разделённых точкой.
== Создание домена с SAMBA_INTERNAL ==
=== Создание домена одной командой ===


При этом должен быть установлен правильное имя узла и домена для сервера:
Создание контроллера домена ''domain.alt'' с паролем администратора ''Pa$$word'':
* HOSTNAME=dc.school.alt в {{path|/etc/sysconfig/network}}
* hostname dc.school.alt
* domainname school.alt


= Запуск нового сервера =
<source lang="text" highlight="1"># samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc</source>


В примере показано создание домена ''school.alt''.
{{note|В команду можно добавить параметр, который позволяет указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена:
<syntaxhighlight lang="ini">--option="dns forwarder=xxx.xxx.xxx.xxx"</syntaxhighlight>
}}


1. Удалите файл {{path|/etc/samba/smb.conf}}, потому что для samba-DC будет создан новый файл конфигурации:
=== Интерактивное создание домена ===
rm -f /etc/samba/smb.conf
{{note|У Samba свой собственный DNS-сервер. В '''DNS forwarder IP address''' нужно указать внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена.}}
В примере показано создание домена ''domain.alt''.


2. Запустите {{cmd|samba-tool domain provision}}:
Запустите {{cmd|samba-tool domain provision}}:
<source lang="text"># samba-tool domain provision
<source lang="text" highlight="1"># samba-tool domain provision
Realm [SCHOOL.ALT]:  
Realm [DOMAIN.ALT]:  
  Domain [SCHOOL]:  
  Domain [DOMAIN]:  
  Server Role (dc, member, standalone) [dc]:  
  Server Role (dc, member, standalone) [dc]:  
  DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:  
  DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:  
Строка 106: Строка 125:
Setting up sam.ldb rootDSE
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=school,DC=alt
Adding DomainDN: DC=domain,DC=alt
Adding configuration container
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb schema
Строка 121: Строка 140:
Setting up self join
Setting up self join
Adding DNS accounts
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=school,DC=alt
Creating CN=MicrosoftDNS,CN=System,DC=domain,DC=alt
Creating DomainDnsZones and ForestDnsZones partitions
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Строка 130: Строка 149:
Server Role:          active directory domain controller
Server Role:          active directory domain controller
Hostname:              c228
Hostname:              c228
NetBIOS Domain:        SCHOOL
NetBIOS Domain:        DOMAIN
DNS Domain:            school.alt
DNS Domain:            domain.alt
DOMAIN SID:            S-1-5-21-80639820-2350372464-3293631772</source>
DOMAIN SID:            S-1-5-21-80639820-2350372464-3293631772</source>


При запросе ввода нажимайте Enter за исключением запроса пароля администратора («Administrator password:» и «Retype password:»).
При запросе ввода нажимайте Enter за исключением запроса пароля администратора («Administrator password:» и «Retype password:»).
{{Note|Пароль администратора должен быть не менее 8 символов и содержать символы как минимум трёх групп из четырёх возможных: латинских букв в верхнем и нижнем регистрах, чисел и других небуквенно-цифровых символов.}}
{{Note|Пароль администратора должен быть не менее 7 символов и содержать символы как минимум трёх групп из четырёх возможных: латинских букв в верхнем и нижнем регистрах, чисел и других небуквенно-цифровых символов.}}


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


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


Установите службу по умолчанию и запустите её:
Установите службу по умолчанию и запустите её:
chkconfig samba on
<source lang="text" highlight="1"># systemctl enable --now samba</source>
service samba start
 
{{note|Если служба после установки никаким способом не запускается, перезагрузите сервер}}
 
== Создание домена с BIND9_DLZ ==
 
По умолчанию в Samba используется '''dns-backend = SAMBA_INTERNAL''', для возможности переключения режимов dns_backend для сервера '''SAMBA_INTERNAL/BIND9_DLZ''' требуется внести следующие изменения:
 
# Установить необходимые пакеты ({{pkg|bind}} и {{pkg|bind-utils}}) на сервер:
#:<source lang="text" highlight="1"># apt-get install bind bind-utils</source>
# На сервере в файл {{path|/etc/samba/smb.conf}} в блок [global] добавить строку:
#:<source lang="text" highlight="1">server services = -dns</source>
# Отключить chroot:
#:<source lang="text" highlight="1"># control bind-chroot disabled</source>
# Отключить KRB5RCACHETYPE:
#:<source lang="text" highlight="1"># grep -q KRB5RCACHETYPE /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind</source>
# Подключить плагин BIND_DLZ:
#:<source lang="text" highlight="1"># grep -q 'bind-dns' /etc/bind/named.conf || echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf</source>
# Привести {{path|/etc/bind/options.conf}} к виду (вместо {} подставить свои параметры в ""):
#:<source lang="text">
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;};
};
</source>
#: Например:
#:<source lang="text">
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; };
};
</source>
# Выполнить остановку '''bind''':
#:<source lang="text" highlight="1"># systemctl stop bind</source>
# При выполнении команды создания домена одной командой указать тип dns-backend = BIND9_DLZ:
#:<source lang="text" highlight="1"># samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --server-role=dc</source>
# Далее произвести рестарт — '''samba, bind''':
#:<source lang="text" highlight="1-2"># systemctl restart samba
# systemctl restart bind</source>
 
= Настройка Kerberos =
Откройте от имени суперпользователя на редактирование файл {{path|/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 автоматически конфигурирует шаблон файла {{path|/var/lib/samba/private/krb5.conf}} для вашего домена.
 
То есть, его можно просто скопировать с заменой:
<source lang="text" highlight="1"># cp /var/lib/samba/private/krb5.conf /etc/krb5.conf</source>


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


1. Общая информация о домене:
1. Общая информация о домене:
<source lang="text"># samba-tool domain info 127.0.0.1
<source lang="text" highlight="1"># samba-tool domain info 127.0.0.1
Forest          : school.alt
Forest          : domain.alt
Domain          : school.alt
Domain          : domain.alt
Netbios domain  : SCHOOL
Netbios domain  : DOMAIN
DC name          : c228.school.alt
DC name          : c228.domain.alt
DC netbios name  : C228
DC netbios name  : C228
Server site      : Default-First-Site-Name
Server site      : Default-First-Site-Name
Строка 158: Строка 274:


2. Просмотр предоставляемых служб:
2. Просмотр предоставляемых служб:
<source lang="text"># smbclient -L localhost -Uadministrator
<source lang="text" highlight="1"># smbclient -L localhost -U administrator
Enter administrator's password:  
Enter TEST\administrator's password:  
Domain=[SCHOOL] OS=[Unix] Server=[Samba 4.0.21]


        Sharename      Type      Comment
Sharename      Type      Comment
        ---------      ----      -------
---------      ----      -------
        netlogon        Disk       
sysvol          Disk     
        sysvol         Disk       
netlogon        Disk       
        IPC$            IPC      IPC Service (Samba 4.0.21)
public         Disk      Public Stuff
Domain=[SCHOOL] OS=[Unix] Server=[Samba 4.0.21]
free            Disk       
IPC$            IPC      IPC Service (Samba 4.14.10)
SMB1 disabled -- no workgroup available</source>


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


        Workgroup            Master
3.1 Убедитесь в наличии <tt>nameserver 127.0.0.1</tt> в {{path|/etc/resolv.conf}}:
        ---------            -------
host domain.alt
        SCHOOL.ALT          C228
3.2 Проверяем имена хостов:
        WORKGROUP            HOST-15</source>
*адрес '''_kerberos._udp.'''''<nowiki>*</nowiki>адрес домена с точкой''
<source lang="text"># host -t SRV _kerberos._udp.domain.alt.
_kerberos._udp.domain.alt has SRV record 0 100 88 c228.domain.alt.
</source>
*адрес '''_ldap._tcp.'''''<nowiki>*</nowiki>адрес домена с точкой''
<source lang="text"># host -t SRV _ldap._tcp.domain.alt.
_ldap._tcp.domain.alt has SRV record 0 100 389 c228.domain.alt.
</source>
*'''адрес хоста'''.''<nowiki>*</nowiki>адрес домена с точкой''
<source lang="text"># host -t A c228.domain.alt.
c228.domain.alt has address 192.168.1.1
</source>


3. Проверка конфигурации DNS (убедитесь в наличии <tt>nameserver 127.0.0.1</tt> в {{path|/etc/resolv.conf}}):
Если имена не находятся, проверяйте выключение службы {{cmd|named}}.
<source lang="text"># host -t SRV _kerberos._udp.school.alt.
  systemctl status named
_kerberos._udp.school.alt has SRV record 0 100 88 c228.school.alt.
# host -t SRV _ldap._tcp.school.alt.
_ldap._tcp.school.alt has SRV record 0 100 389 c228.school.alt.
# host -t A c228.school.alt.
c228.school.alt has address 192.168.1.1</source>


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


4. Проверка Kerberos:
4. Проверка Kerberos:
<source lang="text"># kinit administrator@SCHOOL.ALT
{{Attention|Имя домена должно быть в '''верхнем регистре''', иначе выдаст: <source lang="text">kinit: KDC reply did not match expectations while getting initial credentials</source>}}
Password for administrator@SCHOOL.ALT:  
<source lang="text" highlight="1"># kinit administrator
Password for administrator@DOMAIN.ALT:  
Warning: Your password will expire in 41 days on Вт 11 ноя 2014 08:58:30</source>
Warning: Your password will expire in 41 days on Вт 11 ноя 2014 08:58:30</source>


Просмотр полученного билета:
Просмотр полученного билета:
<source lang="text"># klist
<source lang="text" highlight="1"># klist
Ticket cache: FILE:/tmp/krb5cc_0
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SCHOOL.ALT
Default principal: administrator@DOMAIN.ALT


Valid starting      Expires              Service principal
Valid starting      Expires              Service principal
30.09.2014 10:23:54  30.09.2014 20:23:54  krbtgt/SCHOOL.ALT@SCHOOL.ALT
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</source>
         renew until 01.10.2014 10:23:45</source>
{{Attention|Для серверов, не внесённых в зону обратного просмотра DNS, авторизация через nslcd по GSSAPI будет вылетать с диагностикой: <source lang="text">Local error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Server not found in Kerberos database)</source>}}


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


Создать пользователя с паролем, :
Создать пользователя с паролем[https://wiki.samba.org/index.php/Adding_users_with_samba_tool], :
  samba-tool user add <имя пользователя>
  samba-tool user create <имя пользователя>
  samba-tool user setexpiry <имя пользователя>
  samba-tool user setexpiry <имя пользователя>


Например,  
Например,  
  samba-tool user add ivanov --given-name='Иван Иванов' --mail-address='ivanov@stand.alt'
  samba-tool user create ivanov --given-name='Иван Иванов' --mail-address='ivanov@stand.alt'


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


{{Attention|Не допускайте одинаковое имена для пользователей и компьютера, это может привести к коллизиям (например, такого пользователя нельзя добавить в группу). [http://support2.microsoft.com/kb/310845]}}
Удалить пользователя:
samba-tool user delete <имя пользователя>


Если компьютер с таким именем заведён, то удалить его можно командой:
Отключить пользователя:
  pdbedit -x -m <имя>
  samba-tool user disable <имя пользователя>


= Заведение вторичного DC =
Включить пользователя:
samba-tool user enable <имя пользователя>


Имя узла: ''dc2.school.alt (192.168.1.106)''
Изменить пароль пользователя:
samba-tool user setpassword <имя пользователя>


1. Очищаем базы и конфигурацию Samba (если уже создавался домен):
Не забудьте разблокировать пользователя:
  rm -f /etc/samba/smb.conf
  samba-tool user setexpiry <имя пользователя> --noexpiry
rm -rf /var/lib/samba
mkdir -p /var/lib/samba/sysvol


2. На PDC не забываем выключить службу bind и, если она была включена, перезапустить службу samba. Заводим адрес IP для dc2:
# samba-tool dns add 192.168.1.1 school.alt DC2 A 192.168.1.106 -Uadministrator


3. На ''dc2.school.alt'' правим файл {{path|/etc/krb5.conf}}:
{{Attention|Не допускайте одинаковых имён для пользователя и компьютера, это может привести к коллизиям (например, такого пользователя нельзя добавить в группу). [http://support2.microsoft.com/kb/310845]}}
 
Если компьютер с таким именем заведён, удалить его можно командой:
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
{{Note|В дополнительных DC соблюдать те же правила, что и в основном DC)}}
{{Note|Для корректного взаимодействия обязательно проверить синхронизацию времени на серверах (актуально при использовании виртуальных машин, и снапшотов!)}}
Имя узла: ''dc2.domain.alt (192.168.1.106)''. Предполагается, что пакет {{pkg|task-samba-dc}} уже установлен.
 
1. Заводим IP-адрес для dc2 на PDC (с версии Samba 4.7 и выше запись вносится автоматически):
{{Attention|Указание аутентифицирующей информации (имени пользователя и пароля) '''обязательно'''!}}
<pre># samba-tool dns add 192.168.1.1 domain.alt DC2 A 192.168.1.106 -U administrator</pre>
2. На ''dc2.domain.alt'' правим файл {{path|/etc/krb5.conf}}:
  [libdefaults]
  [libdefaults]
  default_realm = SCHOOL.ALT
  default_realm = DOMAIN.ALT
  dns_lookup_realm = true
  dns_lookup_realm = false
  dns_lookup_kdc = true
  dns_lookup_kdc = true


{{Note|В resolvconf обязательно должен быть добавлен PDC как {{term|nameserver}}}}.
{{Note|Перед вводом в домен в resolvconf обязательно должен быть добавлен PDC как {{term|nameserver}}.}}


4. Получаем билет и убеждаемся, что билет получен:
3. Получаем билет и убеждаемся, что билет получен:
<pre># kinit administrator@SCHOOL.ALT
{{Attention|Имя домена должно быть указано '''в верхнем регистре'''}}
Password for administrator@SCHOOL.ALT:  
<pre># kinit administrator@DOMAIN.ALT
Password for administrator@DOMAIN.ALT:  
Warning: Your password will expire in 37 days on Пт 14 ноя 2014 14:31:40
Warning: Your password will expire in 37 days on Пт 14 ноя 2014 14:31:40
# klist
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SCHOOL.ALT
Default principal: administrator@DOMAIN.ALT


Valid starting      Expires              Service principal
Valid starting      Expires              Service principal
07.10.2014 18:51:01  08.10.2014 04:51:01  krbtgt/SCHOOL.ALT@SCHOOL.ALT
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</pre>
         renew until 08.10.2014 18:50:51</pre>


5. Вводим в домен:
4. Вводим в домен:
  # samba-tool domain join school.alt DC -Uadministrator --realm=school.alt
  # samba-tool domain join domain.alt DC -Uadministrator --realm=domain.alt


Если всё нормально, в конце видим:
Если всё нормально, в конце видим:
  Joined domain SCHOOL (SID S-1-5-21-80639820-2350372464-3293631772) as a DC
  Joined domain DOMAIN (SID S-1-5-21-80639820-2350372464-3293631772) as a DC
 
5. После успешного ввода в домен в resolvconf необходимо сменить адрес PDC на адрес вторичного DC (в нашем примере 192.168.1.106).


6. Реплицируем '''на вторичном DC''':
6. Запускаем службу {{cmd|samba}}, сразу переводя её в запускаемую по умолчанию:
  # samba-tool drs replicate dc2.school.alt c228.school.alt DC=school,DC=alt
  # systemctl enable --now samba


7. Просмотр статуса репликации на PDC:
= Репликация =
{{Attention|Помните, что без успешной двунаправленной репликации в течение 14 дней DC '''исключается''' из Active Directory}}
{{Attention|Указание аутентифицирующей информации (имени пользователя и пароля) '''обязательно'''!}}
{{Note|Начиная с версии {{pkg|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).
 
{{Note|Имя домена в именах серверов можно опустить (если они одинаковые)}}
 
3. Просмотр статуса репликации на PDC:
  # samba-tool drs showrepl
  # samba-tool drs showrepl
{{Note|Если репликация на 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 ==
Настройка [[https://www.altlinux.org/Journald#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


= Ссылки =
= Ссылки =
* https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
* Рекомендуемые серверные установочные образы (после установки выполните [[обновление ОС]]):
* https://wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management
** [http://basealt.ru/products/alt-server/ Альт Сервер]
* [https://wiki.samba.org/index.php/Samba4/HOWTO/Join_a_domain_as_a_DC Добавление ещё одного DC в домен]
** [http://basealt.ru/products/alt-spt/ Альт Линукс СПТ 7.0] (сертификат ФСТЭК)
* [http://fly.osdn.org.ua/~mike/iso/test/ Тестовые серверные установочные образы altlinux-p7-server-samba4.iso]
** стартеркиты: [http://nightly.altlinux.org/p8/permalink/alt-p8-server-latest-x86_64.iso x86_64], [http://nightly.altlinux.org/p8/permalink/alt-p8-server-latest-i586.iso i586] (GPL)
* [http://smb-conf.ru/samba4-addc.html Инструкция по настройке Samba в качестве контроллера домена, совместимого с Active Directory] (на русском языке)
** [http://basealt.ru/about/contacts существуют] сборки samba-DC для [[ports/e2k|порта на "Эльбрус"]]
* [http://www.youtube.com/watch?v=8tYnjp_BleI Заведение групповых политик для домена (ролик)]
* Тестовые образы:
* https://wiki.samba.org/index.php/Samba_%26_Windows_Profiles
** [http://nightly.altlinux.org/p7/beta/ altlinux-p7-server-samba4.iso] (старая стабильная ветка)
* http://wiki.skytech.dk/index.php/Samba_4_-_domain_controller#Join_domain_with_a_linux_machine
** [http://nightly.altlinux.org/sisyphus/alpha/ regular-server-samba4.iso] (нестабильная ветка)
* [http://habrahabr.ru/post/259029/ Samba4 — использование Python Scripting Interface]
* Документация на русском языке:
** [http://smb-conf.ru/samba4-addc.html Инструкция по настройке Samba в качестве контроллера домена, совместимого с Active Directory]
** [http://habr.com/ru/post/259029/ Samba4 — использование Python Scripting Interface]
** [http://habr.com/ru/post/272777/ Возможности и ограничения Samba 4 как контроллера домена Active Directory]
** [https://habr.com/ru/post/450572/ Samba DC в качестве второго контроллера в домене AD Windows 2012R2 и перемещаемые папки для клиентов на Windows и Linux]
* wiki.samba.org:
** [https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO Samba AD DC HOWTO]
** [https://wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management Installing RSAT on Windows for AD Management]
** [https://wiki.samba.org/index.php/Samba4/HOWTO/Join_a_domain_as_a_DC Добавление ещё одного DC в домен]
** [https://wiki.samba.org/index.php/Samba_%26_Windows_Profiles Samba & Windows Profiles]
** [https://wiki.samba.org/index.php/Join_an_additional_Samba_DC_to_an_existing_Active_Directory Join an additional Samba DC to an existing Active Directory]
** [https://wiki.samba.org/index.php/Backup_and_restore_an_Samba_AD_DC Backup and restore an Samba AD DC]
** [https://wiki.samba.org/index.php/Samba_Security_Documentation Samba Security Documentation]
* Иные ресурсы:
** [http://www.youtube.com/watch?v=8tYnjp_BleI Заведение групповых политик для домена (ролик)]
** [http://wiki.skytech.dk/index.php/Samba_4_-_domain_controller#Join_domain_with_a_linux_machine Samba 4 - domain controller#Join domain with a linux machine]


= Советы =
= Советы =
* Введите в домен машину с Windows, установите на неё [https://wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management Remote Server Administration Tools] и управляйте доменом из графического интерфейса.
* Введите в домен машину с Windows, установите на неё [https://wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management Remote Server Administration Tools] и управляйте доменом из графического интерфейса.
[[Категория:Домен]]
* Для того, чтобы посмотреть конфигурацию LDAP контроллера домена, получите билет Kerberos (через {{cmd|kinit}}) и выполните:
<source lang="Bash">ldapsearch -LLL -b '' -s base -x</source>
<!--* Для выполнения задач с помощью samba-tool, требующих прав администратора, указание его пароля в параметре {{term|-Uadministrator%пароль}} можно заменить на использование Kerberos (в этом случае -U указывать нельзя):
<source lang="Bash">kinit Administrator
samba-tool -k yes ...</source>-->
* Для отключения проверки необходимой длины и стойкости паролей выполните:
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 =
 
;Если домен не создаётся с ошибкой типа <code lang="text">ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2241</code>
:Удалите директиву {{cmd|include}} или {{cmd|includedir}} в {{path|/etc/krb5.conf}}[https://github.com/heimdal/heimdal/issues/89]
 
[[Категория:HOWTO]]
[[Категория:HOWTO]]
[[Категория:Active Directory]]
[[Категория:Active Directory]]
{{Category navigation|title=Samba|category=Samba|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Домен|category=Домен|sortkey={{SUBPAGENAME}}}}

Текущая версия от 14:25, 6 ноября 2024

Samba logo.png
Примечание: Кроме Wiki, читайте документацию к дистрибутиву, например: Глава "Samba 4 в роли контроллера домена Active Directory" в описании Альт Сервер 10.1


Использование 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 символов.

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

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
Примечание: Если служба после установки никаким способом не запускается, перезагрузите сервер


Создание домена с 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] добавить строку:
    server services = -dns
    
  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:
    # systemctl stop 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 наследует поведение домена 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

Ссылки

Советы

  • Введите в домен машину с 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]