Редакция апрель, 2024
Аннотация
Таблица 1.1. Состав технических и программных средств стенда
№ ПЭВМ
|
Программная среда
|
Описание
|
---|---|---|
1
|
ОС «Альт Сервер»
|
Контроллер домена test.alt
|
2
|
ОС «Альт Сервер»
|
Дополнительный контроллер домена test.alt
|
3
|
ОС Альт («Альт Рабочая станция», «Альт Рабочая станция K», «Альт Образование»)
|
Рабочая станция
|
4
|
ОС Альт («Альт Рабочая станция», «Альт Рабочая станция K», «Альт Образование»)
|
Рабочая станция
|
5
|
ОС Microsoft Windows Server 2012
|
Контроллер домена win.alt
|
6
|
ОС «Альт Сервер»
|
Контроллер домена example.alt
|
7
|
ОС «Альт Сервер»
|
Веб-сервер, прокси-сервер
|
8
|
ОС «Альт Сервер»
|
Контроллер домена test.alt только для чтения (RODC)
|
9
|
ОС Альт («Альт Рабочая станция», «Альт Рабочая станция K», «Альт Образование»)
|
Рабочая станция
|
Предупреждение
Предупреждение
Примечание
Примечание
Примечание
https://tools.ietf.org/html/rfc2606
) для частных тестовых установок, например alt.test.
Важно
avahi-daemon
.
Примечание
sAMAccountName
в Active Directory).
Таблица 2.1. Порты используемые Samba AD DC
Служба
|
Порт
|
Протокол
|
Примечание
|
---|---|---|---|
DNS
|
53
|
TCP и UDP
|
Может быть предоставлен внутренним DNS-сервером Samba или DNS-сервером Bind9
|
Kerberos
|
88
|
TCP и UDP
|
|
NTP
|
123
|
UDP (Опционально)
|
Если на контроллере домена настроен и работает NTP
|
End Point Mapper (DCE/RPC Locator Service)
|
135
|
TCP
|
|
NetBIOS Name Service
|
137
|
UDP
|
|
NetBIOS Datagram
|
138
|
UDP
|
|
NetBIOS Session
|
139
|
TCP
|
|
LDAP
|
389
|
TCP и UDP
|
|
SMB over TCP
|
445
|
TCP
|
|
Kerberos
|
464
|
TCP и UDP
|
Используется
kadmin для установки и смены пароля
|
LDAPS
|
636
|
TCP
|
Если в файле
smb.conf установлено tls enabled = yes (по умолчанию)
|
Global Catalog
|
3268
|
TCP
|
|
Global Catalog SSL
|
3269
|
TCP
|
Если в файле
smb.conf установлено tls enabled = yes (по умолчанию)
|
Dynamic RPC Ports
|
49152-65535
|
TCP
|
Диапазон соответствует диапазону портов, используемому в Windows Server 2008 и более поздних версиях. Чтобы вручную установить диапазон портов в Samba 4.7 и более поздних версиях, необходимо указать параметр
rpc server port в файле smb.conf . Подробности смотрите в описании параметра на справочной странице man smb.conf .
|
SAMBA_INTERNAL
— встроенный сервер имен:
BIND9_DLZ
— использует samba4 AD для хранения информации о зоне:
Примечание
Важно
DNS BIND9_FLATFILE
не поддерживается.
samba-tool domain provision
имеет множество опций, которые можно использовать для предоставления дополнительной информации при интерактивной установке сервера. Их также можно использовать в скриптах.
samba-tool(8)
.
Таблица 2.2. Основные опции для samba-tool domain provision
Опция
|
Описание
|
---|---|
-d DEBUGLEVEL, --debuglevel=DEBUGLEVEL
|
Включить отладку
|
--interactive
|
Запрашивать ввод данных у пользователя (интерактивное создание домена)
|
--domain=DOMAIN
|
Имя домена NetBIOS (имя рабочей группы)
|
--domain-guid=GUID
|
Установить domainguid (иначе используется случайное значение)
|
--domain-sid=SID
|
Установить domainsid (иначе используется случайное значение)
|
--ntds-guid=GUID
|
Установить GUID объекта NTDS (иначе используется случайное значение)
|
--host-name=HOSTNAME
|
Установить имя хоста
|
--host-ip=IPADDRESS
|
Установить IPv4 IP-адрес
|
--host-ip6=IP6ADDRESS
|
Установить IPv6 IP-адрес
|
--adminpass=PASSWORD
|
Пароль основного администратора домена (иначе используется случайное значение)
|
--krbtgtpass=PASSWORD
|
Пароль krbtgtpass (иначе используется случайное значение)
|
--dns-backend=NAMESERVER-BACKEND
|
Бэкенд DNS-сервера: SAMBA_INTERNAL — встроенный сервер имен (по умолчанию), BIND9_FLATFILE — использует текстовую базу данных bind9 для хранения информации о зоне, BIND9_DLZ — использует samba4 AD для хранения информации о зоне, NONE — полностью пропускает настройку DNS (не рекомендуется).
|
--dnspass=PASSWORD
|
Пароль dns (иначе используется случайное значение)
|
--server-role=ROLE
|
Позволяет указать тип серверной роли: domain controller, dc (по умолчанию), member server, member или standalone
|
--function-level=FOR-FUN-LEVEL
|
Позволяет указать уровень домена и леса: 2000, 2003, 2008, 2008_R2 (по умолчанию) или 2016
|
--base-schema=BASE-SCHEMA
|
Версия базовой схемы домена. По умолчанию 2019
|
--use-rfc2307
|
Позволяет поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux
|
--machinepass=PASSWORD
|
Пароль для машины (иначе используется случайное значение)
|
--plaintext-secrets
|
Сохранять конфиденциальные данные в виде обычного текста на диске (по умолчанию конфиденциальные данные шифруются)
|
--realm=REALM
|
Задаёт область Kerberos (LDAP), и DNS имя домена
|
--option=OPTION
|
Позволяет установить параметры
smb.conf из командной строки
|
-s FILE, --configfile=FILE
|
Файл конфигурации
|
# apt-get install task-samba-dc
или task-samba-dc-mitkrb5 для Samba DC на базе MIT Kerberos:
# apt-get install task-samba-dc-mitkrb5
Примечание
krb5.conf
(в блоке — libdefaults) необходимо отключить использование ядерного кеша ключей — KEYRING:persistent:%{uid}
:
# control krb5-conf-ccache default
krb5kdc
и slapd
, а также bind
:
# for service in smb nmb krb5kdc slapd bind; do systemctl disable $service; systemctl stop $service; done
dns forwarder
в файле smb.conf
указать один или несколько IP-адресов DNS-серверов, поддерживающих рекурсивное разрешение. Например:
dns forwarder = 192.168.0.190
Примечание
dns forwarder
поддерживают несколько IP-адресов, разделенных пробелами. Старые версии поддерживают один IP-адрес. Обращение ко второму и последующим DNS-серверам произойдёт только в том случае, если первый не вернул никакого ответа.
Примечание
--dns-backend=SAMBA_INTERNAL
или не указывать этот параметр вообще.
/etc/sysconfig/network
необходимо добавить строку:
HOSTNAME=dc1.test.altИ выполнить команды:
#hostnamectl set-hostname dc1.test.alt
#domainname test.alt
Примечание
/etc/resolvconf.conf
должна присутствовать строка:
name_servers=127.0.0.1Если этой строки в файле
/etc/resolvconf.conf
нет, то в конец этого файла следует добавить строку:
name_servers=127.0.0.1и перезапустить сервис resolvconf:
# resolvconf -u
#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
# samba-tool domain provision
Realm [TEST.ALT]: Domain [TEST]:
Примечание
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]: 8.8.8.8
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 Adding DomainDN: DC=test,DC=alt 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 Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=test,DC=alt Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs The Kerberos KDC configuration for Samba AD is located at /var/lib/samba/private/kdc.conf A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink! 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: TEST DNS Domain: test.alt DOMAIN SID: S-1-5-21-3617232745-2316959539-2936900449
# samba-tool domain provision --realm=test.alt --domain=test --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --option="dns forwarder=8.8.8.8" --server-role=dc --use-rfc2307
--realm REALM_NAME
— имя области Kerberos (LDAP), и DNS имя домена;
--domain=DOMAIN
— имя домена (имя рабочей группы);
--adminpass=PASSWORD
— пароль основного администратора домена;
dns forwarder
— внешний DNS-сервер, чтобы DC мог разрешать внешние доменные имена;
--server-role=ROLE
— тип серверной роли;
--dns-backend=NAMESERVER-BACKEND
— бэкенд DNS-сервера;
--use-rfc2307
— позволяет поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.
Примечание
# samba-tool domain provision --realm=test.alt --domain=test --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --option="dns forwarder=8.8.8.8" --option="ad dc functional level = 2016" --server-role=dc --function-level=2016
Примечание
Примечание
# samba-tool domain provision --help
Примечание
# systemctl enable --now samba
Примечание
Примечание
/etc/samba/smb.conf
после создания домена с SAMBA_INTERNAL:
Global parameters [global] dns forwarder = 8.8.8.8 netbios name = DC1 realm = TEST.ALT server role = active directory domain controller workgroup = TEST idmap_ldb:use rfc2307 = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/test.alt/scripts read only = No
dns forwarder
на бэкенде INTERNAL работает только с одним адресом).
# apt-get install bind bind-utils
Примечание
мая 03 14:25:13 dc1 named[3825]: samba_dlz: Failed to configure zone 'test.alt' мая 03 14:25:13 dc1 named[3825]: loading configuration: already exists мая 03 14:25:13 dc1 named[3825]: exiting (due to fatal error) мая 03 14:39:44 dc1 named[4309]: Loading 'AD DNS Zone' using driver dlopenне следует, при установке системы, задавать полное имя для DC (dc1.test.alt).
Примечание
named-checkconf
— проверка синтаксиса файлов конфигурации;
named-checkzone
— проверка файлов зон DNS;
rndc
— инструмент управления службой DNS.
dig
— многофункциональный инструмент для опроса DNS-серверов;
host
— преобразовать имя хоста в IP-адрес;
nslookup
— получить информацию DNS об удаленном сервере;
nsupdate
— инструмент для динамического обновления записей DNS.
/etc/named.conf
— основной файл конфигурации, содержит в себе ссылки на остальные конфигурационные файлы;
/etc/bind/options.conf
— файл для глобальных настроек службы;
/etc/bind/rndc.conf
— получить информацию DNS об удаленном сервере;
/etc/bind/local.conf
— файл для настроек зоны DNS;
/var/lib/samba/bind-dns/named.conf
— инструмент для динамического обновления записей DNS.
/etc/bind/options.conf
. Для получения более подробной информации следует обратиться к man странице named.conf(5)
.
Таблица 2.3. Основные параметры конфигурационного файла /etc/bind/options.conf
Опция
|
Описание
|
---|---|
directory
|
Указывает каталог расположения таблиц зон
|
listen-on
|
Позволяет указать сетевые интерфейсы, которые будет прослушивать служба
|
allow-query
|
IP-адреса и подсети от которых будут обрабатываться запросы
|
allow-transfer
|
Устанавливает возможность передачи зон для slave-серверов
|
allow-query-cache
|
|
allow-recursion
|
IP-адреса и подсети от которых будут обрабатываться рекурсивные запросы
|
tkey-gssapi-keytab
|
|
minimal-responses
|
|
max-cache-ttl
|
|
forward
|
Позволяет указать каким образом сервер обрабатывает запрос клиента. При значении first DNS-сервер будет пытаться разрешать имена с помощью DNS-серверов, указанных в параметре forwarders. Если разрешить имя с помощью данных серверов не удалось, то попытаться разрешить имя самостоятельно. Если указать значение none, сервер не будет пытаться разрешить имя самостоятельно
|
forwarders
|
DNS-сервер, на который будут перенаправляться запросы клиентов
|
type
|
Тип зоны
|
# control bind-chroot disabled
# grep -q KRB5RCACHETYPE /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
# 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
:
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab"; minimal-responses yes;
forwarders
указать сервера, куда будут перенаправляться запросы, на которые нет информации в локальной зоне (если этой информации нет в файле /etc/bind/resolvconf-options.conf
):
forward first; forwarders { 8.8.8.8; };
listen-on
добавить IP-адрес DNS-сервера, на котором он будет принимать запросы;
allow-query
и указать в нём подсети из которых разрешено подавать запросы;
allow-recursion
и указать в нём подсети из которых будут обрабатываться рекурсивные запросы;
category lame-servers {null;};
/etc/bind/options.conf
:
options { version "unknown"; directory "/etc/bind/zone"; dump-file "/var/run/named_dump.db"; statistics-file "/var/run/named.stats"; recursing-file "/var/run/recursing"; // disables the use of a PID file pid-file none; tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab"; minimal-responses yes; listen-on { 127.0.0.1; 192.168.0.152; }; listen-on-v6 { ::1; }; include "/etc/bind/resolvconf-options.conf"; allow-query { localnets; 192.168.0.0/24; }; allow-recursion { localnets; 192.168.0.0/24; }; //max-cache-ttl 86400; }; logging { category lame-servers {null;}; };
/etc/bind/resolvconf-options.conf
в параметре forwarders
должен быть указан DNS-сервер, на который будут перенаправляться запросы клиентов;
bind
:
# systemctl stop bind
--dns-backend=BIND9_DLZ
.
#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
# samba-tool domain provision
Realm [TEST.ALT]: Domain [TEST]:
Примечание
Server Role (dc, member, standalone) [dc]: DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
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 Adding DomainDN: DC=test,DC=alt 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 Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=test,DC=alt Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions See /var/lib/samba/bind-dns/named.conf for an example configuration include file for BIND and /var/lib/samba/bind-dns/named.txt for further documentation required for secure DNS updates Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs The Kerberos KDC configuration for Samba AD is located at /var/lib/samba/private/kdc.conf A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink! 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: TEST DNS Domain: test.alt DOMAIN SID: S-1-5-21-3684382553-2825304832-3399765044
# samba-tool domain provision --realm=test.alt --domain test --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --server-role=dc
--realm REALM_NAME
— имя области Kerberos (LDAP), и DNS имя домена;
--domain=DOMAIN
— имя домена (имя рабочей группы);
--adminpass=PASSWORD
— пароль основного администратора домена;
--server-role=ROLE
— тип серверной роли;
--dns-backend=NAMESERVER-BACKEND
— бэкенд DNS-сервера;
--use-rfc2307
— позволяет поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.
Примечание
# samba-tool domain provision --realm=test.alt --domain=test --adminpass='Pa$$word' --dns-backend=BIND9_DLZ --option="ad dc functional level = 2016" --server-role=dc --function-level=2016
Примечание
Примечание
# samba-tool domain provision --help
samba
и bind
по умолчанию и запустить их:
#systemctl enable --now samba
#systemctl enable --now bind
Примечание
samba
после установки никаким способом не запускается, необходимо перезагрузить сервер.
Примечание
/etc/samba/smb.conf
после создания домена с BIND9_DLZ:
# Global parameters [global] netbios name = DC1 realm = TEST.ALT server role = active directory domain controller server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate workgroup = TEST [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/test.alt/scripts read only = No
# host -t A localhost 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
localhost has address 127.0.0.1
Проверка реверсивной зоны 0.0.127.in-addr.arpa.:
# host -t PTR 127.0.0.1 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
1.0.0.127.in-addr.arpa domain name pointer localhost.
/etc/krb5.conf
. Следует раскомментировать строку default_realm и содержимое разделов realms и domain_realm и указать название домена (обратите внимание на регистр символов), в строке dns_lookup_realm должно быть установлено значение false:
includedir /etc/krb5.conf.d/ [logging] # default = FILE:/var/log/krb5libs.log # kdc = FILE:/var/log/krb5kdc.log # admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_kdc = true dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = TEST.ALT # default_ccache_name = KEYRING:persistent:%{uid} [realms] TEST.ALT = { default_domain = test.alt } [domain_realm] dc = TEST.ALT
Примечание
krb5.conf
для домена в каталоге /var/lib/samba/private/
. Можно просто заменить этим файлом файл, находящийся в каталоге /etc/
:
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# samba-tool domain info 127.0.0.1
Forest : test.alt
Domain : test.alt
Netbios domain : TEST
DC name : dc1.test.alt
DC netbios name : DC1
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
# smbclient -L localhost -Uadministrator
Password for [TEST\administrator]:
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.19.4)
SMB1 disabled -- no workgroup available
Создаваемые по умолчанию общие ресурсы netlogon и sysvol нужны для функционирования сервера AD и создаются в smb.conf
в процессе развертывания/модернизации.
/etc/resolv.conf
:
#cat /etc/resolv.conf
# Generated by resolvconf # Do not edit manually, use # /etc/net/ifaces/<interface>/resolv.conf instead. search test.alt nameserver 127.0.0.1 #host test.alt
test.alt has address 192.168.0.122
# host -t SRV _kerberos._udp.test.alt.
_kerberos._udp.test.alt has SRV record 0 100 88 dc1.test.alt.
# host -t SRV _ldap._tcp.test.alt.
_ldap._tcp.test.alt has SRV record 0 100 389 dc1.test.alt.
# host -t A dc1.test.alt.
dc1.test.alt has address 192.168.0.122
# kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
Warning: Your password will expire in 15 days on Пт 12 апр 2024 11:46:29
Просмотр полученного билета:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TEST.ALT
Valid starting Expires Service principal
27.03.2024 14:14:36 28.03.2024 00:14:36 krbtgt/TEST.ALT@TEST.ALT
renew until 28.03.2024 14:14:32
# samba-tool domain level show
Domain and forest function level for domain 'DC=test,DC=alt'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
ad dc functional level
файла /etc/samba/smb.conf
. Возможные значения:
# samba-tool domain schemaupgrade --schema=<SCHEMA>
где SCHEMA — схема, до которой необходимо выполнить обновление (по умолчанию 2019).
# samba-tool domain functionalprep --function-level=<FUNCTION_LEVEL>
где FUNCTION_LEVEL — функциональный уровень, к которому нужно подготовиться (по умолчанию 2016).
# samba-tool domain level raise --domain-level=<DOMAIN_LEVEL> --forest-level=<FOREST_LEVEL>
где:
Примечание
ad dc functional level
в файле /etc/samba/smb.conf
вручную, защита от несовпадения функций между контроллерами домена снижается. Поэтому на всех контроллерах домена должна использоваться одна и та же версия Samba, чтобы гарантировать, что поведение, наблюдаемое клиентом, будет одинаковым независимо от того, к какому контроллеру домена осуществляется соединение.
/etc/samba/smb.conf
добавить строку:
ad dc functional level = 2016
# systemctl restart samba.service
# samba-tool domain schemaupgrade --schema=2019
# samba-tool domain functionalprep --function-level=2016
# samba-tool domain level raise --domain-level=2016 --forest-level=2016
Domain function level changed!
Forest function level changed!
All changes applied successfully!
# samba-tool domain level show
Domain and forest function level for domain 'DC=test,DC=alt'
Forest function level: (Windows) 2016
Domain function level: (Windows) 2016
Lowest function level of a DC: (Windows) 2016
Примечание
# ldbsearch -H /var/lib/samba/private/sam.ldb -s base -b CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System,DC=test,DC=alt cn
# record 1
dn: CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System,DC=test,DC=alt
cn: ypservers
# returned 1 records
# 1 entries
# 0 referrals
Если команда ldbsearch
возвращает одну запись (returned 1 records), расширения NIS установлены и больше ничего делать не нужно.
Предупреждение
# samba-tool fsmo show | grep SchemaMasterRole
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
В выводе команды показано имя DC, которому принадлежит эта роль. Все дальнейшие дествия следует выполнять на этом DC.
samba
:
# systemctl stop samba
ypServ30.ldif
, например:
# cp /usr/share/samba/setup/ypServ30.ldif /tmp/
# sed -i -e 's/\${DOMAINDN}/DC=test,DC=alt/g' -e 's/\${NETBIOSNAME}/DC/g' -e 's/\${NISDOMAIN}/test/g' /tmp/ypServ30.ldif
/var/lib/samba/private/sam.ldb
:
# ldbmodify -H /var/lib/samba/private/sam.ldb /tmp/ypServ30.ldif --option="dsdb:schema update allowed"=true
/etc/samba/smb.conf
в секцию [global]
добавить параметр::
idmap_ldb:use rfc2307 = yes
samba
:
# systemctl start samba
Примечание
# apt-get install task-samba-dc
# for service in smb nmb krb5kdc slapd bind; do systemctl disable $service; systemctl stop $service; done
#rm -f /etc/samba/smb.conf
#rm -rf /var/lib/samba
#rm -rf /var/cache/samba
#mkdir -p /var/lib/samba/sysvol
Предупреждение
# samba-tool dns add 192.168.0.122 test.alt DC2 A 192.168.0.123 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
/etc/krb5.conf
):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true
Примечание
/etc/resolv.conf
обязательно должен быть добавлен первый DC как nameserver:
#echo "name_servers=192.168.0.122" >> /etc/resolvconf.conf
#echo "search_domains=test.alt" >> /etc/resolvconf.conf
#resolvconf -u
#cat /etc/resolv.conf
search test.alt nameserver 192.168.0.122 nameserver 8.8.8.8
# kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
Предупреждение
# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@TEST.ALT
Valid starting Expires Service principal
27.03.2024 14:14:36 28.03.2024 00:14:36 krbtgt/TEST.ALT@TEST.ALT
renew until 28.03.2024 14:14:32
# samba-tool domain join test.alt DC -Uadministrator --realm=test.alt --option="dns forwarder=8.8.8.8"
Если всё нормально, в конце будет выведена информация о присоединении к домену:
Joined domain TEST (SID S-1-5-21-80639820-2350372464-3293631772) as a DC
Примечание
dns forwarder
, чтобы на новом сервере была настроена пересылка запросов. Форвардером может быть как вышестоящий DNS-сервер организации, так и публичные от google или yandex.
--rfc2307
, то и для текущего необходимо это учесть, указав параметр:
--option='idmap_ldb:use rfc2307 = yes'
# systemctl enable --now samba
Примечание
samba-tool domain join
можно воспользоваться командой:
# samba-tool domain join --help
# samba-tool domain level show
Domain and forest function level for domain 'DC=test,DC=alt'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
# apt-get install task-samba-dc
# for service in smb nmb krb5kdc slapd bind; do systemctl disable $service; systemctl stop $service; done
#rm -f /etc/samba/smb.conf
#rm -rf /var/lib/samba
#rm -rf /var/cache/samba
#mkdir -p /var/lib/samba/sysvol
Предупреждение
# samba-tool dns add 192.168.0.122 test.alt DC2 A 192.168.0.124 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
/etc/krb5.conf
):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true [realms] TEST.ALT = { kdc = rodc.test.alt kdc = dc1.test.alt default_domain = TEST.ALT }
Примечание
/etc/resolv.conf
должен быть добавлен первый DC как nameserver:
#echo "name_servers=192.168.0.122" >> /etc/resolvconf.conf
#echo "search_domains=test.alt" >> /etc/resolvconf.conf
#resolvconf -u
#cat /etc/resolv.conf
search test.alt nameserver 192.168.0.122 nameserver 8.8.8.8
# kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
Предупреждение
# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@TEST.ALT
Valid starting Expires Service principal
27.03.2024 14:14:36 28.03.2024 00:14:36 krbtgt/TEST.ALT@TEST.ALT
renew until 28.03.2024 14:14:32
# samba-tool domain join test.alt RODC -Uadministrator@TEST.ALT --realm=test.alt --option="dns forwarder=8.8.8.8"
Если всё нормально, в конце будет выведена информация о присоединении к домену:
Joined domain TEST (SID S-1-5-21-578923263-1107570656-1287136478) as an RODC
Примечание
dns forwarder
, чтобы на новом сервере была настроена пересылка запросов. Форвардером может быть как вышестоящий DNS-сервер организации, так и публичные от google или yandex.
--rfc2307
, то и для текущего необходимо это учесть, указав параметр:
--option='idmap_ldb:use rfc2307 = yes'
# systemctl enable --now samba
# samba-tool rodc preload ivanov --server=dc1.test.alt
Replicating DN CN=Иван Иванов,CN=Users,DC=test,DC=alt
Exop on[CN=Иван Иванов,CN=Users,DC=test,DC=alt] objects[1] linked_values[0]
Примечание
$kinit ivanov
Password for ivanov@TEST.ALT: $kinit kim
kinit: A service is not available that is required to process the request while getting initial credentials
samba
:
# systemctl stop samba
# samba_upgradedns --dns-backend=BIND9_DLZ
/etc/samba/smb.conf
:
server services
, добавить в секцию global
строку:
server services = -dns
global
есть параметр server services
, удалить опцию dns
, например:
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
bind
и сделать её запускаемой по умолчанию:
# systemctl enable --now bind
samba
:
# systemctl start samba
bind
и убрать её из автозагрузки:
# systemctl disable --now bind
samba
:
# systemctl stop samba
# samba_upgradedns --dns-backend=SAMBA_INTERNAL
/etc/samba/smb.conf
:
server services
есть только опция -dns
, удалить этот параметр из файла (удалить всю строку):
server services = -dns
global
есть параметр server services
, добавить в него опцию dns
, например:
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns
samba
:
# systemctl start samba
Примечание
server services
, удаление параметра server services
включает все серверы по умолчанию, включая DNS-сервер.
ps
:
# ps axf | grep -E "samba|smbd|winbindd"
…
3078 ? S 0:00 /usr/sbin/samba --no-process-group
3091 ? S 0:00 \_ /usr/sbin/samba --no-process-group
3092 ? S 0:00 | \_ /usr/sbin/samba --no-process-group
3096 ? S 0:00 | \_ /usr/sbin/samba --no-process-group
3101 ? Ss 0:00 | \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
3138 ? S 0:00 | \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
3139 ? S 0:00 | \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
3149 ? S 0:00 | \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
3150 ? S 0:00 | \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
…
3127 ? Ss 0:00 | \_ /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
3140 ? S 0:00 | \_ /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
…
samba
, smbd
и winbindd
должны быть дочерними процессами одного процесса samba
.
# samba -i
# ss -tulpn | grep ":53"
/var/lib/samba/bind-dns
создается только в том случае, если произошло одно из следующих трёх событий:
--dns-backend=BIND9_DLZ
;
--dns-backend=BIND9_DLZ
;
samba_upgradedns
и опции --dns-backend=BIND9_DLZ
.
# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
objectGUID
контроллера домена:
# ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationId=*)' --cross-ncs objectguid | grep -A1 DC3
dn: CN=NTDS Settings,CN=DC3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
objectGUID: 512f03b4-7042-434d-93c0-61dd6a2ea895
# samba-tool domain demote -Uadministrator
Using dc1.test.alt as partner server for the demotion
Password for [TEST\administrator]:
Deactivating inbound replication
Asking partner server dc1.test.alt to synchronize from us
Changing userControl and container
Removing Sysvol reference: CN=DC3,CN=Enterprise,CN=Microsoft System Volumes,CN=System,CN=Configuration,DC=test,DC=alt
Removing Sysvol reference: CN=DC3,CN=test.alt,CN=Microsoft System Volumes,CN=System,CN=Configuration,DC=test,DC=alt
Removing Sysvol reference: CN=DC3,CN=Domain System Volumes (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=alt
Removing Sysvol reference: CN=DC3,CN=Topology,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,DC=test,DC=alt
updating ForestDnsZones.test.alt keeping 2 values, removing 1 values
updating test.alt keeping 6 values, removing 1 values
…
Demote successful
samba
:
# systemctl stop samba
# systemctl stop bind
Важно
Важно
# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
objectGUID
контроллера домена:
# ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationId=*)' --cross-ncs objectguid | grep -A1 DC3
dn: CN=NTDS Settings,CN=DC3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
objectGUID: 512f03b4-7042-434d-93c0-61dd6a2ea895
# samba-tool domain demote --remove-other-dead-server=DC3
Важно
# samba-tool domain passwordsettings show
Password information for domain 'DC=test,DC=alt'
Password complexity: on
Store plaintext passwords: off
Password history length: 24
Minimum password length: 7
Minimum password age (days): 1
Maximum password age (days): 42
Account lockout duration (mins): 30
Account lockout threshold (attempts): 0
Reset account lockout after (mins): 30
# samba-tool domain passwordsettings set <параметр>
Возможные параметры:
--complexity=on|off|default
— должен ли пароль отвечать требованиям сложности (по умолчанию on
);
--store-plaintext=on|off|default
— хранить пароли используя обратимое шифрование (по умолчанию off
);
--history-length=целое число|default
— число хранимых предыдущих паролей пользователей (требование неповторяемости паролей) (по умолчанию 24
);
--min-pwd-length=целое число|default
— минимальное количество символов в пароле (по умолчанию 7
);
--min-pwd-age=целое число|default
— минимальный срок действия пароля (по умолчанию 1
);
--max-pwd-age=целое число|default
— максимальный срок действия пароля (по умолчанию 43
);
--account-lockout-duration=целое число|default
— интервал времени (в минутах), в течение которого возможность аутентификации для пользователя, превысившего количество попыток входа, будет заблокирована (по умолчанию 30
);
--account-lockout-threshold=целое число|default
— допустимое количество неудачных попыток ввода пароля перед блокировкой учетной записи (по умолчанию 0
— никогда не блокировать);
--reset-account-lockout=целое число|default
— интервал времени (в минутах), по истечении которого записанное количество попыток начинается заново (по умолчанию 30
).
# samba-tool domain passwordsettings set --min-pwd-length=7 --account-lockout-threshold=3
Minimum password length changed!
Account lockout threshold changed!
All changes applied successfully!
Примечание
badPwdCount
достиг своего порога и для пользователя существует параметр lockoutTime
:
# samba-tool user show ivanov
…
badPwdCount: 3
badPasswordTime: 133560395216186060
lockoutTime: 133560395216186060
…
Чтобы разблокировать пользователя, необходимо отредактировать объект учётной записи пользователя, установив для атрибута lockoutTime
значение 0:
#Разблокировать пользователя также можно в модуле удалённого управления базой данных конфигурации (ADMC) (подробнее см. Модуль удалённого управления базой данных конфигурации):samba-tool user edit ivanov
Modified User 'ivanov' successfully #samba-tool user show ivanov
… badPasswordTime: 133560395216186060 lockoutTime: 0 …
# samba-tool domain passwordsettings pso <подкоманда>
apply
— применить политику паролей PSO к пользователю или группе;
create
— создать новый объект настроек пароля (PSO);
delete
— удалить объект настроек пароля (PSO);
list
— вывести список всех объектов настроек пароля (PSO);
set
— изменить объект настроек пароля (PSO);
show
— показать детали объекта настроек пароля;
show-user
— отобразить настройки пароля, которые применяются к пользователю;
unapply
— обновить PSO, чтобы он больше не применялся к пользователю или группе.
#samba-tool domain passwordsettings pso create PwPolicyUser 1 --min-pwd-length=10
Not all password policy options have been specified. For unspecified options, the current domain password settings will be used as the default values. PSO successfully created: CN=PwPolicyUser,CN=Password Settings Container,CN=System,DC=test,DC=alt Password information for PSO 'PwPolicyUser' Precedence (lowest is best): 1 Password complexity: on Store plaintext passwords: off Password history length: 24 Minimum password length: 10 Minimum password age (days): 1 Maximum password age (days): 42 Account lockout duration (mins): 30 Account lockout threshold (attempts): 0 Reset account lockout after (mins): 30 #samba-tool domain passwordsettings pso apply PwPolicyUser ivanov
The following PSO settings apply to user 'ivanov'. Password information for PSO 'PwPolicyUser' Precedence (lowest is best): 1 Password complexity: on Store plaintext passwords: off Password history length: 24 Minimum password length: 10 Minimum password age (days): 1 Maximum password age (days): 42 Account lockout duration (mins): 30 Account lockout threshold (attempts): 0 Reset account lockout after (mins): 30 Note: PSO applies directly to user (any group PSOs are overridden)
samba-tool pso show-user
:
# samba-tool domain passwordsettings pso show-user kim
No PSO applies to user 'kim'. The default domain settings apply.
Refer to 'samba-tool domain passwordsettings show'.
Примечание
#Если объектов PSO вообще нет, производительность не снижается.samba-tool domain passwordsettings pso create PwPolicyAdmins 1 --min-pwd-length=16
#samba-tool domain passwordsettings pso apply PwPolicyAdmins "domain admins"
#samba-tool domain passwordsettings pso create PwPolicyUsers 3 --min-pwd-length=8
#samba-tool domain passwordsettings pso apply PwPolicyUsers "domain admins"
#samba-tool domain passwordsettings pso create PwPolicyService 2 --min-pwd-length=24
#samba-tool domain passwordsettings pso apply PwPolicyService "domain admins"
Предупреждение
Предупреждение
# samba-tool drs replicate <destinationDC> <sourceDC> <NC> [options]
# samba-tool drs replicate dc2.test.alt dc1.test.alt dc=test,dc=alt -Uadministrator
Password for [TEST\administrator]:
Replicate from dc1.test.alt to dc2.test.alt was successful.
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
# samba-tool drs replicate dc1.test.alt dc2.test.alt dc=test,dc=alt -Uadministrator
Password for [TEST\administrator]:
Replicate from dc2.test.alt to dc1.test.alt was successful.
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
Примечание
# samba-tool drs showrepl
Примечание
samba-tool drs showrepl
отображает установленные связи с другими контроллерами домена в лесу AD. Соединения отображаются с точки зрения контроллера домена, на котором запускается команда. Пример:
# samba-tool drs showrepl
Default-First-Site-Name\DC2
DSA Options: 0x00000001
DSA object GUID: 899a8050-fd2f-44f6-9f19-53f7f63b0348
DSA invocationId: ac8f1710-0f0b-401a-aa8b-4bdf30517f6b
==== INBOUND NEIGHBORS ====
DC=DomainDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ Wed Apr 19 11:09:03 2023 EET was successful
0 consecutive failure(s).
Last success @ Wed Apr 19 11:09:03 2023 EET
CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ Wed Apr 19 11:09:03 2023 EET was successful
0 consecutive failure(s).
Last success @ Wed Apr 19 11:09:03 2023 EET
DC=ForestDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ Wed Apr 19 11:09:03 2023 EET was successful
0 consecutive failure(s).
Last success @ Wed Apr 19 11:09:03 2023 EET
DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ Wed Apr 19 11:09:04 2023 EET was successful
0 consecutive failure(s).
Last success @ Wed Apr 19 11:09:04 2023 EET
CN=Schema,CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ Wed Apr 19 11:09:04 2023 EET was successful
0 consecutive failure(s).
Last success @ Wed Apr 19 11:09:04 2023 EET
==== OUTBOUND NEIGHBORS ====
DC=DomainDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
DC=ForestDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
CN=Schema,CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: 82c19d1f-a5d8-4ad9-a2e5-a38cf2e8a497
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
==== KCC CONNECTION OBJECTS ====
Connection --
Connection name: a46c895e-658b-463e-9ab5-a1c237fca4b1
Enabled : TRUE
Server DNS name : dc1.test.alt
Server DN name : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
TransportType: RPC
options: 0x00000001
Warning: No NC replicated for Connection!
INBOUND NEIGHBORS
и OUTBOUND NEIGHBORS
. В каждом разделе должно быть по 5 пунктов:
CN=Schema,CN=Configuration,DC=test,DC=alt DC=ForestDnsZones,DC=test,DC=alt DC=test,DC=alt DC=DomainDnsZones,DC=test,DC=alt CN=Configuration,DC=test,DC=alt
INBOUND NEIGHBORS
в пункте Last attempt
должны стоять актуальные дата и время, идентичные указанным в строке Last success
(отображает время последней репликации). Должно быть 0 consecutive failure(s)
.
INBOUND NEIGHBORS
есть записи:
Last attempt @ NTTIME(0) was successful … Last success @ NTTIME(0)необходимо подождать (соединение устанавливается).
KCC CONNECTION OBJECTS
быть приведён список всех контроллеров домена чьи KCC установили соглашения о репликации с текущим контроллером домена. В случае когда контроллер домена только только был добавлен в домен и запущен, может пройти до 15 минут до того, как соглашения будут установлены.
Примечание
No NC replicated for Connection!можно игнорировать. Оно появляется из-за того, что при регистрации нового DC Samba неверно устанавливает некоторые флаги репликации.
# samba-tool ldapcmp ldap://dc1.test.alt ldap://dc2.test.alt -Uadministrator
Password for [TEST\administrator]:
* Comparing [DOMAIN] context...
* Objects to be compared: 274
* Result for [DOMAIN]: SUCCESS
* Comparing [CONFIGURATION] context...
* Objects to be compared: 1625
* Result for [CONFIGURATION]: SUCCESS
* Comparing [SCHEMA] context...
* Objects to be compared: 1739
* Result for [SCHEMA]: SUCCESS
* Comparing [DNSDOMAIN] context...
* Objects to be compared: 41
* Result for [DNSDOMAIN]: SUCCESS
* Comparing [DNSFOREST] context...
* Objects to be compared: 18
* Result for [DNSFOREST]: SUCCESS
repadmin
:
> repadmin /showrepl
# ldbsearch -H /var/lib/samba/private/sam.ldb '(fromServer=*CN=WindowsDC*)' --cross-ncs dn
# record 1
dn: CN=a46c895e-658b-463e-9ab5-a1c237fca4b1,CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
# returned 1 records
# 1 entries
# 0 referrals
В этом примере возвращается один партнер по репликации (имя хоста: DC2). Имя хоста партнера по репликации является частью возвращаемого отличительного имени (DN).
samba-tool drs showrepl
для отображения статуса репликации каталога.
INBOUND NEIGHBORS
на контроллере домена Samba, а статусы успешны.
Sysvol
присутствует на всех контроллерах домена AD и используется для хранения логон скриптов и объектов групповых политик. Отсутствие репликации этого каталога приведет к неправильной работе групповых политик и сценариев входа.
Важно
idmap.ldb
из контроллера домена, имеющего роль FSMO PDC_Emulator, со всеми другими контроллерами домена. Это гарантирует, что все контроллеры домена будут использовать одни и те же идентификаторы. Если файл idmap.ldb
не синхронизируется, на каждом контроллере домена будут разные идентификаторы.
idmap.ldb
(см. раздел Сопоставления встроенных идентификаторов пользователей и групп) необходимо при первом присоединении к новому контроллеру домена, а затем переодически (для того чтобы гарантировать постоянство идентификаторов не нужно синхронизировать idmap.ldb
каждый раз при синхронизации SysVol, но это следует делать периодически).
sysvol
расположен в /var/lib/samba/
как на DC1, так и на DC2;
rsync
расположен в /usr/bin/rsync
;
unison
расположен в /usr/bin/unison
;
/var/log/sysvol-sync.log
.
Примечание
# apt-get install rsync unison
unison
может некорректно работать, поэтому при повторной его работе будет использоваться ранее созданное подключение по ssh, для этого:
#mkdir ~/.ssh/ctl
#cat < < EOF > ~/.ssh/ctl/config
Host * ControlMaster auto ControlPath ~/.ssh/ctl/%h_%p_%r ControlPersist 1 EOF
/root/.unison/
:
# mkdir /root/.unison
/root/.unison/default.prf
с следующим содержимым:
# Список каталогов, которые будут синхронизированы root = /var/lib/samba root = ssh://root@DC2.test.alt//var/lib/samba # Список подкаталогов, которые нужно синхронизировать path = sysvol auto=true batch=true perms=0 rsync=true maxthreads=1 retry=3 confirmbigdeletes=false servercmd=/usr/bin/unison # использовать rsync только для больших файлов?? copythreshold=1000 copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress copyquoterem = true copymax = 1 # Сохранять журнал с результатами работы в отдельном файле logfile = /var/log/sysvol-sync.log
touch /var/log/sysvol-sync.log
# apt-get install rsync unison
sysvol
, и запустить команду синхронизации:
# /usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log --delete-after -f"+ */" -f"- *" /var/lib/samba/sysvol root@dc2.test.alt:/var/lib/samba && /usr/bin/unison
rsync
создает структуры каталогов с расширенными атрибутами, а затем утилита unison
копирует только эти расширенные атрибуты файлов.
# crontab -e
*/5 * * * * /usr/bin/unison -silent
rsync
и unison
не должны выполняться в данный момент (можно проверить командой ps -aux
);
/root/.unison
;
sysvol
и повторить синхронизацию;
/root/.inison/default.prf
в другой файл, например: /root/.inison/sync_dc2.prf
.
/root/.inison/dc2.prf
изменить значение параметра root
.
* * * * * /usr/bin/unison sync_dc2 -silent * * * * * /usr/bin/unison sync_dc3 -silent …
sysvol
расположен в /var/lib/samba/
как на DC1, так и на DC2;
rsync
расположен в /usr/bin/rsync
;
osync
расположен в /usr/bin/osync
;
/var/log/osync_*.log
;
Примечание
# apt-get install rsync osync
/etc/osync/sync.conf
:
#!/usr/bin/env bash INSTANCE_ID="sync_sysvol" # Путь до SysVol на текущем сервере INITIATOR_SYNC_DIR="/var/lib/samba/sysvol" # Путь до SysVol на удалённом сервере TARGET_SYNC_DIR="ssh://root@DC2:22//var/lib/samba/sysvol" # ssh ключ root SSH_RSA_PRIVATE_KEY="/root/.ssh/id_ed25519" # Удалённые хосты которые osync пингует перед стартом REMOTE_3RD_PARTY_HOSTS="" # Сохранять xattr PRESERVE_ACL=yes # Сохранять xattr PRESERVE_XATTR=yes # Сохранять резервную копию удалённых файлов SOFT_DELETE=yes DESTINATION_MAILS="your@test.alt" REMOTE_RUN_AFTER_CMD="/usr/bin/samba-tool ntacl sysvolreset"
# apt-get install rsync
sysvol
и запустить команду синхронизации:
# /usr/bin/osync.sh /etc/osync/sync.conf --dry --verbose
Если команда выполнилась без ошибок, можно удалить параметр --dry
и запустить команду синхронизации снова:
# /usr/bin/osync.sh /etc/osync/sync.conf --verbose
В результате sysvol
будет синхронизирован на обоих серверах.
Примечание
sysvol
параметры SOFT_DELETE
(сохранять резервные копии удалённых файлов) и CONFLICT_BACKUP
(сохранять резервные копии файлов на целевой реплике, если они обновлены из исходной реплики) установлены в значение yes, то на источнике и получателе репликации необходимо создать каталоги .osync_workdir/deleted
и .osync_workdir/backup
:
#mkdir /var/lib/samba/sysvol/.osync_workdir/deleted
#mkdir /var/lib/samba/sysvol/.osync_workdir/backup
# crontab -e
*/5 * * * * root /usr/bin/osync.sh /etc/osync/sync.conf --silent
rsync
и osync
не выполняются в данный момент (можно проверить, выполнив команду ps -aux| grep sync
);
.osync_workdir
на DC1 и DC2 в /var/lib/samba/sysvol/
;
sysvol
и повторить синхронизацию;
/etc/osync/sync.conf
в другой файл, например: /etc/osync/sync_dc3.conf
.
/etc/osync/sync_dc3.conf
изменить значение параметра TARGET_SYNC_DIR
.
# crontab -e
*/5 * * * * root /usr/bin/osync.sh /etc/osync/sync.conf --silent
*/5 * * * * root /usr/bin/osync.sh /etc/osync/sync_dc3.conf --silent
…
xidNumber
в idmap.ldb
. Из-за особенностей работы idmap.ldb
нельзя гарантировать, что каждый контроллер домена будет использовать один и тот же идентификатор для данного пользователя или группы. Для того чтобы убедиться, что используются одни и те же идентификаторы, необходимо:
/usr/local/samba/private/idmap.ldb
на существующем контроллере домена:
# tdbbackup -s .bak /usr/local/samba/private/idmap.ldb
Будет создан файл резервной копии /usr/local/samba/private/idmap.ldb.bak
.
/usr/local/samba/private/
на новом присоединенном контроллере домена с удалением суффикса .bak, (заменить существующий файл).
# net cache flush
# samba-tool ntacl sysvolreset
Таблица 4.1. Сравнение Winbind и SSSD
Категория
|
Описание
|
Winbind
|
SSSD
|
---|---|---|---|
Аутентификация
|
Проверка подлинности с использованием Kerberos
|
Да
|
Да
|
Проверка подлинности LDAP
|
Да
|
Да
|
|
Поддержка нескольких доменов AD
|
Да
|
Да
|
|
Поддержка лесов AD
|
Да
|
Да
|
|
Поддержка гетерогенных сетей AD/FreeIPA
|
Нет
|
Да
|
|
Безопасность
|
Простота настройки безопасной конфигурации
|
Нет
|
Да
|
Система имеет идентификатор и её ключ используется для защиты доступа к центральному серверу
|
Да
|
Да
|
|
Поддержка NTLM
|
Да
|
Нет
|
|
Поиск и сопоставление идентификаторов
|
Динамическое сопоставление идентификаторов AD SID
|
Да
|
Да
|
Использование преимуществ конкретных расширений и протоколов AD
|
Да
|
Да
|
|
DNS
|
Обновление и очистка DNS AD
|
Нет
|
Да
|
Поддержка сайтов AD DNS
|
Да
|
Да
|
|
Обмен файлами
|
Интеграция с Samba FS
|
Да
|
Да
|
Интеграция с клиентом CIFS
|
Да
|
Да
|
|
Служба печати
|
Сервер печати CUPS с использованием Kerberos
|
Да
|
Да
|
Политики
|
Централизованное управление контролем доступа на основе хоста через GPO
|
Нет
|
Да
|
Интеграция с другими сервисами и приложениями
|
Интеграция с основными утилитами, такими как SSH, sudo, automount
|
Нет
|
Да
|
Расширенные интерфейсы идентификации по локальной шине сообщений D-Bus
|
Нет
|
Да
|
|
Специальные функции для приложений (Docker, Cockpit, GSS Proxy и др.)
|
Нет
|
Да
|
# apt-get install task-auth-ad-sssd
Примечание
# hostnamectl set-hostname host-01.test.alt
/etc/net/ifaces/enp0s3/resolv.conf
со следующим содержимым:
nameserver 192.168.0.122где 192.168.0.122 — IP-адрес DNS-сервера домена.
/etc/resolvconf.conf
добавить/отредактировать следующие параметры:
interface_order='lo lo[0-9]* lo.* enp0s3' search_domains=test.altгде enp0s3 — интерфейс на котором доступен контроллер домена, test.alt — домен.
# resolvconf -u
Примечание
/etc/resolv.conf
должны появиться строки:
search test.alt nameserver 192.168.0.122
nslookup
и host
.
#nslookup dc1.test.alt
Server: 192.168.0.122 Address: 192.168.0.1222#53 Name: dc1.test.alt Address: 192.168.0.122 #host dc1.test.alt
dc1.test.alt has address 192.168.0.122
#nslookup 192.168.0.122
122.0.168.192.in-addr.arpa name = dc1.alt.test. #host 192.168.0.122
122.0.168.192.in-addr.arpa domain name pointer dc1.alt.test.
$ nslookup
> set type=SRV
> _ldap._tcp.test.alt
Server: 192.168.0.122
Address: 192.168.0.122#53
_ldap._tcp.test.alt service = 0 100 389 dc2.test.alt.
_ldap._tcp.test.alt service = 0 100 389 dc1.test.alt.
> exit
или:
$ host -t SRV _ldap._tcp.test.alt
_ldap._tcp.test.alt has SRV record 0 100 389 dc1.test.alt.
_ldap._tcp.test.alt has SRV record 0 100 389 dc2.test.alt.
system-auth
:
# system-auth
<Действие> <Опции>
В таблице Опции команды system-auth приведено описание опций этой команды.
Таблица 4.2. Опции команды system-auth
Параметр
|
Описание
|
---|---|
Действие
|
|
status
|
Показать текущую схему аутентификацию
|
list
|
Вывести список доступных схем аутентификации
|
write
|
Установить заданные параметры аутентификации
|
Опция
|
|
-d
|
Включить отладку
|
--winbind
|
Использовать Samba Winbind для подключения системы к AD (если этот параметр не указан, будет использован SSSD)
|
--gpo
|
Включить групповые политики на машине
|
--createcomputer=OU/SubOU
|
Субконтейнер в AD (организационная единица/подразделение), куда будет помещена машина при вводе в домен
|
--windows2003
|
Ввести станцию в домен windows 2003
|
--version
|
Вывести версию программы
|
# system-auth status
ad TEST.ALT HOST-01 TEST
# system-auth write local
# system-auth write ad
<Домен> <Имя компьютера> <Рабочая группа> <Имя пользователя> [<Пароль>] [--windows2003] [--createcomputer="COMPUTEROU/SubCOMPUTEROU/SubSubCOMPUTEROU"] [--winbind] [--gpo]
man realm
man sssd-ad
man sssd
# system-auth write ad test.alt host-01 test 'administrator' 'Pa$$word'
Joined 'HOST-01' to dns domain 'test.alt'
#getent passwd ivanov
ivanov:*:1187401105:1187400513:Иван Иванов:/home/TEST.ALT/ivanov:/bin/bash #net ads info
LDAP server: 192.168.0.122 LDAP server name: dc1.test.alt Realm: TEST.ALT Bind Path: dc=TEST,dc=ALT LDAP port: 389 Server time: Ср, 27 мар 2024 10:36:51 EET KDC server: 192.168.0.122 Server time offset: 2 Last machine account password change: Ср, 20 мар 2024 11:13:27 EET #net ads testjoin
Join is OK
Примечание
# samba-tool user list
Примечание
man realm
man winbindd
# system-auth write ad test.alt host-02 test 'administrator' 'Pa$$word' --winbind
Joined 'HOST-02' to dns domain 'test.alt'
#getent passwd ivanov
ivanov:*:10000:10001::/home/TEST.ALT/ivanov:/bin/bash #net ads info
LDAP server: 192.168.0.122 LDAP server name: dc1.test.alt Realm: TEST.ALT Bind Path: dc=TEST,dc=ALT LDAP port: 389 Server time: Ср, 27 мар 2024 13:20:46 EET KDC server: 192.168.0.122 Server time offset: 2 Last machine account password change: Ср, 20 мар 2024 12:36:35 EET #net ads testjoin
Join is OK
Примечание
# samba-tool user list
net
подключается к IP-адресу 127.0.0.1. Если Samba не прослушивает петлевой интерфейс, соединение не устанавливается. Например:
# net rpc rights list -U administrator
Could not connect to server 127.0.0.1
Connection failed: NT_STATUS_CONNECTION_REFUSED
Примечание
-I <IP-адрес>
или -S <Имя хоста>
в команду net
:
# net rpc rights list -U administrator -I 192.168.0.122
Password for [TEST\administrator]:
SeMachineAccountPrivilege Add machines to domain
SeTakeOwnershipPrivilege Take ownership of files or other objects
…
getent passwd
и getent group
нельзя увидеть доменных пользователей и группы. Этот функционал отключен по умолчанию, для того чтобы сократить нагрузку на серверы. Поэтому для проверки необходимо указать точное имя пользователя:
# getent passwd <имя_пользователя>
Примечание
# samba-tool user list
getent passwd <имя_пользователя>
ничего не возвращает, следует попробовать выполнить команду:
# getent passwd <рабочая_группа>\<имя_пользователя>
Например:
# getent passwd "TEST\ivanov"
Если эта команда работает, а первая нет, то необходимо добавить следующую строку в файл smb.conf
:
winbind use default domain = yes
realm leave
. Эта команда удалит конфигурацию домена из SSSD и локальной системы:
# realm leave test.alt
-U
:
# realm leave test.alt -U <пользователь>
Сначала команда пытается подключиться без использования учетных данных, но при необходимости запрашивает пароль.
--remove
:
# realm leave --remove test.alt
man realm
(8).
Примечание
# control system-auth
local
Примечание
/etc/lightdm/lightdm.conf
закомментировать строку в группе [SeatDefaults]
:
#greeter-hide-users=true
Важно
Важно
/var/lib/samba/sysvol
SID'ы домена не корректно транслируются в UNIX user id и group id.
Важно
# apt-get install task-auth-ad-winbind gpupdate
/etc/krb5.conf
должны быть заданы следующие параметры:
/etc/krb5.conf
:
[logging] [libdefaults] dns_lookup_kdc = true dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = TEST.ALT [realms] [domain_realm]
/etc/samba/smb.conf
должны быть заданы следующие параметры:
/etc/samba/smb.conf
:
[global] dns forwarder = 8.8.8.8 netbios name = DC1 kerberos method = dedicated keytab dedicated keytab file = /etc/krb5.keytab realm = TEST.ALT server role = active directory domain controller workgroup = TEST idmap_ldb:use rfc2307 = yes template shell = /bin/bash template homedir = /home/TEST.ALT/%U wins support = no winbind use default domain = yes winbind enum users = no winbind enum groups = no winbind refresh tickets = yes winbind offline logon = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/test.alt/scripts read only = No
/etc/nsswitch.conf
должны быть заданы следующие параметры:
/etc/nsswitch.conf
:
passwd: files winbind systemd shadow: tcb files winbind group: files [SUCCESS=merge] winbind role systemd gshadow: files hosts: files myhostname dns ethers: files netmasks: files networks: files protocols: files rpc: files services: files automount: files aliases: files
# control system-auth winbind
# apt-get install task-auth-ad-sssd gpupdate
/etc/krb5.conf
должны быть заданы следующие параметры:
/etc/krb5.conf
:
includedir /etc/krb5.conf.d/ [logging] [libdefaults] dns_lookup_kdc = true dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = TEST.ALT [realms] [domain_realm]
/etc/sssd/sssd.conf
должны быть заданы следующие параметры:
/etc/sssd/sssd.conf
:
[sssd] config_file_version = 2 services = nss, pam # Managed by system facility command: ## control sssd-drop-privileges unprivileged|privileged|default user = root # SSSD will not start if you do not configure any domains. domains = TEST.ALT [nss] [pam] [domain/TEST.ALT] id_provider = ad auth_provider = ad chpass_provider = ad access_provider = ad default_shell = /bin/bash fallback_homedir = /home/%d/%u debug_level = 0 ; cache_credentials = false ad_gpo_ignore_unreadable = true ad_gpo_access_control = permissive ad_update_samba_machine_account_password = true ad_maximum_machine_account_password_age = 0
/etc/samba/smb.conf
должны быть заданы следующие параметры:
/etc/samba/smb.conf
:
[global] dns forwarder = 8.8.8.8 netbios name = DC1 realm = TEST.ALT server role = active directory domain controller workgroup = TEST idmap_ldb:use rfc2307 = yes template shell = /bin/bash template homedir = /home/TEST.ALT/%U kerberos method = system keytab wins support = no winbind use default domain = yes winbind enum users = no winbind enum groups = no winbind refresh tickets = yes winbind offline logon = yes idmap config * : range = 200000-2000200000 idmap config * : backend = sss [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/test.alt/scripts read only = No
/etc/nsswitch.conf
должны быть заданы следующие параметры:
/etc/nsswitch.conf
:
passwd: files sss systemd shadow: tcb files sss group: files [SUCCESS=merge] sss role systemd gshadow: files hosts: files myhostname dns ethers: files netmasks: files networks: files protocols: files rpc: files services: files automount: files aliases: files
# control system-auth sss
# net ads keytab create
nscd
:
# systemctl disable --now nscd
sssd
:
# systemctl enable --now sssd
# roleadd 'domain users' users
# roleadd 'domain admins' localadmins
Важно
# gpupdate-setup enable --local-policy ad-domain-controller
Важно
#control sshd-allow-groups enabled
#control sshd-allow-groups-list remote
# control sshd-gssapi-auth enabled
sshd
:
# systemctl restart sshd
Примечание
pwdlastset
.
Примечание
Важно
Важно
sssd
и winbind
.
/etc/krb5.keytab
). Поэтому, во избежание конфликтов с sssd, следует отключить этот функционал.
/etc/samba/smb.conf
в секцию [global]
добавить параметр machine password timeout = 0
:
[global] machine password timeout = 0
sssd
для обновления пароля учётной записи компьютера использует утилиту adcli
. Необходимо убедиться, что пакет adcli установлен в системе:
# apt-get install adcli
ad_maximum_machine_account_password_age
(секция [domain/<Домен>]
) в /etc/sssd/sssd.conf
. Значение по умолчанию: 30 дней.
sssd
необходим доступ на запись в файл /etc/krb5.keytab
. Для этого не достаточно привилегий пользователя _sssd, от которого обычно и запускается sssd
. Необходимо запускать sssd
с правами суперпользователя. Для этого следует в файле /etc/sssd/sssd.conf
в секции [sssd]
изменить значение параметра user
на root:
[sssd] user = root [domain/<Домен>] ad_update_samba_machine_account_password = true
Важно
/etc/samba/smb.conf
:
machine password timeout = 0
/etc/sssd/sssd.conf
:
ad_update_samba_machine_account_password = true
/etc/sssd/sssd.conf
(секция [domain/<Домен>]
) значение параметра ad_maximum_machine_account_password_age
установить равным 0:
[domain/<Домен>] ad_maximum_machine_account_password_age = 0
/etc/samba/smb.conf
(секция [global]
) значение параметра machine password timeout
установить равным 0:
[global] machine password timeout = 0
# net ads info
…
Last machine account password change: Ср, 20 мар 2024 12:36:35 EET
# net ads info -U <user>
Last machine account password change
.
/etc/krb5.keytab
) содержит корректную информацию:
# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 host/work.test.alt@TEST.ALT (aes256-cts-hmac-sha1-96)
1 host/WORK@TEST.ALT (aes256-cts-hmac-sha1-96)
1 host/work.test.alt@TEST.ALT (aes128-cts-hmac-sha1-96)
1 host/WORK@TEST.ALT (aes128-cts-hmac-sha1-96)
1 host/work.test.alt@TEST.ALT (DEPRECATED:arcfour-hmac)
1 host/WORK@TEST.ALT (DEPRECATED:arcfour-hmac)
1 restrictedkrbhost/work.test.alt@TEST.ALT (aes256-cts-hmac-sha1-96)
1 restrictedkrbhost/WORK@TEST.ALT (aes256-cts-hmac-sha1-96)
1 restrictedkrbhost/work.test.alt@TEST.ALT (aes128-cts-hmac-sha1-96)
1 restrictedkrbhost/WORK@TEST.ALT (aes128-cts-hmac-sha1-96)
1 restrictedkrbhost/work.test.alt@TEST.ALT (DEPRECATED:arcfour-hmac)
1 restrictedkrbhost/WORK@TEST.ALT (DEPRECATED:arcfour-hmac)
1 WORK$@TEST.ALT (aes256-cts-hmac-sha1-96)
1 WORK$@TEST.ALT (aes128-cts-hmac-sha1-96)
1 WORK$@TEST.ALT (DEPRECATED:arcfour-hmac)
/etc/krb5.keytab
:
# kinit -k WORK\$@TEST.ALT
#klist
Ticket cache: KEYRING:persistent:0:0 Default principal: WORK$@TEST.ALT Valid starting Expires Service principal 21.04.2023 12:25:37 21.04.2023 22:25:37 krbtgt/TEST.ALT@TEST.ALT renew until 28.04.2023 12:25:37 #kdestroy -p WORK\$@TEST.ALT
Важно
/etc/krb5.keytab
) соответствует реальному имени машины (см. вывод команды hostnamectl
).
# apt-get update && apt-get dist-upgrade
/etc/krb5.keytab
;
foreignSecurityPrincipal
для всех добавленных пользователей и групп из доверенного домена.
External
, а не Forest
;
samba-tool
.
Таблица 5.1. Команды управления доверием
Команда
|
Описание
|
Примечание
|
---|---|---|
domain trust create <домен>
|
Создать доверие домена или леса
|
Можно использовать следующие опции:
|
domain trust modify <домен>
|
Изменить доверие домена или леса
|
|
domain trust delete <домен>
|
Удалить доверие домена или леса
|
Можно использовать следующие опции:
|
domain trust list
|
Вывести список доверительных отношений домена
|
|
domain trust show <домен>
|
Показать сведения о доверенном домене
|
|
domain trust validate <домен>
|
Проверить доверие к домену
|
Можно использовать следующие опции:
|
Таблица 5.2. Исходные данные
Имя домена
|
Контроллер домена
|
IP-адрес
|
ОС контроллера домена
|
Версия Samba
|
---|---|---|---|---|
TEST.ALT
|
dc1.test.alt
|
192.168.0.122
|
ALT Server 10.2
|
4.19.4
|
EXAMPLE.ALT
|
s1.example.alt
|
192.168.0.172
|
ALT Server 10.2
|
4.19.4
|
/etc/bind/options.conf
.
zone "example.alt" { type forward; forwarders { 192.168.0.172; }; };
zone "test.alt" { type forward; forwarders { 192.168.0.122; }; };
# systemctl restart bind.service
Примечание
/etc/bind/options.conf
в секцию options
добавить параметр:
dnssec-validation no;И перезапустить службу DNS:
# systemctl restart bind.service
/etc/samba/smb.conf
(в параметре dns forwarder
). Например:
dns forwarder = 192.168.0.150 8.8.8.8
# systemctl restart samba
/etc/bind/options.conf
:
options
добавить параметр:
dnssec-validation no;
zone "example.alt" { type forward; forwarders { 192.168.0.172; }; }; zone "test.alt" { type forward; forwarders { 192.168.0.122; }; };
# systemctl restart bind.service
#host -t srv _kerberos._tcp.example.alt
_kerberos._tcp.example.alt has SRV record 0 100 88 s1.example.alt. #host -t srv _kerberos._tcp.test.alt
_kerberos._tcp.test.alt has SRV record 0 100 88 dc1.test.alt.
#host -t srv _kerberos._tcp.example.alt
_kerberos._tcp.example.alt has SRV record 0 100 88 s1.example.alt. #host -t srv _kerberos._tcp.test.alt
_kerberos._tcp.test.alt has SRV record 0 100 88 dc1.test.alt.
#kinit administrator@EXAMPLE.ALT
Password for administrator@EXAMPLE.ALT: #klist
Ticket cache: KEYRING:persistent:0:krb_ccache_eFyZ8Tr Default principal: administrator@EXAMPLE.ALT Valid starting Expires Service principal 27.03.2024 14:14:36 28.03.2024 00:14:36 krbtgt/TEST.ALT@TEST.ALT renew until 28.03.2024 14:14:32
#kinit administrator@TEST.ALT
Password for administrator@TEST.ALT: #klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@TEST.ALT Valid starting Expires Service principal 27.03.2024 15:17:50 28.03.2024 01:17:50 krbtgt/TEST.ALT@TEST.ALT renew until 28.03.2024 15:17:46
Важно
Таблица 5.3. Исходные данные
Имя домена
|
Контроллер домена
|
IP-адрес
|
ОС
|
Версия Samba
|
---|---|---|---|---|
TEST.ALT
|
dc1.test.alt
|
192.168.0.122
|
ALT Server 10.2
|
4.19.4
|
WIN.ALT
|
DC1.win.alt
|
192.168.0.190
|
Windows Server 2012
|
|
C:\> dnscmd 127.0.0.1 /ZoneAdd test.alt /Forwarder 192.168.0.122
DNS Server 127.0.0.1 created zone test.alt:
Command completed successfully
Или выполнить следующую команду в сеансе PowerShell для настройки пересылки DNS:
PS C:\Windows\system32> Add-DnsServerConditionalForwarderZone -Name test.alt -MasterServers 192.168.0.122 -ReplicationScope Forest
/etc/bind/options.conf
(или /etc/bind/ddns.conf
) строки:
zone "win.alt" { type forward; forwarders { 192.168.0.190; }; };И перезапустить службу DNS:
# systemctl restart bind.service
Примечание
/etc/bind/options.conf
в секцию options
добавить параметр:
dnssec-validation no;И перезапустить службу DNS:
# systemctl restart bind.service
/etc/samba/smb.conf
(в параметре dns forwarder
). Например:
dns forwarder = 192.168.0.150 8.8.8.8
# systemctl restart samba
/etc/bind/options.conf
:
options
добавить параметр:
dnssec-validation no;
zone "win.alt" { type forward; forwarders { 192.168.0.190; }; };
# systemctl restart bind.service
#dig +short -t SRV _kerberos._udp.test.alt
0 100 88 dc1.test.alt. #dig +short -t SRV _ldap._tcp.test.alt
0 100 389 dc1.test.alt.
#dig +short -t SRV _kerberos._tcp.dc._msdcs.win.alt
0 100 88 dc1.win.alt. #dig +short -t SRV _ldap._tcp.dc._msdcs.win.alt
0 100 389 dc1.win.alt.
#kinit administrator@WIN.ALT
Password for administrator@WIN.ALT: #klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@WIN.ALT Valid starting Expires Service principal 27.04.2023 17:42:28 28.04.2023 03:42:28 krbtgt/WIN.ALT@WIN.ALT renew until 28.04.2023 17:42:25
C:\>nslookup.exe
>set type=SRV
>_kerberos._udp.test.alt
_kerberos._udp.test.alt SRV service location: priority = 0 weight = 100 port = 88 svr hostname = dc1.test.alt … test.alt primary name server = dc1.test.alt responsible mail addr = hostmaster.test.alt serial = 7 refresh = 900 (15 mins) retry = 600 (10 mins) expire = 86400 (1 days) default TTL = 3600 (1 hours) >_ldap._tcp.test.alt
_ldap._tcp.test.alt SRV service location: priority = 0 weight = 100 port = 389 svr hostname = dc1.test.alt …
# samba-tool domain trust create EXAMPLE.ALT --type=forest --direction=both --create-location=both -U administrator@EXAMPLE.ALT
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-1455776928-3410124986-2843404052]
RemoteDC Netbios[S1] DNS[s1.example.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV,FULL_SECRET_DOMAIN_6]
Password for [administrator@EXAMPLE.ALT]:
RemoteDomain Netbios[EXAMPLE] DNS[example.alt] SID[S-1-5-21-3274802069-598906262-3677769431]
Creating remote TDO.
Remote TDO created.
Setting supported encryption types on remote TDO.
Creating local TDO.
Local TDO created
Setting supported encryption types on local TDO.
Setup local forest trust information...
Namespaces[2] TDO[example.alt]:
TLN: Status[Enabled] DNS[*.example.alt]
DOM: Status[Enabled] DNS[example.alt] Netbios[EXAMPLE] SID[S-1-5-21-3274802069-598906262-3677769431]
Setup remote forest trust information...
Namespaces[2] TDO[test.alt]:
TLN: Status[Enabled] DNS[*.test.alt]
DOM: Status[Enabled] DNS[test.alt] Netbios[TEST] SID[S-1-5-21-1455776928-3410124986-2843404052]
Validating outgoing trust...
OK: LocalValidation: DC[\\s1.example.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
Validating incoming trust...
OK: RemoteValidation: DC[\\dc1.test.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
Success
Важно
external
, а не forest
.
[root@dc1 ~]# samba-tool domain trust show EXAMPLE.ALT
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-1455776928-3410124986-2843404052]
TrustedDomain:
NetbiosName: EXAMPLE
DnsName: example.alt
SID: S-1-5-21-3274802069-598906262-3677769431
Type: 0x2 (UPLEVEL)
Direction: 0x3 (BOTH)
Attributes: 0x8 (FOREST_TRANSITIVE)
PosixOffset: 0x00000000 (0)
kerb_EncTypes: 0x18 (AES128_CTS_HMAC_SHA1_96,AES256_CTS_HMAC_SHA1_96)
Namespaces[2] TDO[example.alt]:
TLN: Status[Enabled] DNS[*.example.alt]
DOM: Status[Enabled] DNS[example.alt] Netbios[EXAMPLE] SID[S-1-5-21-3274802069-598906262-3677769431]
[root@s1 ~]# samba-tool domain trust show TEST.ALT
LocalDomain Netbios[EXAMPLE] DNS[example.alt] SID[S-1-5-21-3274802069-598906262-3677769431]
TrustedDomain:
NetbiosName: TEST
DnsName: test.alt
SID: S-1-5-21-1455776928-3410124986-2843404052
Type: 0x2 (UPLEVEL)
Direction: 0x3 (BOTH)
Attributes: 0x8 (FOREST_TRANSITIVE)
PosixOffset: 0x00000000 (0)
kerb_EncTypes: 0x18 (AES128_CTS_HMAC_SHA1_96,AES256_CTS_HMAC_SHA1_96)
Namespaces[2] TDO[test.alt]:
TLN: Status[Enabled] DNS[*.test.alt]
DOM: Status[Enabled] DNS[test.alt] Netbios[TEST] SID[S-1-5-21-1455776928-3410124986-2843404052]
[root@dc1 ~]# samba-tool domain trust list
Type[Forest] Transitive[Yes] Direction[BOTH] Name[example.alt]
[root@dc1 ~]# samba-tool domain trust validate EXAMPLE.ALT -Uadministrator@EXAMPLE.ALT
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-1455776928-3410124986-2843404052]
LocalTDO Netbios[EXAMPLE] DNS[example.alt] SID[S-1-5-21-3274802069-598906262-3677769431]
OK: LocalValidation: DC[\\s1.example.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
OK: LocalRediscover: DC[\\s1.example.alt] CONNECTION[WERR_OK]
RemoteDC Netbios[S1] DNS[s1.example.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV,FULL_SECRET_DOMAIN_6]
Password for [administrator@EXAMPLE.ALT]:
OK: RemoteValidation: DC[\\dc1.test.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
OK: RemoteRediscover: DC[\\dc1.test.alt] CONNECTION[WERR_OK]
Примечание
# samba-tool domain trust create win.alt --type=forest --direction=both --create-location=both -Uadministrator@WIN
Важно
external
, а не forest
.
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-3848605173-1839566900-710408900] RemoteDC Netbios[DC1] DNS[DC1.win.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV,FULL_SECRET_DOMAIN_6,ADS_WEB_SERVICE,DS_8,__unknown_00008000__] Password for [administrator@WIN]: RemoteDomain Netbios[WIN] DNS[win.alt] SID[S-1-5-21-212759798-1661061060-862600140] Creating local TDO. Local TDO created Setting supported encryption types on local TDO. Setup local forest trust information... Namespaces[2] TDO[win.alt]: TLN: Status[Enabled] DNS[*.win.alt] DOM: Status[Enabled] DNS[win.alt] Netbios[WIN] SID[S-1-5-21-212759798-1661061060-862600140] Validating outgoing trust... OK: LocalValidation: DC[\\DC1.win.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED Validating incoming trust… OK: RemoteValidation: DC[\\dc1.test.alt] CONNECTION[WERR_OK] TRUST[WEER_OK] VERIFY_STATUS_RETURNED Success.
--create-location
нужно заменить опцию both
на local
, Samba DC прежде чем создать доверительные отношения сначала запросит Trust Key (??Incoming Trust Password/Outgoing Trust Password), созданный ранее при настройке в Windows.
# samba-tool domain trust create win.alt --type=forest --direction=both --create-location=local -Uadministrator@WIN
New Incoming Trust Password:
Retype Incoming Trust Password:
New Outgoing Trust Password:
Retype Outgoing Trust Password:
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-3848605173-1839566900-710408900]
RemoteDC Netbios[DC1] DNS[DC1.win.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,…]
Password for [administrator@WIN]:
…
# samba-tool domain trust show WIN.ALT
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-3848605173-1839566900-710408900]
TrustedDomain:
NetbiosName: WIN
DnsName: win.alt
SID: S-1-5-21-212759798-1661061060-862600140
Type: 0x2 (UPLEVEL)
Direction: 0x3 (BOTH)
Attributes: 0x8 (FOREST_TRANSITIVE)
PosixOffset: 0x00000000 (0)
kerb_EncTypes: 0x18 (AES128_CTS_HMAC_SHA1_96,AES256_CTS_HMAC_SHA1_96)
Namespaces[2] TDO[win.alt]:
TLN: Status[Enabled] DNS[*.win.alt]
DOM: Status[Enabled] DNS[win.alt] Netbios[WIN] SID[S-1-5-21-212759798-1661061060-862600140]
# samba-tool domain trust list
Type[Forest] Transitive[Yes] Direction[BOTH] Name[win.alt]
# samba-tool domain trust validate win.alt -Uadministrator@WIN
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-3848605173-1839566900-710408900]
LocalTDO Netbios[WIN] DNS[win.alt] SID[S-1-5-21-212759798-1661061060-862600140]
OK: LocalValidation: DC[\\DC1.win.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
OK: LocalRediscover: DC[\\DC1.win.alt] CONNECTION[WERR_OK]
RemoteDC Netbios[DC1] DNS[DC1.win.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV,FULL_SECRET_DOMAIN_6,ADS_WEB_SERVICE,DS_8,__unknown_00008000__]
Password for [administrator@WIN]:
OK: RemoteValidation: DC[\\dc2.test.alt] CONNECTION[WERR_OK] TRUST[WERR_OK] VERIFY_STATUS_RETURNED
OK: RemoteRediscover: DC[\\dc2.test.alt] CONNECTION[WERR_OK]
Примечание
wbinfo
нельзя получить список пользователей и групп из доверяющего домена, можно получить список пользователей и групп только из своего домена. Пример:
#wbinfo -u --domain=EXAMPLE.ALT
#wbinfo -u --domain=TEST.ALT
TEST\administrator TEST\guest TEST\krbtgt TEST\dns-dc1 TEST\ivanov
#wbinfo -u --domain=EXAMPLE.ALT
EXAMPLE\administrator EXAMPLE\guest EXAMPLE\krbtgt EXAMPLE\dns-s1 EXAMPLE\kim #wbinfo -u --domain=TEST.ALT
samba-tool
. Пример получения списка пользователей из обоих доменов на контроллере домена dc1.test.alt:
#samba-tool user list -H ldap://s1 -Uadministrator@EXAMPLE.ALT
Password for [administrator@EXAMPLE.ALT]: dns-s1 krbtgt Administrator Guest kim #samba-tool user list -H ldap://dc1 -Uadministrator@TEST.ALT
Password for [administrator@TEST.ALT]: dns-dc1 krbtgt Guest Administrator ivanov
#wbinfo --all-domains
BUILTIN TEST EXAMPLE #wbinfo --own-domain
TEST #wbinfo --trusted-domains
BUILTIN TEST EXAMPLE #wbinfo --online-status
BUILTIN : active connection TEST : active connection EXAMPLE : active connection
#wbinfo -n TEST\\ivanov
S-1-5-21-1455776928-3410124986-2843404052-1105 SID_USER (1) #wbinfo -n EXAMPLE\\kim
S-1-5-21-3274802069-598906262-3677769431-1104 SID_USER (1) #wbinfo -n TEST\\office
S-1-5-21-1455776928-3410124986-2843404052-1107 SID_DOM_GROUP (2) #wbinfo -n EXAMPLE\\office2
S-1-5-21-3274802069-598906262-3677769431-1107 SID_DOM_GROUP (2) #wbinfo -i TEST\\ivanov
TEST.ALT\ivanov:*:3000022:100::/home/TEST.ALT/ivanov:/bin/false #wbinfo -i EXAMPLE\\kim
EXAMPLE\kim:*:3000020:3000021::/home/EXAMPLE/kim:/bin/false
wbinfo
можно протестировать процесс аутентификации разных пользователей из обоих доменов.
wbinfo
попытается авторизовать пользователя. Первой проверкой будет аутентификация по паролю с открытым текстом. Этот тип аутентификации применяется, когда пользователь входит в систему локально (plaintext не означает, что пароль будет отправлен без шифрования, это просто название процесса входа в систему). Вторая проверка — аутентификация по паролю запрос/ответ. Этот тип аутентификации использует NTLM или Kerberos.
#wbinfo -a TEST\\ivanov
Enter TEST\ivanov's password: plaintext password authentication succeeded Enter TEST\ivanov's password: challenge/response password authentication succeeded #wbinfo -a EXAMPLE\\kim
Enter EXAMPLE\kim's password: plaintext password authentication succeeded Enter EXAMPLE\kim's password: challenge/response password authentication succeeded
#wbinfo --ping-dc
checking the NETLOGON for domain[TEST] dc connection to "dc1.test.alt" succeeded #wbinfo --ping-dc --domain=EXAMPLE.ALT
checking the NETLOGON for domain[EXAMPLE.ALT] dc connection to "s1.example.alt" succeeded
#wbinfo -n EXAMPLE\\kim
S-1-5-21-3274802069-598906262-3677769431-1104 SID_USER (1) #samba-tool group addmembers office S-1-5-21-3274802069-598906262-3677769431-1104
Added members to group office #wbinfo -n EXAMPLE\\office2
S-1-5-21-3274802069-598906262-3677769431-1107 SID_DOM_GROUP (2) #samba-tool group addmembers office S-1-5-21-3274802069-598906262-3677769431-1107
Added members to group office #samba-tool group listmembers office
S-1-5-21-3274802069-598906262-3677769431-1104 ivanov S-1-5-21-3274802069-598906262-3677769431-1107
Лес
), то рабочую станцию с ОС Альт следует вводить в домен через winbind (см. Подключение к AD с помощью Samba Winbind).
smb.conf
установить ID-маппинг для обоих доменов (backend = rid/tdb ??). Пример файла smb.conf
на машине введённой в домен example.alt:
[global] security = ads realm = EXAMPLE.ALT workgroup = EXAMPLE netbios name = WORK1 template shell = /bin/bash kerberos method = system keytab wins support = no winbind use default domain = yes winbind enum users = no winbind enum groups = no template homedir = /home/EXAMPLE.ALT/%U winbind refresh tickets = yes winbind offline logon = yes idmap config * : range = 10000-20000000 idmap config * : backend = tdb idmap config EXAMPLE : backend = rid idmap config EXAMPLE : range = 10000-20000000 idmap config TEST : backend = rid idmap config TEST : range = 10000-20000000
smbd
, nmbd
, winbind
можно проверить, есть ли возможность просматривать пользователей из обоих доменов:
#net rpc trustdom list -Uadministrator
Password for [EXAMPLE\administrator]: Trusted domains list: TEST S-1-5-21-1455776928-3410124986-2843404052 Trusting domains list: TEST S-1-5-21-1455776928-3410124986-2843404052 #wbinfo -n TEST\\ivanov
S-1-5-21-1455776928-3410124986-2843404052-1105 SID_USER (1) #wbinfo -n EXAMPLE\\kim
S-1-5-21-3274802069-598906262-3677769431-1104 SID_USER (1)
getent
:
#getent group TEST\\office
TEST\office:*:11107: #getent group EXAMPLE\\office2
office2:*:11107: #getent passwd TEST\\ivanov
TEST\ivanov:*:11105:10513::/home/EXAMPLE.ALT/ivanov:/bin/bash #getent passwd EXAMPLE\\kim
kim:*:10000:10001:Олег Ким:/home/EXAMPLE.ALT/kim:/bin/bash
$ssh TEST\\ivanov@192.168.0.126
TEST\ivanov@192.168.0.126's password: [TEST\ivanov@work1 ~]$ exit выход Connection to 192.168.0.126 closed. $ssh EXAMPLE\\kim@192.168.0.126
EXAMPLE\kim@192.168.0.126's password: [kim@work1 ~]$ exit выход Connection to 192.168.0.126 closed.
/etc/sssd/sssd.conf
добавить доверенный домен:
[domain/EXAMPLE.ALT/TEST.ALT] use_fully_qualified_names = false
sssd
можно проверить, есть ли возможность просматривать пользователей из обоих доменов:
#getent passwd ivanov
ivanov:*:1855401105:1855400513:Иван Иванов:/home/TEST.ALT/ivanov:/bin/bash #getent passwd kim
# samba-tool domain trust delete EXAMPLE.ALT -U administrator@EXAMPLE.ALT
LocalDomain Netbios[TEST] DNS[test.alt] SID[S-1-5-21-1455776928-3410124986-2843404052]
RemoteDC Netbios[S1] DNS[s1.example.alt] ServerType[PDC,GC,LDAP,DS,KDC,TIMESERV,CLOSEST,WRITABLE,GOOD_TIMESERV,FULL_SECRET_DOMAIN_6]
Password for [administrator@EXAMPLE.ALT]:
RemoteDomain Netbios[EXAMPLE] DNS[example.alt] SID[S-1-5-21-3274802069-598906262-3677769431]
RemoteTDO deleted.
# samba-tool domain trust list
/var/log/samba/
.
smb.conf
log level
в файле /etc/samba/smb.conf
. Для разных классов отладки можно указывать разные уровни журналирования и отдельные файлы журналов.
log level = 3
log level = 3 passdb:5 auth:5
/var/log/winbind.log
:
log level = 3 winbind:1@/var/log/winbind.log
man smb.conf
).
log level
в файле /etc/samba/smb.conf
. Это значение можно переопределить, используя опцию -d
для всех команд Samba. Например:
$ net usershare add Share2 /tmp/share2 -d 5
logging
, syslog
и syslog only
можно посмотреть на справочной странице smb.conf(5) (man smb.conf
).
Примечание
Примечание
auth_audit
— стандартный формат журнала;
auth_json_audit
— формат JSON.
[global]
файла /etc/samba/smb.conf
:
log level = 1 auth_audit:3 auth_json_audit:3
[2023/04/13 11:51:20.341735, 2] ../../auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST.ALT@TEST.ALT] at [Thu, 13 Apr 2023 11:51:20.341726 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:49382] mapped to [TEST]\[petrov]. local host [NULL] [2023/04/13 11:51:32.859080, 3] ../../auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST.ALT@TEST.ALT] at [Thu, 13 Apr 2023 11:51:32.859051 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52630] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL]
[2023/04/13 11:46:08.614095, 2] ../../auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST.ALT@TEST.ALT] at [Thu, 13 Apr 2023 11:46:08.614055 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:42738] mapped to [TEST]\[petrov]. local host [NULL] {"timestamp": "2023-04-13T11:46:08.614338+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4625, "logonId": "10c3af2c9c39fef4", "logonType": 3, "status": "NT_STATUS_WRONG_PASSWORD", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:42738", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST.ALT@TEST.ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 6096}} [2023/04/13 11:48:45.902778, 3] ../../auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST.ALT@TEST.ALT] at [Thu, 13 Apr 2023 11:48:45.902759 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52840] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL] {"timestamp": "2023-04-13T11:48:45.902942+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4624, "logonId": "71c99af1de51eaf6", "logonType": 3, "status": "NT_STATUS_OK", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:52840", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST.ALT@TEST.ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 9023}}
[global]
файла /etc/samba/smb.conf
:
log level = 1 dsdb_json_audit:5 dsdb_password_json_audit:5 dsdb_group_json_audit:5 dsdb_transaction_json_audit:5
{ "timestamp": 2023-04-13T11:48:45.902942+0200, "type": одно из значений "Authentication", "Authorization", "dsdbChange", "dsdbTransaction", "passwordChange", "replicatedUpdate", "groupChange", type: { data } }
Примечание
serviceDescription
), для параметра netlogonComputer
будет установлено значение «null», для параметра netlogonNegotiateFlags
будет установлено значение «0x00000000», а другие поля сетевого входа будут иметь аналогичные пустые значения.
Таблица 6.1. Аутентификация
Атрибут
|
Значение
|
---|---|
authDescription
|
Тип аутентификации, в том числе:
|
becameAccount
|
Имя учетной записи, под которой выполнен вход (может отличаться от учетной записи, предоставленной клиентом)
|
becameDomain
|
Имя домена, в который произведён вход
|
becameSid
|
SID аутентифицированной учетной записи
|
clientAccount
|
Сообщаемое клиентом имя учётной записи
|
clientDomain
|
Имя домена, о котором сообщает клиент
|
duration
|
Сколько времени заняла аутентификация в микросекундах
|
eventId
|
Идентификатор события Windows, указывающий в общих чертах, что произошло
|
localAddress
|
Адрес сервера и используемый порт
|
logonId
|
Случайный 64-битный идентификатор, помогающий отслеживать события входа в систему на разных этапах
|
logonType
|
Тип входа в Windows, для Samba один из
|
mappedAccount
|
Имя учетной записи клиента, преобразованное в имя учетной записи AD
|
mappedDomain
|
Клиентский домен преобразованный в доменное имя AD
|
netlogonComputer
|
Заявленное имя компьютера в аутентификации NETLOGON RPC
|
netlogonNegotiateFlags
|
Флаги параметров согласования NETLOGON
|
netlogonSecureChannelType
|
Тип используемого канала NETLOGON
|
netlogonTrustAccount
|
Учетная запись, используемая для аутентификации NETLOGON
|
netlogonTrustAccountSid
|
SID, принадлежащий доверенной учетной записи NETLOGON
|
passwordType
|
Алгоритм/протокол пароля (например, «HMAC-SHA256», «NTLMv2», «arcfour-hmac-md5»).
|
remoteAddress
|
Заявленный адрес (и порт) удаленного клиента
|
serviceDescription
|
Тип службы, например "LDAP", "SMB2", "NETLOGON", "Kerberos KDC"
|
status
|
Сообщение NT STATUS. Для успешной аутентификации это будет "NT_STATUS_OK". Неудачная аутентификация может иметь здесь «NT_STATUS_OK», если аутентификация не удалась после регистрации этого сообщения, но обычно имеет код ошибки. Некоторые типы сообщений
|
workstation
|
Заявленное имя клиентской рабочей станции
|
Таблица 6.2. Успешные события авторизации
Атрибут
|
Значение
|
---|---|
account
|
Имя авторизуемой учетной записи
|
accountFlags
|
Битовое поле атрибутов учетной записи
|
authType
|
Строка, описывающая тип авторизации (например, «krb5», «NTLMSSP», «simple bind»)
|
domain
|
Домен
|
localAddress
|
Адрес сервера и используемый порт
|
logonServer
|
Сервер, на котором выполнена аутентификация
|
remoteAddress
|
Видимый адрес клиента
|
serviceDescription
|
Тип службы, например "LDAP", "SMB2", "DCE/RPC"
|
sessionId
|
GUID, идентифицирующий сеанс
|
sid
|
SID авторизованной учетной записи
|
transportProtection
|
Тип защиты канала (например, «SMB», «TLS», «SEAL», «NONE»)
|
Примечание
Важно
samba-tool
:
samba-tool spn add host/fdqn@KerberosRealm <sAMAccount name>
После добавления SPN можно сгенерировать keytab, выполнив команду:
samba-tool domain exportkeytab <имя>.keytab --principal=[<sAMAccount name> | <SPN>]
В результате выполнения этой команды будет создан keytab-файл <имя>.keytab
, содержащий UPN или SPN, в зависимости от того, что было указано в параметре --principal
.
man samba-tool
).
Примечание
# samba-tool spn add HTTP/test.alt webauth
# samba-tool domain exportkeytab /tmp/web.keytab --principal=HTTP/test.alt
Export one principal to /tmp/keytab
# klist -ke /tmp/web.keytab
Keytab name: FILE:/tmp/web.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 HTTP/test.alt@TEST.ALT (DEPRECATED:arcfour-hmac)
kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
И выполнить команду:
kinit -5 -V -k -t /tmp/web.keytab HTTP/test.alt
Using default cache: /tmp/krb5cc_0
Using principal: HTTP/test.alt@TEST.ALT
Using keytab: /tmp/web.keytab
Authenticated to Kerberos v5
Примечание
kinit: Client not found in Kerberos database while getting initial credentialsНеобходимо в ADMC изменить для пользователя webauth значение параметра
userPrincipalName
на значение servicePrincipalName + REALM
(в данном примере нужно поменять webauth на HTTP/test.alt@TEST.ALT).
samba-tool
.
Таблица 7.1. Команды управления пользователями
Команда
|
Описание
|
Примечание
|
---|---|---|
user add <имя пользователя> [<пароль>]
|
Создать нового пользователя в AD
|
|
user create <имя пользователя> [<пароль>]
|
Создать нового пользователя в AD
|
Команда доступна только в целях совместимости. Рекомендуется вместо этой команды использовать команду
samba-tool user add
|
user delete <имя пользователя> [<опции>]
|
Удалить существующего пользователя
|
|
user disable <имя пользователя>
|
Отключить пользовательский аккаунт
|
|
user edit <имя пользователя>
|
Редактировать объект пользовательского аккаунта AD
|
В опции
--editor=<редактор> можно указать редактор (по умолчанию vi)
|
user enable <имя пользователя>
|
Включить пользовательский аккаунт
|
|
user list
|
Вывести список пользователей
|
По умолчанию выводятся sAMAccountNames пользователей.
Можно использовать следующие опции:
|
user setprimarygroup <имя пользователя> <имя группы>
|
Установить основную группу для учётной записи пользователя
|
|
user getgroups <имя пользователя>
|
Вывести список групп, в которые входит учётная запись пользователя напрямую
|
|
user show <имя пользователя>
|
Вывести пользовательский объект AD
|
В опции
--attributes=USER_ATTRS можно указать, разделённый запятыми, список атрибутов
|
user move <имя пользователя> <контейнер>
|
Переместить учётную запись пользователя в указанную организационную единицу или контейнер
|
Имя пользователя указывается в команде в формате sAMAccountName.
Имя организационной единицы или контейнера можно указать как полное DN или без компонента domainDN.
|
user password
|
Изменить пароль,указанной при аутентификации, учётной записи пользователя
|
|
user rename <имя пользователя>
|
Переименовать пользователя и изменить его атрибуты
|
По умолчанию выводятся sAMAccountNames пользователей.
Для удаления атрибута следует использовать пустое значение атрибута.
Имя пользователя указывается в команде в формате sAMAccountName.
Можно использовать следующие опции:
|
user setexpiry <имя пользователя>
|
Установить срок действия для учётной записи пользователя
|
|
user setpassword <имя пользователя>
|
Установить или сбросить пароль учетной записи пользователя
|
|
user unlock <имя пользователя>
|
Разблокировать учётную запись пользователя в домене AD
|
|
user getpassword <имя пользователя>
|
Получить атрибуты пароля учётной записи пользователя
|
|
user syncpasswords --cache-ldb-initialize
|
Синхронизировать пароли всех учётных записей пользователей с помощью дополнительного сценария
|
Эта команда должна выполняться только на одном контроллере домена (обычно на PDC)
|
# samba-tool user create ivanov --given-name='Иван Иванов' --mail-address='ivanov@test.alt'
New Password:
Retype Password:
User 'ivanov' added successfully
# samba-tool user setexpiry ivanov --noexpiry
Expiry for user 'ivanov' disabled.
# samba-tool user list
Guest
ivanov
Administrator
krbtgt
# samba-tool user disable ivanov
# samba-tool user setpassword ivanov
Предупреждение
pdbedit -x -m имя
Таблица 7.2. Команды управления группами
Команда
|
Описание
|
Примечание
|
---|---|---|
group add <имя группы> [<опции>]
|
Создать новую группу
|
|
group create <имя группы> [<опции>]
|
Создать новую группу
|
Доступна только в целях совместимости. Рекомендуется вместо этой команды использовать команду
samba-tool group add
|
group addmembers <имя группы> <участник> [<опции>]
|
Добавить участников в группу
|
|
group delete <имя группы> [<опции>]
|
Удалить группу AD
|
|
group edit <имя группы>
|
Редактировать объект группы AD
|
В опции
--editor=<редактор> можно указать редактор (по умолчанию vi)
|
group list
|
Вывести список групп
|
|
group listmembers <имя группы> [<опции>]
|
Вывести список участников данной группы
|
По умолчанию выводятся sAMAccountNames участников. Если sAMAccountName недоступен, будет использоваться CN.
Можно использовать следующие опции:
|
group move <имя группы> <контейнер> [<опции>]
|
Переместить группу в указанную организационную единицу или контейнер
|
Имя группы указывается в команде в формате sAMAccountName.
Имя организационной единицы или контейнера можно указать как полное DN или без компонента domainDN.
|
group removemembers <имя группы> <участник> [<опции>]
|
Удалить участника из группы
|
|
group show <имя группы> [<опции>]
|
Вывести группу и её атрибуты
|
В опции
--attributes=USER_ATTRS можно указать, разделённый запятыми, список атрибутов
|
group stats [<опции>]
|
Показать статистику для общих групп и членства в группах
|
|
group rename <имя группы> [<опции>]
|
Переименовать группу и изменить её атрибуты
|
По умолчанию выводятся sAMAccountNames групп.
Для удаления атрибута следует использовать пустое значение атрибута.
Имя группы указывается в команде в формате sAMAccountName.
Можно использовать следующие опции:
|
# samba-tool group add office
# samba-tool group add groupname --nis-domain=samdom --gid-number=<next available GID>
# samba-tool group delete office
#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 listmembers "Domain Users" | grep ivanov
# samba-tool domain demote --remove-other-dead-server=dc2 -UAdministrator
где dc2 — имя (hostname) не функционирующего контроллера домена.
/etc/krb5.conf
указать опции default_realm = TEST.ALT
и dns_lookup_realm = false
;
# for service in samba smb nmb krb5kdc slapd bind; do systemctl disable $service; systemctl stop $service; done
#rm -f /etc/samba/smb.conf
#rm -rf /var/lib/samba
#rm -rf /var/cache/samba
#mkdir -p /var/lib/samba/sysvol
# samba-tool domain join test.alt DC --dns-backend=SAMBA_INTERNAL -Uadministrator --realm=test.alt
#systemctl enable --now samba
#samba_dnsupdate --use-samba-tool --verbose
Важно
samba-tool drs showrepl
некоторое время будет присутствовать сообщение WERR_GEN_FAILURE в секции неисправного КД:
… DC=DomainDnsZones,DC=test,DC=alt Default-First-Site-Name\DC2 via RPC DSA object GUID: b78f2c9d-5c62-4497-a5e1-4fc85aedf1cb Last attempt @ Wed Apr 24 07:51:24 2024 MSK failed, result 31 (WERR_GEN_FAILURE) 28 consecutive failure(s). Last success @ NTTIME(0) DC=ForestDnsZones,DC=test,DC=alt Default-First-Site-Name\DC2 via RPC DSA object GUID: b78f2c9d-5c62-4497-a5e1-4fc85aedf1cb Last attempt @ Wed Apr 24 07:51:24 2024 MSK failed, result 31 (WERR_GEN_FAILURE) 28 consecutive failure(s). Last success @ NTTIME(0) …Это нормально, и через некоторое время после полной репликации оно исчезнет. Репликация может занять до нескольких часов.
samba-tool domain backup
. При этом будет создан файл резервной копии .tar.bz2
, который будет содержать полную резервную копию домена (на основе данного контроллера домена). Этот файл резервной копии можно использовать для восстановления домена с помощью команды samba-tool domain backup restore
.
Примечание
# samba-tool domain backup online --targetdir=<output-dir> --server=<DC-server> -UAdministrator
--configfile
, чтобы в резервную копию были включены правильные настройки smb.conf
(т.к. локальный файл smb.conf
может не существовать или его настройки могут отличаться от настроек контроллера домена.
#mkdir /var/samba-backup-online
#samba-tool domain backup online --targetdir=/var/samba-backup-online --server=dc1 -UAdministrator
Password for [TEST\Administrator]: workgroup is TEST realm is test.alt Looking up IPv4 addresses Looking up IPv6 addresses 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 A Kerberos configuration suitable for Samba AD has been generated at /var/samba-backup-online/tmpxqc6dwts/private/krb5.conf Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink! … Creating backup file /var/samba-backup-online/samba-backup-test.alt-2023-04-17T20-09-56.883910.tar.bz2..
# samba-tool domain backup offline --targetdir=<output-dir>
Примечание
#mkdir /var/samba-backup-offline
#samba-tool domain backup offline --targetdir=/var/samba-backup-offline
running backup on dirs: /var/lib/samba/private /var/lib/samba /etc/samba Starting transaction on /var/lib/samba/private/secrets Starting transaction on /var/lib/samba/private/sam.ldb backing up /var/lib/samba/private/sam.ldb … adding misc file etc/lmhosts adding misc file etc/smb.conf Backup succeeded.
samba
на всех старых контроллерах домена. Этот шаг можно пропустить если используется не Rename резервная копия.
samba-tool domain backup restore
, чтобы восстановить базу данных домена на одном новом контроллере домена.
samba
на новом DC.
samba-tool domain join <dns-realm> DC --server=<restored-dc>
Примечание
samba-tool domain backup restore
выполняется только один раз, при этом домен воссоздается на одном контроллере домена. Затем все старые контроллеры домена должны быть повторно присоединены к восстановленному контроллеру домена.
# samba-tool domain backup restore --backup-file=<tar-file> --newservername=<DC-name> --targetdir=<new-samba-dir>
/var/lib/samba
). Вместо этого рекомендуется восстановить базу данных домена в другой целевой каталог, а затем, при запуске samba, использовать параметр -s
(или --configfile
), например:
# samba -s <targetdir>/etc/smb.conf
Указание восстановленного smb.conf
гарантирует, что Samba будет использовать файлы базы данных в правильном месте.
--site
.
smb.conf
.
#mkdir /var/lib/samba/new
#samba-tool domain backup restore
--backup-file=/home/user/samba-backup-test.alt-2023-04-17T20-09-56.883910.tar.bz2 --newservername=newdc --targetdir=/var/lib/samba/new Adding new DC to site 'Default-First-Site-Name' Updating basic smb.conf settings... … Backup file successfully restored to /var/lib/samba/new Please check the smb.conf settings are correct before starting samba.
samba-tool domain demote
). В этом случае сеть контроллеров домена будет точно такой же, как и раньше.
Примечание
# apt-get install task-samba-dc
# for service in smb nmb krb5kdc slapd bind; do systemctl disable $service; systemctl stop $service; done
#rm -f /etc/samba/smb.conf
#rm -rf /var/lib/samba/*
#rm -rf /var/cache/samba
# samba-tool domain backup restore --backup-file=/home/user/samba-backup-test.alt-2023-04-17T20-09-56.883910.tar.bz2 --newservername=newdc --targetdir=/var/lib/samba
Adding new DC to site 'Default-First-Site-Name'
Updating basic smb.conf settings...
…
Backup file successfully restored to /var/lib/samba
Please check the smb.conf settings are correct before starting samba.
smb.conf
из каталога /var/lib/samba/etc/
в /etc/samba/
:
# cp /var/lib/samba/etc/smb.conf /etc/samba/
# systemctl enable --now samba
/etc/krb5.conf
файлом из каталога /var/lib/samba/private/
:
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
#samba-tool domain info 127.0.0.1
Forest : test.alt Domain : test.alt Netbios domain : TEST DC name : newdc.test.alt DC netbios name : NEWDC Server site : Default-First-Site-Name Client site : Default-First-Site-Name #smbclient -L localhost -Uadministrator
Password for [TEST\administrator]: Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk share Disk Commonplace Free Disk IPC$ IPC IPC Service (Samba 4.19.4) SMB1 disabled -- no workgroup available #host -t SRV _kerberos._udp.test.alt.
_kerberos._udp.test.alt has SRV record 0 100 88 newdc.test.alt.
samba-tool
делает клон работающей базы данных DC, в процессе клонирования переименовывает домен и создаёт файл резервной копии;
samba-tool
берет файл резервной копии и заполняет файлы, необходимые для запуска нового контроллера домена Samba.
# samba-tool domain backup rename
<new-domain-netbios> <newdomain-dns-realm>
--server=<dc-to-backup> --targetdir=<output-dir> --no-secrets -UAdministrator
где
#mkdir /var/samba-backup-rename
#samba-tool domain backup rename NEWTEST newtest.alt --server=dc1 --targetdir=/var/samba-backup-rename --no-secrets -UAdministrator
New realm for backed up domain: newtest.alt New base DN for backed up domain: DC=newtest,DC=alt New domain NetBIOS name: NEWTEST Password for [TEST\Administrator]: Provisioning the new (renamed) domain... … INFO 2023-04-17 20:19:06,012 pid:4195 /usr/lib64/samba-dc/python3.9/samba/netcmd/domain_backup.py #815: Deleting old DNS zone DC=test.alt,CN=MicrosoftDNS,DC=DomainDnsZones,DC=newtest,DC=alt ERROR(ldb): uncaught exception - No Deleted Objects container for DN DC=_msdcs,DC=test.alt,CN=MicrosoftDNS,DC=DomainDnsZones,DC=newtest,DC=alt File "/usr/lib64/samba-dc/python3.9/samba/netcmd/__init__.py", line 186, in _run return self.run(*args, **kwargs) File "/usr/lib64/samba-dc/python3.9/samba/netcmd/domain_backup.py", line 925, in run self.delete_old_dns_zones(logger, samdb, old_realm) File "/usr/lib64/samba-dc/python3.9/samba/netcmd/domain_backup.py", line 816, in delete_old_dns_zones samdb.delete(dn, ["tree_delete:1"])
Предупреждение
--no-secrets
исключает из резервной копии конфиденциальную информацию о паролях (например, такие атрибуты, как unicodePwd
, lmPwdHistory
и т. д.) для всех пользователей в домене. При этом, файл резервной копии по-прежнему содержит конфиденциальную информацию, такую как имена учётных записей пользователей.
smb.conf
, максимально соответствующий производственному контроллеру домена, и передать его команде резервного копирования (с помощью параметра --configfile=smb.conf
). Это гарантирует, что резервная копия будет содержать smb.conf
, точно соответствующий домену.
#mkdir /var/lib/samba/newtest
#samba-tool domain backup restore --targetdir=/var/lib/samba/newtest --newservername=NEWDC1 --backup-file=/home/user/samba-backup-test.alt-2023-04-17T20-09-56.883910.tar.bz2
Примечание
/var/lib/samba/
). Однако можно указать подкаталог (например, /var/lib/samba/newtest/
).
Примечание
# samba-tool user setpassword
Administrator
--newpassword=<пароль>-H /var/lib/samba/newtest/private/sam.ldb
samba
на новом контроллере домена, необходимо проверить правильность настроек smb.conf
(например, /var/lib/samba/newtest/etc/smb.conf
) и /etc/krb5.conf
.
samba
необходимо указать восстановленный smb.conf
(это гарантирует, что Samba загрузит правильные файлы базы данных для нового домена). Например:
# samba -s /var/lib/samba/newtest/etc/smb.conf
samba
могут быть зарегистрированы ошибки DNS. Это связано с тем, что samba_dnsupdate
запускается автоматически и добавляет записи DNS для нового домена.
samba
можно проверить правильность работы нового контроллера домена, например:
# ldbsearch -H ldap://NEWDC1 -UAdministrator
--targetdir
). Это может помочь понять, почему произошел сбой. Необходимо удалить этот каталог перед повторным запуском команды восстановления.
# ldbsearch -H ldap://<server> -UAdministrator
--debug=3
;
--newservername
, не должно существовать в исходном домене. В противном ошибке вы получите ошибку вида:
Adding CN=NEWDC,OU=Domain Controllers,DC=test,DC=alt ERROR(ldb): uncaught exception - Entry CN=NEWDC,OU=Domain Controllers,DC=test,DC=alt already exists File "/usr/lib64/samba-dc/python3.9/samba/netcmd/__init__.py", line 186, in _run return self.run(*args, **kwargs) File "/usr/lib64/samba-dc/python3.9/samba/netcmd/domain_backup.py", line 562, in run ctx.join_add_objects(specified_sid=dom_sid(str(sid))) File "/usr/lib64/samba-dc/python3.9/samba/join.py", line 674, in join_add_objects ctx.samdb.add(rec, controls=controls)
smb.conf
контроллера домена. Однако smb.conf
в файле резервной копии может содержать конфигурацию «интерфейсов», которая не соответствует IP-адресам на DC, на котором разворачиваются данные из резервной копии. Избежать этой проблемы можно, указав аргумент --host-ip
во время восстановления (это имеет значение только на переименованных резервных копий).
host
:
# host -t SRV _ldap._tcp.pdc._msdcs.<домен>
Например:
# host -t SRV _ldap._tcp.pdc._msdcs.test.alt
_ldap._tcp.pdc._msdcs.test.alt has SRV record 0 100 389 dc1.test.alt.
samba-tool
или в модуле удалённого управления базой данных конфигурации (ADMC) (подробнее см. Модуль удалённого управления базой данных конфигурации).
# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
# samba-tool fsmo transfer --role=<роль>
# samba-tool fsmo transfer --role=infrastructure
FSMO transfer of 'infrastructure' role successful
Проверка:
# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt
# samba-tool fsmo seize --role=<роль>
Важно
Примечание
Примечание
samba-tool
была ошибка, не позволявшая захватить роль naming:
# samba-tool fsmo seize --role=naming
ERROR (ldb): uncaught exception — Failed FSMO transfer: WERR_BADFILE
В этом случае необходимо использовать «ещё более принудительную передачу»:
# samba-tool fsmo seize --force --role=naming
[global]
файла smb.conf
:
bind interfaces only = yes interfaces = lo enp0s3и перезапустить службу Samba:
# systemctl restart samba.service
interfaces
вместо имён интерфейсов можно указывать IP-адреса.
Примечание
Примечание
# samba-tool dns zonecreate dc1 0.168.192.in-addr.arpa -Uadministrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
где dc1 — имя контроллера домена.
# samba-tool dns add dc1 0.168.192.in-addr.arpa 150 PTR web.test.alt
#samba-tool user create --random-password webauth
#samba-tool user setexpiry webauth
#samba-tool spn add HTTP/web.test.alt webauth
# samba-tool domain exportkeytab /tmp/httpd.keytab --principal=HTTP/web.test.alt@TEST.ALT
Export one principal to /tmp/httpd.keytab
/etc/httpd2/conf/
, установить права на него, так чтобы apache мог читать, но не изменять keytab-файл:
#chown root:apache /etc/httpd2/conf/httpd.keytab
#chmod 640 /etc/httpd2/conf/httpd.keytab
#apt-get install apache2-mod_auth_gssapi
#a2enmod auth_gssapi
#a2enmod authn_core
#a2enmod authz_user
#service httpd2 condreload
<Location "/login.html"> AuthType GSSAPI AuthName "GSSAPI Login" #GssapiBasicAuth On GssapiCredStore keytab:/etc/httpd2/conf/httpd.keytab GssapiAllowedMech krb5 Require valid-user </Location>
# systemctl restart httpd2
$Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:kinit ivanov
Password for ivanov@TEST.ALT: $klist
Ticket cache: KEYRING:persistent:500:krb_ccache_5VitJSL Default principal: ivanov@TEST.ALT Valid starting Expires Service principal 28.04.2023 15:54:41 29.04.2023 01:54:41 krbtgt/TEST.ALT@TEST.ALT renew until 05.05.2023 15:54:38
$ curl --negotiate -u : http://web.test.alt/login.html
<html><body><h1>It works!</h1></body></html>
Получено содержимое страницы.
$Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:kdestroy
$klist
$ curl --negotiate -u : http://web.test.alt/login.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Authentication required!</title>
</head>
<body>
<h1>Authentication required!</h1>
…
<h2>Error 401</h2>
<address>
<a href="/">web.test.alt</a><br />
<span>Apache/2.4.57 (Unix) mod_auth_gssapi/1.6.3 OpenSSL/1.1.1u</span>
</address>
</body>
</html>
Содержимое страницы не доступно.
Примечание
# samba-tool dns zonecreate dc1 0.168.192.in-addr.arpa -Uadministrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
где dc1 — имя контроллера домена.
# samba-tool dns add dc1 0.168.192.in-addr.arpa 150 PTR web.test.alt
#samba-tool user create --random-password nginxauth
#samba-tool user setexpiry nginxauth
#samba-tool spn add HTTP/web.test.alt nginxauth
# samba-tool domain exportkeytab /tmp/nginx.keytab --principal=HTTP/web.test.alt@TEST.ALT
Export one principal to /tmp/nginx.keytab
# apt-get install nginx nginx-spnego
# ln -s /etc/nginx/modules-available.d/http_auth_spnego.conf /etc/nginx/modules-enabled.d/
/etc/nginx
. Установить права на файл keytab:
# chmod 644 /etc/nginx/nginx.keytab
Nginx должен иметь права на чтение keytab-файла, но не на его изменение.
server { … location / { root /var/www/html; auth_gss on; auth_gss_realm TEST.ALT; #имя kerberos области auth_gss_keytab /etc/nginx/nginx.keytab; #путь к keytab-файлу auth_gss_service_name HTTP/web.test.alt; #имя используемого SPN auth_gss_allow_basic_fallback off; } }
auth_gss
— включение/отключение аутентификации;
auth_gss_keytab
— абсолютный путь к файлу keytab, содержащему учётные данные службы;
auth_gss_realm
— имя области Kerberos;
auth_gss_service_name
— имя субъекта-службы, используемое при получении учетных данных;
auth_gss_allow_basic_fallback
— включить/отключить базовую аутентификацию. При включённой базовой аутентификации (по умолчанию), если SSO не проходит (машина не в домене) разрешает обычный ввод логина и пароля. Если используется SPNEGO без SSL, рекомендуется отключить базовую аутентификацию, так как в этом случае пароль будет отправлен в виде открытого текста.
# systemctl restart nginx
auth_gss_authorized_principal
. Можно указывать несколько записей, по одной на строку:
auth_gss_authorized_principal <username>@<realm> auth_gss_authorized_principal <username2>@<realm>
auth_gss_authorized_principal_regex
. Этот параметр можно использовать вместе с параметром auth_gss_authorized_principal
:
auth_gss_authorized_principal <username>@<realm> auth_gss_authorized_principal_regex ^(<username>)/(<group>)@<realm>$
$Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:kinit ivanov
Password for ivanov@TEST.ALT: $klist
Ticket cache: KEYRING:persistent:500:krb_ccache_5VitJSL Default principal: ivanov@TEST.ALT Valid starting Expires Service principal 28.04.2023 15:54:41 29.04.2023 01:54:41 krbtgt/TEST.ALT@TEST.ALT renew until 05.05.2023 15:54:38
$ curl --negotiate -u : http://web.test.alt
<html><body><h1>It works!</h1></body></html>
Получено содержимое страницы.
$Попытаться прочитать содержимое сайта, используя аутентификацию Kerberos:kdestroy
$klist
$ curl --negotiate -u : http://web.test.alt
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
Содержимое страницы не доступно.
network.negotiate-auth.trusted-uris
.
network.automatic-ntlm-auth.trusted-uris
выставить в kerberos realm: .test.alt;
network.negotiate-auth.delegation-uris
выставить в kerberos realm: .test.alt;
network.automatic-ntlm-auth.allow-non-fqdn
выставить в: true;
network.negotiate-auth.allow-non-fqdn
выставить в: true;
/usr/lib64/firefox/browser/defaults/preferences/prefs.js
со следующим содержимым:
pref("network.negotiate-auth.trusted-uris",".test.alt"); pref("network.automatic-ntlm-auth.trusted-uris",".test.alt"); pref("network.automatic-ntlm-auth.allow-non-fqdn","true"); pref("network.negotiate-auth.allow-non-fqdn","true"); pref("network.negotiate-auth.delegation-uris",".test.alt");
network.negotiate-auth.trusted-uris
— политика SPNEGO;
network.automatic-ntlm-auth.trusted-uris
— политика NTLM;
network.negotiate-auth.delegation-uris
— политика Делегированная авторизация;
network.automatic-ntlm-auth.allow-non-fqdn
— политика Разрешить неполное доменное имя (Non FQDN);
network.negotiate-auth.allow-non-fqdn
— политика Разрешить неполное доменное имя (Non FQDN);
/etc/chromium/policies/managed/policies.json
добавить строку:
{ "AuthServerAllowlist": "*.test.alt" }Где .test.alt — имя kerberos области (realm).
Примечание
$ chromium-browser --auth-server-whitelist="*.test.alt"
/etc/opt/yandex/browser/policies/managed/policies.json
добавить строку:
{ "AuthServerAllowlist": "*.test.alt" }Где .test.alt — имя kerberos области (realm).
host msdfs
в файле /etc/samba/smb.conf
. Корень DFS назначается с помощью логического параметра root msdfs
. Если для этого параметра установлено значение yes
, Samba будет воспринимать открытый для общего доступа ресурс как корневой DFS. Ссылки DFS, указываемые в открытом для доступа каталоге, имеют вид: msdfs:serverA\shareA,serverB\shareB
и т.д. Корневой каталог DFS в Samba содержит ссылки DFS в виде символических ссылок,
/media/dfsroot
):
# mkdir /media/dfsroot
/etc/samba/smb.conf
в секцию [global]
добавить параметр:
host msdfs = yesи добавить секцию
[dfs]
, с указанием корня:
[dfs] path = /media/dfsroot msdfs root = yes
/media/dfsroot
настроить ссылки DFS на общие ресурсы в сети:
#cd /media/dfsroot
#ln -s msdfs:dc1.test.alt\\free linka
#ln -s msdfs:web.test.alt\\tests linkb
# systemctl restart samba
$ smbclient //test.alt/dfs/linka -U 'ivanov'
Password for [TEST\ivanov]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Mon May 22 10:13:28 2023
.. D 0 Mon May 22 10:13:06 2023
dc.txt N 5 Mon May 22 15:57:14 2023
48254668 blocks of size 1024. 40859796 blocks available
smb: \> exit
Примечание
# samba-tool spn add cifs/cifs/<имя_домена> <имя_сервера>$
Например:
# samba-tool spn add cifs/test.alt dc1$
/var/log/sssd/
. Например, для машины в домене AD test.alt, файлы журналов SSSD могут выглядеть следующим образом:
# ls -l /var/log/sssd/
итого 1660
-rw------- 1 _sssd _sssd 0 мая 18 12:55 gpo_child.log
-rw------- 1 _sssd _sssd 0 мая 18 12:55 krb5_child.log
-rw------- 1 _sssd _sssd 0 мая 18 12:54 ldap_child.log
-rw------- 1 root root 261 июн 19 10:10 sssd_ifp.log
-rw------- 1 root root 3955 июн 19 09:34 sssd.log
-rw------- 1 _sssd _sssd 1677605 июн 19 11:18 sssd_nss.log
-rw------- 1 _sssd _sssd 1134 июн 19 09:34 sssd_pac.log
-rw------- 1 _sssd _sssd 3067 июн 19 09:34 sssd_pam.log
-rw------- 1 _sssd _sssd 0 мая 18 12:54 sssd_TEST.ALT.log
krb5_child.log
ldap_child.log
sssd_<domain.name>.log
sssd.conf
служба SSSD записывает информацию о взаимодействии с LDAP-сервером в отдельный файл журнала.
sssd.log
sssd_ifp.log
sssd_nss.log
sssd_pac.log
sssd_pam.log
sssd_ssh.log
Таблица 7.3. Уровни журналирования SSSD
Уровень
|
Описание
|
---|---|
0, 0x0010
|
Фатальные ошибки. Ошибки, которые не позволяют запустить службу SSSD или вызывает завершение работы сервиса.
|
1, 0x0020
|
Критические ошибки. Ошибки, которые не завершают работу службы SSSD, но означает, что как минимум одна из основных функций не работает должным образом.
|
2, 0x0040
|
Серьёзные ошибки. Ошибки, сообщающие о том, что определенный запрос или операция завершились неудачно. Это уровень журналирования по умолчанию.
|
3, 0x0080
|
Незначительные ошибки. Ошибки, которые могут стать причиной ошибок 2-го уровня (ошибок при выполнении действий).
|
4, 0x0100
|
Настройки конфигурации.
|
5, 0x0200
|
Данные функций.
|
6, 0x0400
|
Сообщения трассировки для функций действий.
|
7, 0x1000
|
Сообщения трассировки для функций внутреннего управления.
|
8, 0x2000
|
Содержимое переменных внутренних функций.
|
9, 0x4000
|
Информация трассировки крайне низкого уровня.
|
9, 0x20000
|
Быстродействие и статистические данные. Из-за способа обработки запросов на внутреннем уровне, записанное в журнал время выполнения запроса может быть больше, чем оно было на самом деле.
|
10, 0x10000
|
Информация трассировки libldb ещё более низкого уровня. Практически никогда не требуется.
|
0x0270
.
sssd.conf
debug_level=<целое_число>
в каждую секцию файла /etc/sssd/sssd.conf
. Где значение <целое_число> — число от 0 до 10. Уровни до 3 регистрируют крупные сбои, а уровни начиная с 8 и выше предоставляют большое количество подробных сообщений журнала. Уровень 6 является хорошей отправной точкой для отладки проблем.
/etc/sssd/sssd.conf
:
[sssd] debug_level = 6 config_file_version = 2 services = nss, pam [domain/TEST.ALT] debug_level = 6 id_provider = ad … [nss] debug_level = 6 [pam] debug_level = 6
# systemctl restart sssd
sssctl debug-level <целое_число>
. Где значение <целое_число> — число от 0 до 10. Уровни до 3 регистрируют крупные сбои, а уровни начиная с 8 и выше предоставляют большое количество подробных сообщений журнала. Уровень 6 является хорошей отправной точкой для отладки проблем.
# sssctl debug-level
sssd 0x0070
nss 0x0070
pam 0x0070
pac 0x0070
domain/TEST.ALT 0x0070
#sssctl debug-level 6
#sssctl debug-level
sssd 0x07f0 nss 0x07f0 pam 0x07f0 pac 0x07f0 domain/TEST.ALT 0x07f0
Примечание
sssctl debug-level
будет действовать до перезапуска службы sssd.
Таблица 7.4. Настройки SSSD в Alterator
Настройка
|
Опция в файле
/etc/sssd/sssd.conf
|
Описание
|
Режимы
|
---|---|---|---|
Правила применения групповых политик
|
ad_gpo_access_control
|
Определяет в каком режиме будет осуществляться контроль доступа в SSSD основанный на групповых политиках Active Directory (GPO)
|
|
Игнорировать, если групповые политики не читаются
|
ad_gpo_ignore_unreadable
|
Определяет будут ли проигнорированы правила управления доступом в SSSD основанные на групповых политиках, если недоступен какой-либо шаблон (GPT) объекта групповой политики (GPO)
|
|
Кэшировать учётные данные
|
cache-credentials
|
Определяет, будут ли учётные данные удалённых пользователей сохраняться в локальном кэше SSSD
|
|
Привилегии запуска SSSD
|
control sssd-drop-privileges
|
Позволяет сбросить права службы SSSD, чтобы избежать работы от имени суперпользователя (root)
|
|
Интервал обновления записей DNS
|
dyndns_refresh_interval
|
Определяет как часто серверная часть должна выполнять периодическое обновление DNS в дополнение к автоматическому обновлению, выполняемому при подключении серверной части к сети. Этот параметр применим только в том случае, если для
dyndns_update установлено значение true .
|
|
TTL для клиентской записи DNS
|
dyndns_ttl
|
Срок жизни, применяемый к DNS-записи клиента при ее обновлении. Если
dyndns_update имеет значение false , это не имеет никакого эффекта
|
|
Обновлять IP-адрес машины в DNS
|
dyndns_update
|
Позволяет включить или отключить автоматическое обновление DNS-записей (защищенных с помощью GSS-TSIG) с IP-адресом клиента через SSSD
|
|
Обновлять PTR-запись машины в DNS-записей
|
dyndns_update_ptr
|
Определяет будет ли обновляться клиентская PTR-запись (защищенная с помощью GSS-TSIG) при обновлении DNS-записей клиента. Применимо, только если
dyndns_update имеет значение true .
|
|
cache_credentials
в значение true
в файле /etc/sssd/sssd.conf
.
cache_credentials
в значение true
в разделе домена.
offline_credentials_expiration
в разделе [pam], чтобы установить ограничение по времени (в днях), в течении которого пользователи смогут аутентифицироваться в автономном режиме с момента последнего успешного входа.
[pam] offline_credentials_expiration = 5 [domain/TEST.ALT] cache_credentials = true
Примечание
# apt-get install fuse-gvfs gvfs-backend-smb libgio
# gpasswd -a <пользователь> fuse
# control fusermount public
/var/run/<uid_пользователя>/gvfs
или /var/run/user/<uid_пользователя>/gvfs/smb-share:server=сервер,share=ресурс
.
gio mount smb://server/sysvol/
Примечание
/var/run/uid_пользователя/gvfs
# apt-get install pam_mount cifs-utils
Важно
# apt-get install systemd-settings-enable-kill-user-processes
/etc/pam.d/system-auth
добавить строки:
session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet session optional pam_mount.so disable_interactive
/etc/security/pam_mount.conf.xml
(перед тегом <cifsmount>):
<volume uid="10000-2000200000" fstype="cifs" server="dc1.test.alt" path="sysvol" mountpoint="~/share" options="sec=krb5i,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775" />
~/share
" — путь монтирования в домашней папке пользователя.
sec=krb5i
более безопасный, но требует больше вычислительных ресурсов. Вместо него можно указать sec=krb5
.
Предупреждение
server
необходимо указывать настоящее имя сервера, а не имя домена.
Предупреждение
<volume uid="10000-2000200000" fstype="cifs" server="dc1.test.alt" path="sysvol" mountpoint="~/share" options="sec=krb5i,vers=2.0,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775" />
mount.cifs //dc1.test.alt/sysvol /mnt/ -o vers=2.0,user=ivanov
smbclient
, например:
smbclient -L dc1.test.alt -U ivanov -m SMB2
/mnt/auto/
;
/mnt/auto/server/share/
;
/etc/auto*
. Основной шаблон называется auto.master
, он может указывать на один или несколько других шаблонов для конкретных типов носителей. Пример содержимого файла /etc/auto.master
:
# Format of this file: # mountpoint map options # For details of the format look at autofs(8). /mnt/auto /etc/auto.tab -t 5 /mnt/net /etc/auto.avahi -t 120Первое значение в каждой строке определяет базовый каталог, в который носители будут монтироваться, второе значение — файл конфигурации или скрипт, который будет использован.
Примечание
-t
(--timeout
) устанавливает количество секунд, после истечения которых каталоги будут размонтированы. Значение 0 отключает таймаут. Значения параметра по умолчанию задаются в файле /etc/autofs.conf
.
/etc/auto.master
строку:
/mnt/samba /etc/auto.smb -t 120
/mnt/samba
— каталог в котором будут подключаться сетевые файловые системы, /etc/auto.smb
— стандартный скрипт, входящий в состав пакета autofs, 120 — таймаут подключения при отсутствии обращения.
# systemctl enable --now autofs
$ ls /mnt/samba/<имя_хоста>
или в диспетчере файлов:
# apt-get install kde5-autofs-shares
/etc/auto.master
строку:
/mnt/samba /etc/auto.smb -t 120
/mnt/samba
— каталог в котором будут подключаться сетевые файловые системы, /etc/auto.smb
— скрипт, входящий в состав пакета autofs, 120 — таймаут подключения при отсутствии обращения.
# systemctl enable --now autofs
Примечание
~/.autofs.shares
.
Важно
Таблица 7.5. Рекомендуемые компоненты для администрирования Samba AD
Компонент
|
Описание
|
---|---|
Group Policy Management
|
Предоставляет оснастки для групповой политики: средство управления (GPMC), редактор управления (gpedit) и начальный редактор GPO
|
AD DS Snap-Ins and Command-Line Tools
|
Предоставляет оснастку «Пользователи и компьютеры Active Directory» (ADUC) и «Сайты и службы Active Directory» (ADSS)
|
Server for NIS
|
Добавляет вкладку Атрибуты UNIX в свойства объектов ADUC. Позволяет настраивать атрибуты RFC2307. Эта функция не поддерживается в Windows Server 2016
|
Active Directory Module for Windows PowerShell
|
Включает командлеты Active Directory (AD) PowerShell
|
DNS Server tools
|
Оснастка MMC DNS для удаленного управления DNS
|
Таблица 7.6. Рекомендуемые компоненты для администрирования Samba AD
Компонент
|
Описание
|
---|---|
RSAT: Group Policy Management Tools
|
Включают консоль управления групповыми политиками (gpmc.msc), редактор управления групповыми политиками (gpme.msc) и редактор GPO инициализирующей программы групповой политики (gpedit.msc)
|
RSAT: Active Directory Domain Services and Lightweight Directory Services Tools
|
Предоставляет оснастку «Пользователи и компьютеры Active Directory» (ADUC) и «Сайты и службы Active Directory» (ADSS)
|
RSAT: DNS Server Tools
|
Включает оснастку «Диспетчер DNS» для удаленного управления DNS и программу командной строки
dnscmd.exe
|
RSAT: Remote Desktop Services Tool
|
Добавляет вкладку Профиль служб удаленных рабочих столов в свойства объекта пользователя ADUC и устанавливает оснастку MMC «Удаленные рабочие столы» для администрирования RDP-сервера (tsmmc.msc).
|
Таблица 7.7. Рекомендуемые компоненты для администрирования Samba AD
Компонент
|
Описание
|
---|---|
Group Policy Management Tools (Средства управления групповыми политиками)
|
Включают консоль управления групповыми политиками (gpmc.msc), редактор управления групповыми политиками (gpme.msc) и редактор GPO инициализирующей программы групповой политики (gpedit.msc)
|
AD DS Tools (Оснастки и программы командной строки доменных служб Active Directory)
|
Предоставляет оснастку «Пользователи и компьютеры Active Directory» (ADUC) и «Сайты и службы Active Directory» (ADSS)
|
Server for NIS Tools (Средства сервера для NIS)
|
Средства сервера для сетевых информационных служб добавляет вкладку Атрибуты UNIX (UNIX Attributes) в свойства объектов ADUC. Позволяет настраивать атрибуты RFC2307. Включает программу командной строки
ypclear.exe
|
Active Directory Module for Windows PowerShell (Модуль Active Directory для Windows PowerShell)
|
Обеспечивает централизованную среду для управления службами каталогов
|
DNS Server tools (Средства серверов DNS)
|
Включает оснастку «Диспетчер DNS» для удаленного управления DNS и программу командной строки
dnscmd.exe
|
Remote Desktop Services Tool (Средства служб удалённых рабочих столов)
|
Добавляет вкладку Профиль служб удаленных рабочих столов в свойства объекта пользователя ADUC и устанавливает оснастку MMC «Удаленные рабочие столы» для администрирования RDP-сервера (tsmmc.msc).
|
Таблица 7.8. Основные инструменты командной строки
Утилита
|
Описание
|
---|---|
Основная утилита управления Samba
|
|
Позволяет получить информацию от демона winbindd
|
|
Инструмент администрирования Samba и удаленных серверов CIFS
|
|
Инструмент для выполнения действий в домене Active Directory
|
|
Утилита для поиска информации в LDAP
|
|
Проверка корректности содержимого основного файла конфигурации Samba —
/etc/samba/smb.conf
|
samba-tool
.
Таблица 7.9. Основные команды samba-tool
Команда
|
Описание
|
---|---|
computer
|
Управление учетными записями компьютеров
|
contact
|
Управление контактами
|
dbcheck
|
Проверка локальной базы данных AD на наличие ошибок
|
delegation
|
Управление делегированием
|
dns
|
Управление параметрами доменной службы DNS
|
domain
|
Управление параметрами домена
|
drs
|
Управление службой репликации каталогов (Directory Replication Services, DRS)
|
dsacl
|
Управление списками контроля доступа DS
|
forest
|
Управление конфигурацией леса
|
fsmo
|
Управление ролями (Flexible Single Master Operations, FSMO)
|
gpo
|
Управление групповыми политиками
|
group
|
Управление группами
|
ldapcmp
|
Сравнение двух баз данных ldap
|
ntacl
|
Управление списками контроля доступа ACL
|
processes
|
Вывод списка процессов
|
ou
|
Управление организационными подразделениями (OU)
|
rodc
|
Управление контроллером домена (Read-Only Domain Controller, RODC)
|
schema
|
Управление и запрос схемы
|
sites
|
Управление сайтами
|
spn
|
Управление службой принципалов (Service Principal Name, SPN)
|
testparm
|
Проверка конфигурационного файла на корректность синтаксиса
|
time
|
Получение показаний текущего времени сервера
|
user
|
Управление пользователями
|
visualize
|
Графическое представление состояния сети Samba
|
man samba-tool
).
$ samba-tool fsmo --help
# samba-tool gpo listall
GPO : {31B2F340-016D-11D2-945F-00C04FB984F9}
display name : Default Domain Policy
path : \\test.alt\sysvol\test.alt\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}
dn : CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=test,DC=alt
version : 0
flags : NONE
GPO : {FE6268E4-FDEB-4DCA-94E8-BB1170C66F45}
display name : scripts
path : \\test.alt\sysvol\test.alt\Policies\{FE6268E4-FDEB-4DCA-94E8-BB1170C66F45}
dn : CN={FE6268E4-FDEB-4DCA-94E8-BB1170C66F45},CN=Policies,CN=System,DC=test,DC=alt
version : 65536
flags : NONE
GPO : {6AC1786C-016F-11D2-945F-00C04FB984F9}
display name : Default Domain Controllers Policy
path : \\test.alt\sysvol\test.alt\Policies\{6AC1786C-016F-11D2-945F-00C04FB984F9}
dn : CN={6AC1786C-016F-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=test,DC=alt
version : 0
flags : NONE
GPO : {44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573}
display name : Общие каталоги
path : \\test.alt\sysvol\test.alt\Policies\{44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573}
dn : CN={44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573},CN=Policies,CN=System,DC=test,DC=alt
version : 0
flags : NONE
# samba-tool gpo listcontainers {44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573}
Container(s) using GPO {44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573}
DN: OU=OU,DC=test,DC=alt
DN: OU=KDE,DC=test,DC=alt
# samba-tool gpo getlink OU=OU,DC=test,DC=alt
GPO(s) linked to DN OU=OU,DC=test,DC=alt
GPO : {96D5897A-CEFB-4A1B-90AF-5D83707130C4}
Name : Файлы
Options : NONE
GPO : {A12547D7-2FFA-4E37-9382-D6767489E3DF}
Name : kde
Options : NONE
GPO : {75E65DF7-56A7-48E1-A393-F5FFAA1010FD}
Name : Control_ping
Options : NONE
GPO : {FE6268E4-FDEB-4DCA-94E8-BB1170C66F45}
Name : scripts
Options : NONE
GPO : {44F1A3E9-BD0D-44D7-AC1D-CEEF2817C573}
Name : Общие каталоги
Options : NONE
GPO : {0CCFA74C-57F5-42B5-98E2-007D4A59C4C4}
Name : firefox
Options : NONE
GPO : {2CF4EB19-343E-448A-BBBC-A9EC2F7C22E9}
Name : Установка пакетов
Options : NONE
wbinfo
создает запросы и возвращает информацию к (от) демона winbindd(8).
Таблица 7.10. Параметры команды wbinfo
Параметр
|
Описание
|
Пример
|
---|---|---|
-a|--authenticate username%password
|
Попытаться аутентифицировать пользователя через winbindd(8).
Проверяет два метода аутентификации: plaintext password (применяется при входе пользователя в систему локально), challenge/response password (использует NTLM или Kerberos).
|
$
|
--allocate-gid
|
Получить новый GID из idmap
|
|
--allocate-uid
|
Получить новый UID из idmap
|
|
--all-domains
|
Вывести список всех доменов (доверенных и собственный)
|
$
|
-c|--change-secret
|
Изменить пароль доверительной учетной записи. Может использоваться вместе с доменом для изменения паролей учетных записей междоменного доверия.
|
|
--ccache-save <имя_пользователя>%<пароль>
|
Сохранить имя пользователя и пароль для ccache
|
|
--change-user-password <имя_пользователя>
|
Изменить пароль пользователя (будет запрошен старый и новый пароль)
|
(??)
|
--dc-info <домен>
|
Вывести текущий контроллер домена для домена
|
$
|
--domain <домен>
|
Определяет домен, в котором будут выполняться любые указанные операции
|
|
-D|--domain-info <домен>
|
Показать информацию об указанном домене
|
$
|
--dsgetdcname <домен>
|
Найти DC для домена
|
$
|
--gid-info <gid>
|
Получить информацию о группе по gid
|
$
|
--group-info <группа>
|
Получить информацию о группе по имени группы
|
$
|
-g|--domain-groups
|
Вывести список доменных групп
|
$
|
--get-auth-user
|
Эта функция была перенесена в утилиту
net (см. net help getauthuser )
|
|
--getdcname <домен>
|
Вывести имя контроллера домена для указанного домена
|
$
|
-G|--gid-to-sid <gid>
|
Преобразовать идентификатор группы UNIX в SID Windows NT. Если указанный gid не относится к диапазону gid idmap, операция завершится ошибкой.
|
$
|
-i|--user-info <имя_пользователя>
|
Вывести информацию о пользователе
|
$
|
-I|--WINS-by-ip ip
|
Вывести NetBIOS-имя, связанное с IP-адресом
|
$
|
-K|--krb5auth <имя_пользователя>%<пароль>
|
Попытаться аутентифицировать пользователя через Kerberos
|
$
|
--krb5ccname KRB5CCNAME
|
Запросить определенный тип кэша учетных данных Kerberos, используемый для аутентификации
|
|
--lanman
|
Использовать криптографию Lanman для аутентификации пользователей
|
|
--logoff
|
Выйти из системы
|
|
--logoff-uid UID
|
Определяет идентификатор пользователя, используемый во время запроса на выход из системы
|
|
--logoff-user <имя_пользователя>
|
Определяет имя пользователя, используемое во время запроса на выход из системы
|
|
--lookup-sids SID1,SID2...
|
Поиск SID
|
$
|
-m|--trusted-domains
|
Вывести список доверенных доменов
|
$
|
-n|--name-to-sid <имя>
|
Вывести SID, связанный с указанным именем. Если домен не указан, используется домен, указанный в параметре
workgroup smb.conf
|
$
|
-N|--WINS-by-name <name>
|
Вывести IP-адрес, связанный с именем NetBIOS, указанным в параметре name
|
$
|
--ntlmv1
|
Использовать криптографию NTLMv1 для аутентификации пользователей
|
|
--ntlmv2
|
Использовать криптографию NTLMv2 для аутентификации пользователей
|
|
--online-status <домен>
|
Показать, поддерживает ли winbind в настоящее время активное соединение или нет. Если домен не указан, будет выведен статус текущего домена
|
$
|
--own-domain
|
Вывести собственный домен
|
$
|
--pam-logon <имя_пользователя>%<пароль>
|
Попытаться аутентифицировать пользователя так же, как это сделал бы pam_winbind
|
$
|
-p|--ping
|
Проверяет запущен ли winbindd(8)
|
$
|
-P|--ping-dc
|
Проверить безопасное соединение с контроллером домена
|
$
|
-r|--user-groups <имя_пользователя>
|
Получить список идентификаторов групп, к которым принадлежит пользователь. Доступно только при наличии пользователя на контроллере домена
|
$
|
-R|--lookup-rids rid1, rid2, rid3..
|
Преобразовать RID в имена
|
|
--remove-gid-mapping GID,SID
|
Удалить существующее сопоставление GID и SID из базы данных
|
|
--remove-uid-mapping UID,SID
|
Удалить существующее сопоставление UID и SID из базы данных
|
|
-s|--sid-to-name sid
|
Преобразовать SID в имя
|
$
|
--separator
|
Вывести активный разделитель winbind
|
$
|
--sequence
|
Команда устарела, вместо неё следует использовать параметр
--online-status
|
|
--set-auth-user <имя_пользователя>%<пароль>
|
Эта функция была перенесена в утилиту
net (см. net help setauthuser )
|
|
--set-gid-mapping GID,SID
|
Создать сопоставление GID и SID в базе данных
|
|
--set-uid-mapping UID,SID
|
Создать сопоставление UID и SID в базе данных
|
|
-S|--sid-to-uid sid
|
Преобразовать SID в идентификатор пользователя
|
$
|
--sid-aliases sid
|
Получить псевдонимы SID для заданного SID
|
|
--sid-to-fullname sid
|
Преобразовать SID в полное имя пользователя (ДОМЕН\имя пользователя)
|
$
|
--sids-to-unix-ids sid1,sid2,sid3...
|
Преобразовать SID в Unix ID
|
$
|
-t|--check-secret
|
Проверить, что доверительная учетная запись рабочей станции, созданная при добавлении сервера Samba в домен Windows NT, работает. Может использоваться вместе с доменом для проверки учетных записей междоменного доверия
|
|
-u|--domain-users
|
Вывести список доменных пользователей
|
$
|
--uid-info uid
|
Получить информацию о пользователе по идентификатору
|
$
|
--usage
|
Вывести краткую справку о программе
|
|
--user-domgroups sid
|
Вывести группы пользователей домена
|
$
|
--user-sidinfo sid
|
Получить информацию о пользователе по sid
|
$
|
--user-sids sid
|
Получить SID групп пользователя
|
$
|
-U|--uid-to-sid uid
|
Преобразовать идентификатор пользователя UNIX в SID
|
$
|
-Y|--sid-to-gid sid
|
Преобразовать SID в идентификатор группы UNIX
|
$
|
net
— инструмент администрирования Samba и удаленных серверов CIFS. Синтаксис:
net <протокол> <функция> <дополнительные_параметры> <параметры_цели>где <протокол> — протокол, используемый при выполнении команды. Возможные значения: ads (Active Directory),rap (Win9x/NT3) или rpc (WindowsNT4/2000/2003/2008/2012). Если протокол не указан,
net
пытается определить его автоматически.
Таблица 7.11. Основные команды net ads
Команда
|
Описание
|
---|---|
info
|
Вывод информации о домене
|
join
|
Присоединение машины к домену
|
testjoin
|
Проверка, действителен ли пароль учетной записи компьютера
|
leave
|
Удалить локальную машину из домена AD
|
status
|
Вывод информации об учетной записи компьютера
|
user
|
Список/изменение пользователей
|
group
|
Список/изменение групп
|
dns
|
Выполнить динамическое обновление DNS
|
password
|
Изменить пароль пользователей
|
changetrustpw
|
Изменить пароль доверительной учетной записи
|
printer
|
Список/изменение записей принтера
|
search
|
Выполнить поиск LDAP с использованием фильтра
|
dn
|
Выполнить поиск LDAP по DN
|
sid
|
Выполнить поиск LDAP по SID
|
workgroup
|
Показать имя рабочей группы
|
lookup
|
Найти контроллер домена AD с помощью поиска CLDAP
|
keytab
|
Управление локальным файлом keytab
|
spnset
|
Управление именами участников-служб (SPN)
|
gpo
|
Управление объектами групповой политики
|
kerberos
|
Управление keytab Kerberos
|
enctypes
|
Список/изменение enctypes
|
man net
).
# net time --help
# net ads info
LDAP server: 192.168.0.122
LDAP server name: dc1.test.alt
Realm: TEST.ALT
Bind Path: dc=TEST,dc=ALT
LDAP port: 389
Server time: Ср, 27 мар 2024 10:36:51 EET
KDC server: 192.168.0.122
Server time offset: 2
Last machine account password change: Ср, 20 мар 2024 11:13:27 EET
# net ads status -U administrator
adcli
— инструмент для выполнения действий в домене Active Directory.
Таблица 7.12. Основные команды adcli
Команда
|
Описание
|
---|---|
info домен
|
Вывести информацию о домене
|
join домен
|
Присоединить данную машину к домену (создает учетную запись компьютера в домене и настраивает keytab для этой машины. Не настраивает службу аутентификации, например, sssd)
|
update
|
Обновляет пароль учетной записи компьютера на контроллере домена для локальной машины, записывает новые ключи в keytab и удаляет старые ключи
|
testjoin
|
Проверить, действителен ли пароль учетной записи компьютера
|
create-user [--domain=домен] пользователь
|
Создать учетную запись пользователя
|
delete-user [--domain=домен] пользователь
|
Удалить учетную запись пользователя
|
passwd-user [--domain=домен] пользователь
|
Установить (повторно) пароль пользователя
|
create-group [--domain=домен] группа
|
Создать группу
|
delete-group [--domain=домен] группа
|
Удалить группу
|
add-member [--domain=домен] группа пользователь или компьютер…
|
Добавить пользователей в группу
|
remove-member [--domain=домен] группа пользователь…
|
Удалить пользователей из группы
|
preset-computer [--domain=домен] компьютер…
|
Предустановить учетные записи компьютеров (предварительно создает одну или несколько учетных записей компьютеров в домене, чтобы позже компьютеры могли использовать их при присоединении к домену. При этом, машины могут присоединяться с помощью одноразового пароля или автоматически без пароля)
|
reset-computer [--domain=домен] компьютер
|
Сбросить учетную запись компьютера (если соответствующая машина присоединена к домену, её членство будет нарушено)
|
delete-computer [--domain=домен] компьютер
|
Удалить учетную запись компьютера
|
show-computer [--domain=домен] компьютер
|
Показать атрибуты учетной записи компьютера, хранящиеся в AD
|
create-msa [--domain=домен]
|
Создать управляемую учетную запись службы (MSA) в заданном домене AD (это бывает нужно, если компьютер не должен присоединяться к домену Active Directory, но к нему необходим LDAP доступ)
|
man adcli
).
# adcli testjoin --help
# adcli info test.alt
[domain]
domain-name = test.alt
domain-short = TEST
domain-forest = test.alt
domain-controller = dc1.test.alt
domain-controller-site = Default-First-Site-Name
domain-controller-flags = pdc gc ldap ds kdc timeserv closest writable good-timeserv full-secret
domain-controller-usable = yes
domain-controllers = dc1.test.alt dc2.test.alt
[computer]
computer-site = Default-First-Site-Name
# adcli show-computer -D test.alt win2012
Password for Administrator@TEST.ALT:
sAMAccountName:
WIN2012$
userPrincipalName:
- not set -
msDS-KeyVersionNumber:
1
msDS-supportedEncryptionTypes:
28
dNSHostName:
win2012.test.alt
servicePrincipalName:
HOST/win2012.test.alt
RestrictedKrbHost/win2012.test.alt
HOST/WIN2012
RestrictedKrbHost/WIN2012
Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/win2012.test.alt
operatingSystem:
Windows Server 2012 R2 Standard
operatingSystemVersion:
6.3 (9600)
operatingSystemServicePack:
- not set -
pwdLastSet:
133294743593838200
userAccountControl:
4096
description:
- not set -
# adcli create-group -D test.alt -O OU=OU,dc=test,dc=alt testldap
Password for Administrator@TEST.ALT:
ldapsearch
— утилита для поиска информации в LDAP. Синтаксис:
ldapsearch <параметры> <фильтр> <атрибуты>
ldapsearch
открывает соединение с сервером LDAP, подключается к нему и выполняет поиск с помощью фильтра.
ldapsearch
найдет одну или несколько записей, то значения указанных атрибутов этих записей будут переданы в стандартный поток вывода. Если в этом списке указан знак *, возвращаются все пользовательские атрибуты. Если в этом списке указан знак +, возвращаются все операционные атрибуты. Если атрибуты не указаны, то возвращаются все пользовательские атрибуты.
ldapsearch
найдет одну или несколько записей, то значения указанных атрибутов этих записей будут переданы в стандартный поток вывода. Если атрибуты не указаны, то возвращаются все атрибуты.
-L
.
Таблица 7.13. Параметры команды ldapsearch
Параметр
|
Описание
|
---|---|
Параметры поиска
|
|
-a {never|always|search|find}
|
Задает способ преобразования псевдонимов. Может принимать значения: never (по умолчанию), always, search или find, указывающие, соответственно, что псевдонимы не преобразуются, преобразуются всегда, преобразуются при поиске, либо преобразуются только при определении базового объекта для поиска
|
-A
|
Получить только атрибуты (без значений)
|
-b basedn
|
Позволяет переопределить заданную по умолчанию начальную точку поиска
|
-c
|
Режим продолжения операции (не останавливать поиск при ошибках)
|
-E [!]ext[=extparam]
|
Указывает расширения поиска. Знак '!' обозначает критичность расширения.
Общие расширения:
|
-f file
|
Считать серию строк из файла
file и выполнить по одному поиску LDAP для каждой строки. В этом случае заданный в командной строке фильтр filter интерпретируется как шаблон, в котором первое и только первое вхождение %s заменяется строкой из файла file . Любые другие вхождения символа % в шаблоне будут рассматриваться как ошибка. Если требуется, чтобы в поисковом фильтре присутствовал символ %, он должен быть закодирован как \25 (смотрите RFC 4515). Если в качестве значения file указан символ «-», то строки считываются со стандартного ввода.
|
-F prefix
|
URL-префикс для временных файлов (по умолчанию: file://path, где
path либо /tmp/.private/<user> , либо значение, указанное в параметре -T )
|
-l limit
|
Ограничение на время поиска (в секундах). Значение 0 (ноль) или none означает, что ограничений нет. Значение max означает максимальное допустимое протоколом значение (целое число)
|
-L[LL]
|
Управление выводом результатов поиска в формате обмена данными LDAP (LDAP Data Interchange Format):
-L — вывести ответы в формате LDIFv1, -LL — отключить вывод комментариев, -LLL — отключить вывод версии LDIF.
|
-M[M]
|
Включить элемент управления Manage DSA IT.
-MM делает этот элемент управления критичным.
|
-P {2|3}
|
Версия протокола LDAP (по умолчанию 3)
|
-s {base|one|sub|children}
|
Задает область поиска. Может принимать одно из следующих значений: base, one, sub (по умолчанию) или children, что означает поиск только по базовому объекту, на одном уровне, по всему поддереву и по дочерним записям соответственно
|
-S attr
|
Отсортировать возвращаемые записи по атрибуту
attr . По умолчанию возвращаемые записи не сортируются. Если в качестве attr задана строка нулевой длины (""), записи сортируются по компонентам их уникального имени Distinguished Name. По умолчанию ldapsearch выводит записи по мере их получения. При использовании параметра -S все данные сначала получаются, потом сортируются, потом выводятся.
|
-t[t]
|
При указании одного
-t полученные непечатаемые значения записываются в набор временных файлов (полезно при работе со значениями, содержащими несимвольные данные, такими как jpegPhoto или audio). При указании второго -t все полученные значения записываются в файлы.
|
-T path
|
Временные файлы записываются в указанный в
path каталог (по умолчанию /tmp/.private/<user> )
|
-u
|
Включить в вывод форму удобного для пользователя имени (User Friendly Name, UFN) уникального имени (Distinguished Name, DN)
|
-z limit
|
Ограничить количество возвращаемых в результате поиска записей значением
limit . Значение 0 (ноль) или none означает, что ограничений нет. Значение max означает максимальное допустимое протоколом значение (целое число).
|
Общие параметры
|
|
-d debuglevel
|
Установить уровень отладки LDAP
|
-D binddn
|
Использовать указанное в
binddn уникальное имя Distinguished Name при подсоединении к каталогу LDAP. При SASL-подсоединениях сервер будет игнорировать это значение.
|
-e [!]ext[=extparam]
|
Указывает общие расширения. Знак '!' обозначает критичность расширения.
Общие расширения:
|
-h host
|
Сервер LDAP
|
-H URI
|
Указывает URI (возможно, несколько), ссылающийся на LDAP-сервер (серверы). В URI допускаются поля: протокол/хост/порт.
|
-I
|
Использовать интерактивный режим SASL.
|
-n
|
Демонстрируется, что будет сделано, но реальный поиск не выполняется. Используется для отладки совместно с параметром
-v
|
-N
|
Не использовать обратное разрешение DNS для получения канонического имени хоста SASL.
|
-O props
|
Параметры безопасности SASL
|
-o opt[=optparam]
|
Указывает опции общего назначения.
Возможные опции:
|
-p порт
|
Порт, на котором сервер LDAP принимает запросы. Номер порта по умолчанию — 389. Если номер порта не задан, и указан параметр
-Z , то применяется номер порта LDAP SSL по умолчанию, равный 636.
|
-Q
|
Использовать тихий режим SASL. Запросы не выводятся никогда.
|
-R realm
|
Задаёт realm аутентификационного идентификатора для SASL. Форма realm зависит от того, какой механизм аутентификации в действительности используется.
|
-U authcid
|
Идентификатор аутентификации SASL. Форма идентификатора зависит от того, какой механизм аутентификации в действительности используется.
|
-v
|
Запустить в подробном режиме (диагностические сообщения посылаются в стандартный вывод)
|
-V[V]
|
Вывести информацию о версии. При указании
-VV , после вывода информации о версии осуществляется выход. При указании -V , после вывода информации о версии выполняется поиск согласно заданным критериям.
|
-w passwd
|
Использовать указанное значение
passwd в качестве пароля для простой аутентификации.
|
-W
|
Запрашивать ввод пароля для простой аутентификации (используется для того, чтобы не указывать пароль в командной строке).
|
-x
|
Использовать простую аутентификацию
|
-X authzid
|
Идентификатор авторизации SASL ("dn:<dn>" или "u:<user>")
|
-y file
|
Считать пароль из файла
file .
В качестве пароля используется всё содержимое файла. Поэтому файл не должен содержать символа переноса строки.
|
-Y mech
|
Задаёт механизм SASL, который будет использоваться для аутентификации. Если параметр не указан, программа выберет лучший из известных серверу механизмов.
|
-Z[Z]
|
Запустить запрос TLS (
-ZZ для запроса успешного ответа)
|
<Атрибут><оператор сравнения><значение>Вместо имени атрибута можно использовать его идентификатор (Attribute-Id). Тело фильтра должно быть заключено в скобки.
Таблица 7.14. Примеры LDAP-фильтров
Запрос
|
LDAP фильтр
|
---|---|
Все пользователи:
|
(sAMAccountType=805306368)
|
Отключенные (Disabled) пользователи:
|
(&(sAMAccountType=805306368)(useraccountcontrol:1.2.840.113556.1.4.803:=2))
|
Заблокированные (Locked) пользователи:
|
(&(sAMAccountType=805306368)(badPwdCount>=4))
|
Пользователи, у которых в настройках указано «Пароль никогда не истекает»
|
(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))
|
Пользователи которые не меняли пароль с 5 мая 2023 года (см. https://www.epochconverter.com/ldap для преобразования даты во временную метку Windows)
|
(&(objectCategory=person)(pwdLastSet<=133278047990000000))
|
Пользователи с незаполненным полем mail
|
(&(objectCategory=group)(!(mail=*)))
|
Пользователи, которые должны сменить пароль при следующем входе в систему
|
(&(sAMAccountType=805306368)(pwdLastSet=0))
|
Пользователи с ограниченным сроком действия учетной записи
|
(&(sAMAccountType=805306368)(accountExpires>=1)(accountExpires<=9223372036854775806))
|
Пользователи, созданные за определенный период (формат даты: YYYY MM DD HH mm ss.s Z)
|
(&(sAMAccountType=805306368)(whenCreated>=20230401000000.0Z<=20230701000000.0Z))
|
Все компьютеры
|
(objectCategory=computer)
|
Все контроллеры домена
|
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
|
Контроллеры домена, доступные только для чтения
|
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=67108864))
|
Группы в которых нет пользователей
|
(&(objectCategory=group)(!(member=*)))
|
Группы с ключевым словом admin в имени
|
(&(objectCategory=group)(samaccountname=*admin*))
|
Все группы безопасности (Security)
|
(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))
|
Все члены группы Sales (без учёта вложенности)
|
(memberOf=CN=Sales,CN=Users,DC=test,DC=alt)
|
Все члены группы Sales (с учётом вложенности)
|
(memberOf:1.2.840.113556.1.4.1941:=CN=Sales,CN=Users,DC=test,DC=alt)
|
Все группы, в которые входит пользователь testldap
|
(&(objectCategory=group)(member=CN=testldap,CN=Users,DC=test,DC=alt)))
|
Все подразделения (OU)
|
(objectCategory=organizationalUnit)
|
Все объекты групповой политики
|
(objectCategory=groupPolicyContainer)
|
Все отношения доверия
|
(objectClass=trustedDomain)
|
Объекты связанные с ролями FSMO
|
(fsMORoleOwner=*)
|
PDC Emulator
|
(&(objectClass=domainDNS)(fSMORoleOwner=*))
|
RID Master
|
(&(objectClass=rIDManager)(fSMORoleOwner=*))
|
Объект AD с определенным SID
|
(objectSID=S-1-5-21-1723588197-2340999690-1379671080-1105)
|
Отличительное имя (DN) имя_атрибута: значение имя_атрибута: значение имя_атрибута: значение …Записи разделяются пустыми строками.
-t
вместо реальных значений атрибутов будут выводиться URI временных файлов, в которые эти значения помещаются. Если задан параметр -A
будут выводиться только имена атрибутов.
Примечание
имя_атрибута:: base64_значение_атрибутаНапример:
dn:: Q0490JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsCxDTj1Vc2VycyxEQz10ZXN0LERDPWFsdA==
cn:: 0JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsA==
…
$ echo "0JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsA==" | base64 -d
Зайцева Ольга
$ ldapsearch
-LLL -D testldap@test.alt -x -W | perl -MMIME::Base64 -MEncode=decode -n -00 -e 's/\n
+//g;s/(?<=:: )(\S+)/decode("UTF-8",decode_base64($1))/eg;print'
$ ldapsearch
-LLL -H ldap://192.168.0.122:389 \
-D testldap@test.alt -b "dc=test,dc=alt" \
-x -W "(&(sAMAccountName=*)(sn=К*))" cn sn
где:
-H ldap://192.168.0.122:389
— сервер LDAP;
-D testldap@test.alt
— пользователь с правом чтения в каталоге LDAP;
-b "dc=test,dc=alt"
— контейнер AD, в котором будет выполняться поиск;
-x
— использовать простую аутентификацию;
-W
— спросить пароль;
"(&(sAMAccountName=*)(sn=К*))"
— выражение, по которому будут отфильтрованы результаты;
cn sn
— поля, которые необходимо вывести;
/etc/openldap/ldap.conf
, например:
BASE dc=test,dc=alt URI ldap://dc1.test.altКоманда с использованием базы поиска и URI по умолчанию:
$ ldapsearch
-LLL -D testldap@test.alt \
-x -W "(&(sAMAccountName=*)(sn=К*))" cn sn
$ ldapsearch
-LLL -H ldap://192.168.0.122:389 \
-D testldap@test.alt -b "ou=OU,dc=test,dc=alt" -s one \
-x -W "(&(sAMAccountName=*)(mail=К*))" sn mail
В данном примере не будут выведены записи только из подразделения OU, но не из его дочерних подразделений.
new.filter
и выполнить функцию поиска LDAP для каждой строки:
$ ldapsearch -H ldap://192.168.0.122:389 \ -D testldap@test.alt -b "dc=test,dc=alt" -x -W -f new.filter "(samaccountname=%s)" cn
Содержимое файла new.filter
:
z* ivanov k* *kКоманда выполняет поиск по поддереву для каждого фильтра, начиная с samaccountname=z*. Когда этот поиск завершается, начинается поиск для фильтра cn=ivanov и т.д. Пример вывода вышеуказанной команды с параметром
-n
:
LDAPv3 # base <dc=test,dc=alt> with scope subtree # filter pattern: (samaccountname=%s) # requesting: dn # # # filter: (samaccountname=z*) # # # filter: (samaccountname=ivanov) # # # filter: (samaccountname=k*) # # # filter: (samaccountname=*k) #
sssctl
— это инструмент командной строки, который предоставляет унифицированный способ получения информации о состоянии Security System Services Daemon (SSSD).
sssctl
можно использовать для сбора информации:
sssctl
можно:
Таблица 7.15. Основные команды sssctl
Команда
|
Описание
|
---|---|
Статус SSSD
|
|
domain-list
|
Вывести список доступных доменов
|
domain-status домен
|
Вывести информацию о домене
|
user-checks пользователь
|
Вывести информацию о пользователе и проверить аутентификацию
|
access-report домен
|
Создание отчёта о правилах управления доступом для домена, которые применяются к клиентскому компьютеру (работает только для домена FreeIPA)
|
Информация о кэшированном содержимом
|
|
user-show пользователь
|
Информация о кэше пользователя
|
group-show группа
|
Информация о кэше группы
|
netgroup-show группа
|
Информация о кэше сетевой группы
|
Инструменты для работы с локальными данными
|
|
client-data-backup
|
Резервное копирование локальных данных
|
client-data-restore
|
Восстановление локальных данных из резервной копии
|
cache-remove
|
Резервное копирование локальных данных и удаление кэшированного содержимого
|
cache-upgrade
|
Выполнить обновление кеша
|
cache-expire
|
Сделать недействительными кешированные объекты
|
cache-index действие
|
Управление индексами кеша
|
Инструменты для управления журналированием
|
|
logs-remove
|
Удалить существующие файлы журналов SSSD
|
logs-fetch файл
|
Архивировать файлы журналов SSSD в tarball
|
debug-level [уровень]
|
Изменить или вывести уровень журналирования SSSD
|
analyze
|
Анализ зарегистрированных данных
|
Инструменты для проверки файлов конфигурации
|
|
config-check
|
Выполнить статический анализ конфигурации SSSD
|
Инструменты, связанные с сертификатом
|
|
cert-show сертификат
|
Вывести информацию о сертификате
|
cert-map сертификат
|
Показать пользователей, привязанных к сертификату
|
man sssctl
).
# sssctl user-show --usage
или
# sssctl user-show --help
# sssctl domain-status TEST.ALT
Online status: Online
Active servers:
AD Global Catalog: dc1.test.alt
AD Domain Controller: dc1.test.alt
Discovered AD Global Catalog servers:
- dc1.test.alt
Discovered AD Domain Controller servers:
- dc1.test.alt
# sssctl user-show kim
Name: kim
Cache entry creation date: 12/28/22 13:39:46
Cache entry last update time: 06/19/23 09:55:29
Cache entry expiration time: Expired
Initgroups expiration time: Expired
Cached in InfoPipe: No
# sssctl user-checks kim
user: kim
action: acct
service: system-auth
SSSD nss user lookup result:
- user name: kim
- user id: 1187401107
- group id: 1187400513
- gecos: Олег Ким
- home directory: /home/TEST.ALT/kim
- shell: /bin/bash
SSSD InfoPipe user lookup result:
- name: kim
- uidNumber: 1187401107
- gidNumber: 1187400513
- gecos: Олег Ким
- homeDirectory: not set
- loginShell: not set
testing pam_acct_mgmt
pam_acct_mgmt: Success
PAM Environment:
- no env -
testparm
можно проверить содержимое файла конфигурации /etc/samba/smb.conf
.
$ testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_ACTIVE_DIRECTORY_DC
Press enter to see a dump of your service definitions
# Global parameters
[global]
dns forwarder = 8.8.8.8
ldap server require strong auth = No
passdb backend = samba_dsdb
realm = TEST.ALT
server role = active directory domain controller
workgroup = TEST
rpc_server:tcpip = no
rpc_daemon:spoolssd = embedded
rpc_server:spoolss = embedded
rpc_server:winreg = embedded
rpc_server:ntsvcs = embedded
rpc_server:eventlog = embedded
rpc_server:srvsvc = embedded
rpc_server:svcctl = embedded
rpc_server:default = external
winbindd:use external pipes = true
idmap_ldb:use rfc2307 = yes
idmap config * : backend = tdb
map archive = No
vfs objects = dfs_samba4 acl_xattr
[dfs]
msdfs root = Yes
path = /media/dfsroot
[sysvol]
path = /var/lib/samba/sysvol
read only = No
[netlogon]
path = /var/lib/samba/sysvol/test.alt/scripts
read only = No
[free]
guest ok = Yes
path = /mnt/win/free
read only = N
/etc/samba/smb.conf
— файл конфигурации Samba.
/etc/krb5.conf
— файл конфигурации Kerberos.
/etc/sssd/sssd.conf
— файл конфигурации SSSD.
/etc/sssd/sssd.conf
) для sssd-ad:
[sssd] config_file_version = 2 services = nss, pam # Managed by system facility command: ## control sssd-drop-privileges unprivileged|privileged|default user = _sssd # SSSD will not start if you do not configure any domains. domains = TEST.ALT [nss] [pam] [domain/TEST.ALT] id_provider = ad auth_provider = ad chpass_provider = ad access_provider = ad default_shell = /bin/bash fallback_homedir = /home/%d/%u debug_level = 0 ;cache_credentials = true ad_gpo_ignore_unreadable = true ad_gpo_access_control = permissive ad_update_samba_machine_account_password = true
man sssd.conf
).
/etc/resolv.conf
— файл конфигурации ресолвера (механизма преобразования имен хостов в адреса IP).
/etc/resolv.conf
указан как минимум 1 сервер имен, на который будут перенаправляться все DNS запросы:
# Generated by resolvconf # Do not edit manually, use # /etc/net/ifaces/<interface>/resolv.conf instead. nameserver 192.168.197.241
Важно
/etc/resolv.conf
не должен редактироваться. Его автоматически генерирует resolvconf
. Редактировать можно файл /etc/net/ifaces/<interface>/resolv.conf
MAXNS
(в настоящее время 3) серверов имён, ключевое слово должно быть указано для каждого сервера. Если указано несколько серверов, библиотека распознавателя запрашивает их в указанном порядке. Если в файле нет строк nameserver
, по умолчанию используется сервер имён на локальном компьютере. Используемый алгоритм заключается в том, чтобы попробовать обратиться к первому указанному серверу имён, и, если время ожидания запроса истекло, попробовать обратиться к следующему серверу, и т.д. пока не будет исчерпан список серверов, а затем повторять попытки, пока не будет сделано максимальное количество повторных попыток.
options параметр …где
параметр
может иметь следующие значения: resolver(3)
).
gethostbyname(3)
, и отображению ответов IPv4 в «туннелированной форме» IPv6, если записи AAAA не были найдены, но существует набор записей A. Начиная с glibc 2.25, эта опция устарела; приложения должны использовать getaddrinfo(3)
, а не gethostbyname(3)
.
resolver(3)
), прежде чем будет сделан первоначальный абсолютный запрос. По умолчанию n
равно 1, поэтому если в имени есть точки, сначала имя пытаются разрешить как абсолютное, прежде чем добавлять к нему элементы из списка поиска. Значение этой опции скрыто ограничено числом 15.
trust-ad
, тупиковый распознаватель устанавливает бит AD в исходящих DNS-запросах (чтобы включить поддержку бита AD) и сохраняет бит AD в ответах. Без этой опции бит AD в запросах не устанавливается и всегда удаляется из ответов, прежде чем они будут возвращены приложению. Это означает, что приложения могут доверять биту AD в ответах, если параметр trust-ad
установлен правильно.
gethostname(2)
; локальным доменным именем считается всё, что следует после первого знака «.». Если имя хоста не содержит «.», предполагается, что корневой домен является именем локального домена.
search
через пробел или символ табуляции. При разрешении запросов имён, в которых меньше точек чем указано в ndots
(по умолчанию 1), будет использован каждый компонент пути поиска пока не будет найдено соответствующее имя. Для сред с несколькими субдоменами см. параметры ndots:n
, чтобы избежать атак типа «человек посередине» и ненужного трафика для корневых DNS-серверов. Обратите внимание, что этот процесс может быть медленным и будет генерировать много сетевого трафика, если серверы для перечисленных доменов не являются локальными, и что время ожидания запросов истечет, если сервер для одного из доменов недоступен.
search
используется только список поиска из последнего экземпляра.
domain
— это устаревшее название директивы search
, которая обрабатывает только одну запись в списке поиска.
gethostbyname(3)
. Список сортировки задается в виде пар IP-адрес/сетевая маска. Маску сети указывать не обязательно, по умолчанию используется естественная маска сети. IP-адрес и маска сети разделяются косой чертой. В списке можно указывать до 10 пар. Пример:
sortlist 130.155.160.0/255.255.240.0 130.155.0.0
search
системного файла resolv.conf
можно переопределить для каждого процесса, задав для переменной среды LOCALDOMAIN список доменов поиска, разделенных пробелами.
options
системного файла resolv.conf
можно переопределить для каждого процесса, задав для переменной среды RES_OPTIONS список параметров преобразователя, разделенных пробелами.
/etc/resolv.conf
, обязательно будут перезаписаны при изменениях в сети или перезагрузке системы.
nameserver
). Значение следует за ключевым словом, разделенным пробелом.
/etc/resolv.conf
, чтобы внести изменения в DNS:
# resolvconf -u
/etc/resolv.conf
:
search test.alt example.test nameserver 192.168.0.122 nameserver 8.8.8.8
ndots
(см. описание параметров выше).
# ssh-keygen -t ed25519
На вопрос о файле для сохранения ключа нажать Enter (по умолчанию). На вопрос о пароле к ключу также нажать Enter (не указывать пароль)
# ssh-copy-id -i ~/.ssh/id_ed25519.pub user@dc2.test.alt
#ssh user@dc2.test.alt
[user@dc2 ~]$su -
Password: [root@dc2 ~]#cat /home/user/.ssh/authorized_keys >>.ssh/authorized_keys
[root@dc2 ~]#exit
выход [user@dc2 ~]$exit
выход Connection to dc2 closed.
acc
.
# apt-get install alterator-fbi
И запущены сервисы ahttpd
и alteratord
:
#systemctl enable --now ahttpd
#systemctl enable --now alteratord
https://ip-адрес:8080/
.
rpm -qa | grep alterator*
Прочие пакеты для ЦУС можно найти, выполнив команду:
apt-cache search alterator*
#apt-get install alterator-net-openvpn
#apt-get remove alterator-net-openvpn