Редакция ноябрь, 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 от контроллера домена к контроллеру домена и от клиента к контроллеру домена. Может быть предоставлен внутренним DNS-сервером Samba или DNS-сервером Bind9
|
Kerberos
|
88
|
TCP и UDP
|
Для аутентификации Kerberos
|
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 для установки и смены пароля Kerberos
|
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, необходимо задать требуемый диапазон в параметре
rpc server port в файле smb.conf . Подробности см. в описании параметра на справочной странице man smb.conf .
|
Примечание
SAMBA_INTERNAL
— встроенный сервер имен:
SAMBA_INTERNAL
не поддерживает следующий функционал:
BIND9_DLZ
— использует Samba AD для хранения информации о зоне:
Примечание
Важно
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 — использует Samba 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 chrony
# control chrony server
# sed -i -r 's/^(pool.*)/#\1\npool ru.pool.ntp.org iburst/' /etc/chrony.conf
или указать серверы NTP в директиве server или pool в файле конфигурации NTP /etc/chrony.conf
:
pool pool.ntp.org iburst
Примечание
iburst
используется для ускорения начальной синхронизации.
chronyd
:
# systemctl enable --now chronyd
# systemctl status chronyd.service
#Например:hostnamectl set-hostname <имя узла>
#domainname <имя домена>
#hostnamectl set-hostname dc1.test.alt
#domainname test.alt
Примечание
/etc/sysconfig/network
:
HOSTNAME=dc1.test.altВо все остальных случаях параметр HOSTNAME игнорируется.
Примечание
# 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/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=forwarder_ip_address
— внешний 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
приведены в в табл. Основные опции для samba-tool domain provision. Полный список параметров можно увидеть, запустив команду:
# 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
на бэкенде SAMBA_INTERNAL работает только с одним адресом).
# apt-get install bind bind-utils
Примечание
named-checkconf
— проверка синтаксиса файлов конфигурации;
named-checkzone
— проверка файлов зон DNS;
rndc
— инструмент управления службой DNS.
dig
— многофункциональный инструмент для опроса DNS-серверов;
host
— позволяет получить информацию о DNS-связях между доменными именами и IP-адресами;
nslookup
— позволяет получить информацию DNS об удаленном сервере;
nsupdate
— инструмент для динамического обновления записей DNS.
Примечание
named.conf(5)
.
# 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.122; }; 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
приведены в в табл. Основные опции для samba-tool domain provision. Полный список параметров можно увидеть, запустив команду:
# 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.6)
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 join <dnsdomain> [DC|RODC|MEMBER] [options]
samba-tool domain join
:
--realm REALM_NAME
— имя области Kerberos (LDAP), и DNS имя домена;
--dns-backend=NAMESERVER-BACKEND
— бэкенд DNS-сервера: SAMBA_INTERNAL — встроенный сервер имен (по умолчанию), BIND9_DLZ — использует Samba AD для хранения информации о зоне, NONE — полностью пропускает настройку DNS (этот DC не будет DNS-сервером);
Примечание
Примечание
dns forwarder
, чтобы на новом сервере была настроена пересылка запросов:
--option="dns forwarder=forwarder_ip_address"Форвардером может быть как вышестоящий DNS-сервер организации, так и публичные от google или yandex, например:
--option="dns forwarder=8.8.8.8"
--option='idmap_ldb:use rfc2307 = yes'
— если первый контроллер домена создавался с ключом --rfc2307
, то и для текущего необходимо это учесть, указав данный параметр;
--site=SITE
— привязка контроллера домена к определенному сайту AD;
--option="interfaces= lo eth0" --option="bind interfaces only=yes"
— привязка Samba к указанным сетевым интерфейсам сервера (если их несколько); указание данной опции позволяет samba-tool
зарегистрировать корректный IP-адрес при присоединении;
--option="ad dc functional level = LEVEL"
— функциональный уровень AD. Возможные значения: 2008_R2 (по умолчанию), 2012, 2012_R2.
Примечание
Примечание
samba-tool domain join
можно воспользоваться командой:
# samba-tool domain join --help
Таблица 2.3. Параметры контроллеров домена
|
IP-адрес
|
Полное доменное имя (FQDN)
|
---|---|---|
Существующий DC
|
192.168.0.122
|
dc1.test.alt
|
Добавляемый DC
|
192.168.0.123
|
dc2.test.alt
|
# hostnamectl set-hostname dc2.test.alt
Примечание
Примечание
# apt-get install task-samba-dc
/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
# 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
Предупреждение
Примечание
samba-tool dns add
см. в разделе Администрирование DNS
/etc/krb5.conf
):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true
# 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
# systemctl enable --now samba
Примечание
# apt-get install task-samba-dc
/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
# 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
Предупреждение
Примечание
samba-tool dns add
см. в разделе Администрирование DNS
/etc/krb5.conf
):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true
# 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 --dns-backend=BIND9_DLZ
Если всё нормально, в конце будет выведена информация о присоединении к домену:
Joined domain TEST (SID S-1-5-21-80639820-2350372464-3293631772) as a DC
#systemctl enable --now samba
#systemctl enable --now bind
Примечание
# host -t A test.alt
test.alt has address 192.168.0.122
test.alt has address 192.168.0.123
В списке адресов должен отображаться IP-адрес добавленного контроллера домена.
# samba-tool drs showrepl --summary
Default-First-Site-Name\DC1 via RPC DSA object GUID: 10e22808-960e-4cb3-8724-abd2223555cd Last attempt @ Sat Jun 15 10:27:21 2024 EET was successful 0 consecutive failure(s). Last success @ Sat Jun 15 10:27:21 2024 EETВ пункте Last attempt должны стоять актуальные дата и время, идентичные указанным в строке Last success (отображает время последней репликации). Также должно быть «0 consecutive failure(s)».
# samba-tool user add testuser --random-password
User 'testuser' added successfully
# samba-tool user list | grep testuser
testuser
# 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
Таблица 2.4. Параметры контроллеров домена
|
IP-адрес
|
Полное доменное имя (FQDN)
|
---|---|---|
Существующий RWDC
|
192.168.0.122
|
dc1.test.alt
|
Добавляемый RODC
|
192.168.0.124
|
rodc.test.alt
|
# hostnamectl set-hostname rodc.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
# apt-get install task-samba-dc
/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
# 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 RODC A 192.168.0.124 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
Предупреждение
Примечание
samba-tool dns add
см. в разделе Администрирование DNS
/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 }
# 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, например:
--option="dns forwarder=8.8.8.8"
--rfc2307
, то и для текущего необходимо это учесть, указав параметр:
--option='idmap_ldb:use rfc2307 = yes'
# systemctl enable --now samba
Примечание
samba-tool domain join
можно воспользоваться командой:
# samba-tool domain join --help
Примечание
Примечание
#samba-tool group listmembers "Denied RODC Password Replication Group"
Read-only Domain Controllers Domain Admins Enterprise Admins Domain Controllers Schema Admins krbtgt Group Policy Creator Owners Cert Publishers #samba-tool group listmembers "Allowed RODC Password Replication Group"
# samba-tool rodc preload (<SID>|<DN>|<accountname>)+ ... [опции]
Возможные опции:
--server
— обычный контроллер домена, который будет выступать источником данных при репликации;
--file
— имя файла со списком реплицируемых объектов, либо «-» для ввода списка через стандартный поток ввода (stdin);
--ignore-errors
— игнорировать ошибки репликации при загрузке нескольких объектов.
--server
контроллера домена. Для идентификации объектов могут использоваться идентификаторы безопасности (SID), DN или имена учетных записей SAM (samAccountName). Для передачи списка объектов может использоваться:
Примечание
samba-tool rodc preload
можно воспользоваться командой:
# samba-tool rodc preload --help
#samba-tool user add
ivanov --given-name='Иван' \ --surname='Иванов' --mail-address='ivanov@test.alt' New Password: Retype Password: User 'ivanov' added successfully #samba-tool group addmembers "Allowed RODC Password Replication Group" ivanov
Added members to group Allowed RODC Password Replication Group
# 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-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
# systemctl start 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
# 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 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: 26a8d3d0-66b3-4f6c-8457-0def172d4af3
DSA invocationId: 83fb4bbf-9f63-44d6-acbd-c0db4e9e839a
==== INBOUND NEIGHBORS ====
CN=Schema,CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ Wed May 22 15:38:51 2024 EET was successful
0 consecutive failure(s).
Last success @ Wed May 22 15:38:51 2024 EET
CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ Wed May 22 15:38:51 2024 EET was successful
0 consecutive failure(s).
Last success @ Wed May 22 15:38:51 2024 EET
DC=ForestDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ Wed May 22 15:38:50 2024 EET was successful
0 consecutive failure(s).
Last success @ Wed May 22 15:38:50 2024 EET
DC=DomainDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ Wed May 22 15:38:51 2024 EET was successful
0 consecutive failure(s).
Last success @ Wed May 22 15:38:51 2024 EET
DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ Wed May 22 15:38:51 2024 EET was successful
0 consecutive failure(s).
Last success @ Wed May 22 15:38:51 2024 EET
==== OUTBOUND NEIGHBORS ====
CN=Schema,CN=Configuration,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
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: e72594f1-4986-4ac9-8cdd-9481cff5e243
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: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
DC=DomainDnsZones,DC=test,DC=alt
Default-First-Site-Name\DC1 via RPC
DSA object GUID: e72594f1-4986-4ac9-8cdd-9481cff5e243
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: e72594f1-4986-4ac9-8cdd-9481cff5e243
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)
==== KCC CONNECTION OBJECTS ====
Connection --
Connection name: 56a02972-69f5-42fb-965a-7125f09c96d1
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
может некорректно работать. Для того чтобы при повторной работе unison
использовал существующее SSH-соединение вместо установки нового, необходимо выполнить следующие команды:
#mkdir ~/.ssh/ctl
#cat << EOF > ~/.ssh/config
Host * ControlMaster auto ControlPath ~/.ssh/ctl/%h_%p_%r ControlPersist 1 EOF
~/.ssh/ctl
.
/root/.unison/
:
# mkdir /root/.unison
/root/.unison/default.prf
со следующим содержимым:
# Список каталогов, которые будут синхронизированы root = /var/lib/samba root = ssh://root@DC2.test.alt//var/lib/samba # Список подкаталогов, которые нужно синхронизировать path = sysvol # Список подкаталогов, которые нужно игнорировать #ignore = Path auto=true batch=true perms=0 rsync=true maxthreads=1 retry=3 confirmbigdeletes=false servercmd=/usr/bin/unison copythreshold=0 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/.unison/default.prf
в другой файл, например: /root/.unison/sync_dc2.prf
.
/root/.unison/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
нельзя гарантировать, что каждый контроллер домена будет использовать один и тот же идентификатор для данного пользователя или группы.
idmap.ldb
с контроллера домена, на котором установлена роль FSMO Эмулятор PDC (см. Роли FSMO), со всеми остальными контроллерами домена. Для достижения наилучших результатов следует регулярно синхронизировать idmap.ldb
.
# apt-get install ldb-tools
/var/lib/samba/private/idmap.ldb
:
#rm -f /var/lib/samba/private/idmap.ldb.bak
#tdbbackup -s .bak /var/lib/samba/private/idmap.ldb
#Создание резервной копии idmap.ldb 0 3 * * * rm -f /var/lib/samba/private/idmap.ldb.bak && tdbbackup -s .bak /var/lib/samba/private/idmap.ldb >/dev/null 2>&1
/var/lib/samba/private/
с удалением суффикса .bak (заменить существующий файл):
# rsync -a dc1:/var/lib/samba/private/idmap.ldb.bak /var/lib/samba/private/idmap.ldb
# net cache flush
# if ! samba-tool ntacl sysvolcheck; then samba-tool ntacl sysvolreset; fi
#Синхронизация idmap.ldb 15 4 * * * rsync -a dc1:/var/lib/samba/private/idmap.ldb.bak /var/lib/samba/private/idmap.ldb && net cache flush && if ! samba-tool ntacl sysvolcheck; then samba-tool ntacl sysvolreset; fi >/dev/null 2>&1
Важно
idmap.ldb
необходим перезапуск Samba (systemctl restart samba.service
), т.к. этот файл держится открытым процессами Samba.
idmap.ldb
можно избежать, если на всех контроллерах добавить следующие параметры в smb.conf
в секции [sysvol] (и в [netlogon]) строки:
acl_xattr:ignore system acls = yes acl_xattr:default acl style = windowsПри использовании этих параметров значения расширенных атрибутов файлов (xattr security.NTACL) на всех контроллерах будут одинаковы, независимо от uid/gid. Именно это и является проблемой при использовании
rsync
, т.к. при синхронизации rsync
передаёт имена пользователей/групп и они разыменовываются в uid/gid уже «на месте», а xattr security.NTACL остаётся неизменным и, в конфигурации по умолчанию (без вышеуказанных параметров), зависит от значений uid/gid/facl.
Важно
Таблица 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.122#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 приведено описание параметров команды system-auth
.
Таблица 4.2. Параметры команды system-auth
Параметр
|
Описание
|
---|---|
Действие
|
|
status
|
Показать текущую схему аутентификацию
|
list
|
Вывести список доступных схем аутентификации
|
write
|
Установить заданные параметры аутентификации
|
Опция
|
|
-d
|
Включить отладку
|
--winbind
|
Использовать Samba Winbind для подключения системы к домену (если этот параметр не указан, будет использован SSSD)
|
--gpo
|
Включить групповые политики на машине
|
--createcomputer=OU/SubOU
|
Субконтейнер в домене (организационная единица/подразделение), куда будет помещена машина при вводе в домен
|
--windows2003
|
Ввести станцию в домен windows 2003
|
--version
|
Вывести версию программы
|
system-auth
:
# 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:*: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
Примечание
# control lightdm-greeter-hide-users
В команду можно передать следующие параметры:
/etc/lightdm/lightdm-gtk-greeter.conf
(группа [greeter]), необходимо указать:
enter-username = true
Примечание
# control pam_canonicalize_user enabled
или в файле /etc/pam.d/system-auth-common
раскомментировать строку:
auth required pam_canonicalize_user.so
#rolelst
domain users:users domain admins:localadmins localadmins:wheel,vboxadd,vboxusers powerusers:remote,vboxadd,vboxusers users:cdwriter,cdrom,audio,video,proc,radio,camera,floppy,xgrp,scanner,uucp,vboxusers,fuse,vboxadd vboxadd:vboxsf #id ivanov
uid=906201103(ivanov) gid=906200513(domain users) группы=906200513(domain users),906201107(sales), 906201114(office),100(users),80(cdwriter),22(cdrom),81(audio),475(video),19(proc), 83(radio),444(camera),71(floppy),498(xgrp),499(scanner),14(uucp),462(vboxusers),464(fuse),488(vboxadd),487(vboxsf)
# samba-tool group add 'PC Admins'
Added group PC Admins
Добавить туда необходимых пользователей (например, пользователя ivanov):
# samba-tool group addmembers 'PC Admins' ivanov
Added members to group PC Admins
Затем на машине, введённой в домен, добавить роль для данной группы:
#После этого пользователь, входящий в группу PC Admins, сможет получать права администратора.roleadd 'PC Admins' localadmins
#rolelst
domain users:users domain admins:localadmins pc admins:localadmins localadmins:wheel,vboxadd,vboxusers powerusers:remote,vboxadd,vboxusers users:cdwriter,cdrom,audio,video,proc,radio,camera,floppy,xgrp,scanner,uucp,vboxusers,fuse,vboxadd vboxadd:vboxsf
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
Примечание
# control lightdm-greeter-hide-users show
или в файле /etc/lightdm/lightdm.conf
закомментировать строку в группе [SeatDefaults]
:
#greeter-hide-users=true
# realm leave --remove <домен>
Возможно также понадобится удалить закешированные записи:
# sss_cache -E
/etc/samba/smb.conf
, /etc/sssd/sssd.conf
и /etc/krb5.conf
к виду по умолчанию и повторно ввести машину в домен.
Примечание
/etc/samba/smb.conf
и /etc/krb5.conf
к виду по умолчанию можно в модуле ЦУС . В окне модуля следует установить отметку в поле Восстановить файлы конфигурации по умолчанию (smb.conf, krb5.conf, sssd.conf) и нажать кнопку :
Важно
Важно
# 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
Важно
/var/lib/samba/sysvol
SID'ы домена некорректно транслируются в UNIX user id и group id.
# 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
для всех добавленных пользователей и групп из доверенного домена. Таким образом Microsoft показывает, что пользователь или группа являются частью доверенного домена;
[global]
в файла smb.conf
на Linux-клиентах, подключенных через Winbind, добавить опцию:
winbind scan trusted domains = yesи перезапустить сервис winbind:
# systemctl restart winbind.service
samba-tool domain trust validate
) и не выполняется вход на пользователями из доверенного домена на машинах с winbind.
Примечание
samba-tool
.
Таблица 5.1. Команды управления доверием
Команда
|
Описание
|
Примечание
|
---|---|---|
domain trust create <домен>
|
Создать доверие домена или леса
|
Можно использовать следующие опции:
|
domain trust modify <домен>
|
Изменить доверие домена или леса
|
|
domain trust delete <домен>
|
Удалить доверие домена или леса
|
Можно использовать следующие опции:
|
domain trust list
|
Вывести список доверительных отношений домена
|
|
domain trust show <домен>
|
Показать сведения о доверенном домене
|
|
domain trust validate <домен>
|
Проверить доверие к домену
|
Можно использовать следующие опции:
|
Примечание
/etc/bind/options.conf
:
options { forwarders { 8.8.8.8; }; };
/etc/bind/options.conf
:
zone "trust.dom" in { type forward; forwarders { 10.64.224.10; }; };
Таблица 5.2. Исходные данные
|
Имя домена
|
Контроллер домена
|
IP-адрес
|
ОС контроллера домена
|
Версия Samba
|
---|---|---|---|---|---|
Домен Linux
|
TEST.ALT
|
dc1.test.alt
|
192.168.0.122
|
ALT Server 10.2
|
4.19.6
|
Домен Linux
|
EXAMPLE.ALT
|
s1.example.alt
|
192.168.0.172
|
ALT Server 10.2
|
4.19.6
|
Выделенный DNS-сервер
|
|
|
192.168.0.150
|
ALT Server 10.2
|
|
/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;
/etc/bind/options.conf
(или /etc/bind/ddns.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
#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
|
---|---|---|---|---|---|---|
Домен Linux
|
TEST.ALT
|
dc1.test.alt
|
192.168.0.122
|
ALT Server 10.2
|
2012_R2
|
4.19.6
|
Домен Windows
|
WIN.ALT
|
DC1.win.alt
|
192.168.0.190
|
Windows Server 2012
|
2012R2
|
|
Выделенный DNS-сервер
|
|
|
192.168.0.150
|
ALT Server 10.2
|
|
|
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
<домен> --type=<тип доверия>
--direction=<направление> --create-location=<место создания> -U <пользователь>
Где:
<домен>
— имя удалённого домена, с которым создаётся доверие;
<тип доверия>
— определяет тип доверия:
external
— используется для внешнего доверия между доменами, не находящимися в одном лесу. Рекомендуется, если для Linux-клиентов используется SSSD;
forest
— используется для создания доверия между лесами доменов, включая все их дочерние домены. Рекомендуется, если для Linux-клиентов используется Winbind;
--direction=<направление>
— определяет направление доверия:
incoming
— доверие только со стороны удалённого домена к текущему;
outgoing
— доверие только от текущего домена к удалённому;
both
— двустороннее доверие;
--create-location=<место создания>
— указывает место создания доверительного отношения:
local
— объект доверенного домена будет создан только в локальном домене, доверительные отношения будут зарегистрированы и настроены только со стороны текущего домена, без внесения изменений в конфигурацию удаленного домена;
both
— объект доверенного домена будет создан в обоих доменах;
-U <пользователь>
— имя пользователя с правами администратора для удалённого домена.
# 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 = 3000-7999 idmap config * : backend = tdb idmap config EXAMPLE : backend = rid idmap config EXAMPLE : range = 10000-999999 idmap config TEST : backend = rid idmap config TEST : range = 1000000-9999999
smbd
и 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
winbind
можно получить информацию о пользователях из обоих доменов и проверить доступность доменов:
#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:*:1001106: #getent group EXAMPLE\\office2
office2:*:11107: #getent passwd TEST\\ivanov
TEST\ivanov:*:1001105:1000513::/home/EXAMPLE.ALT/ivanov:/bin/bash #getent passwd EXAMPLE\\kim
kim:*:11125: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
;
ldap_idmap_range_min
— нижняя (включительно) граница диапазона идентификаторов;
ldap_idmap_range_max
— верхняя (не включительно) граница диапазона идентификаторов;
ldap_idmap_range_size
— количество идентификаторов, доступных для каждого среза. Значение должно быть не меньше значения максимального RID пользователя, запланированного для использования на сервере AD.
/etc/sssd/sssd.conf
добавить доверенный домен:
[domain/EXAMPLE.ALT/TEST.ALT] use_fully_qualified_names = falseи перезапустить sssd:
# systemctl restart sssd
sssd
можно проверить, есть ли возможность просматривать пользователей из обоих доменов:
#getent passwd ivanov
ivanov:*:1855401105:1855400513:Иван Иванов:/home/TEST.ALT/ivanov:/bin/bash #getent passwd kim
sssctl
можно вывести все домены, с которыми готова взаимодействовать клиентская машина, а также их статусы:
#sssctl domain-list
EXAMPLE.ALT TEST.ALT #sssctl domain-status EXAMPLE.ALT
Online status: Online Active servers: AD Global Catalog: s1.example.alt AD Domain Controller: s1.example.alt Discovered AD Global Catalog servers: - s1.example.alt Discovered AD Domain Controller servers: - s1.example.alt
/etc/sssd/sssd.conf
в секцию основного домена можно вписать:
krb5_validate = false
# 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
samba-tool
.
Примечание
-H
или --URL=
. Например:
# samba-tool user add domainuser Qwerty1 -H ldap://<DC> -Uadministrator
По умолчанию в качестве значения опции -H
передается текущий узел в формате ldap://<имя узла>.
Таблица 6.1. Команды samba-tool для управления пользователями
Команда
|
Описание
|
Примечание
|
---|---|---|
user add <имя пользователя> [<пароль>] [опции]
|
Создать нового пользователя в AD
|
Переданное в команде значение <имя пользователя> интерпретируется как имя учетной записи SAM (значение атрибута sAMaccountName). Оно должно быть уникальным.
Некоторые опции:
|
user create <имя пользователя> [<пароль>] [опции]
|
Создать нового пользователя в AD
|
Команда доступна только в целях совместимости. Вместо этой команды рекомендуется использовать команду
samba-tool user add
|
user delete <имя пользователя> [опции]
|
Удалить существующего пользователя
|
При удалении учетной записи также удаляются все связанные с нею разрешения, права и членства в группах.
|
user disable (<имя пользователя>| --filter <фильтр>) [опции]
|
Отключить пользовательский аккаунт
|
Параметры вызова:
|
user edit <имя пользователя> [опции]
|
Редактировать объект пользовательского аккаунта AD
|
В опции
--editor=<редактор> можно указать редактор (по умолчанию vi)
|
user enable (<имя пользователя>| --filter <фильтр>) [опции]
|
Включить пользовательский аккаунт
|
Параметры вызова:
|
user list [опции]
|
Вывести список пользователей
|
По умолчанию выводятся sAMAccountNames пользователей.
Можно использовать следующие опции:
|
user setprimarygroup <имя пользователя> <имя группы> [опции]
|
Установить основную группу для учётной записи пользователя
|
|
user getgroups <имя пользователя> [опции]
|
Вывести список групп, в которые входит учётная запись пользователя напрямую
|
Можно использовать следующие опции:
|
user show <имя пользователя> [опции]
|
Вывести атрибуты учетной записи
|
В опции
--attributes=USER_ATTRS можно указать, разделённый запятыми, список атрибутов, значения которых требуется отобразить. Для вывода скрытых атрибутов, их необходимо явно указать в параметре --attributes >
|
user move <имя пользователя> <контейнер> [опции]
|
Переместить учётную запись пользователя в указанную организационную единицу или контейнер
|
Имя пользователя указывается в команде в формате sAMAccountName.
Имя организационной единицы или контейнера можно указать как полное DN, так и без компонента domainDN.
|
user password [опции]
|
Изменить пароль текущей учетной записи (пользователя, прошедшего аутентификацию)
|
Если пароль не передается в открытом виде в значении параметра
--newpassword , пользователь получит запрос на ввод пароля в командной строке.
|
user rename <имя пользователя> [опции]
|
Переименовать пользователя и изменить его атрибуты
|
По умолчанию выводятся sAMAccountNames пользователей.
Для удаления атрибута следует использовать пустое значение атрибута.
Имя пользователя указывается в команде в формате sAMAccountName.
Некоторые опции:
|
user setexpiry (<имя пользователя>| --filter <фильтр>) [опции]
|
Установить срок действия для учётной записи пользователя
|
По истечении заданного периода учетная запись отключается; пользователь не может получать доступ к ресурсам домена. При этом сохраняются связанные с учетной записью разрешения, права и членства.
Параметры вызова:
|
user setpassword (<имя пользователя>| --filter <фильтр>) [опции]
|
Установить или сбросить пароль учетной записи пользователя
|
Если пароль не передается в открытом виде в значении параметра
--newpassword , пользователь получит запрос на ввод пароля в командной строке.
Параметры вызова:
|
user unlock (<имя пользователя>| --filter <фильтр>) [опции]
|
Разблокировать учётную запись пользователя в домене
|
Параметры вызова:
|
user getpassword (<имя пользователя>| --filter <фильтр>) [опции]
|
Получить атрибуты пароля учётной записи пользователя
|
Параметры вызова:
|
user syncpasswords [--cache-ldb-initialize] [опции]
|
Синхронизировать пароли всех учётных записей пользователей с помощью дополнительного сценария
|
Эта команда должна выполняться только на одном контроллере домена (обычно на PDC).
В первый раз команда должна выполняться с параметром, обеспечивающим инициализацию кеша:
--cache-ldb-initialize . Для корректной инициализации кеша требуется передать список атрибутов в параметре --attributes .
|
Примечание
# samba-tool user add --help
# samba-tool user add
ivanov --given-name='Иван' \
--surname='Иванов' --mail-address='ivanov@test.alt' \
--userou='OU=KDE' --must-change-at-next-login
New Password:
Retype Password:
User 'ivanov' added successfully
# samba-tool user add
kim --given-name='Виталий' \
--surname='Ким' --mail-address='kim@test.alt' \
--must-change-at-next-login --random-password \
-H ldap://dc2.test.alt -U administrator
Password for [TEST\administrator]:
User 'kim' added successfully
# samba-tool user setexpiry
ivanov --noexpiry
Expiry for user 'ivanov' disabled.
# samba-tool user setexpiry
kim --days=20
Expiry for user 'kim' set to 20 days.
# samba-tool user list
Guest
ivanov
Administrator
krbtgt
kim
# samba-tool user disable
ivanov
# samba-tool user enable
--filter=mail=k*
Enabled user 'mail=k*'
# samba-tool user setpassword
ivanov
New Password:
Retype Password:
Changed password OK
# samba-tool user move
ivanov 'OU=KDE'
Moved user "kim" into "OU=KDE,DC=test,DC=alt"
# samba-tool user getpassword
ivanov \
--attributes=pwdLastSet,virtualClearTextUTF8
dn: CN=Иван Иванов,OU=TEST,DC=test,DC=alt
pwdLastSet: 133628348830281440
Got password OK
# samba-tool user delete
ivanov
Deleted user ivanov
Предупреждение
pdbedit -x -m имя
Примечание
Таблица 6.2. Команды samba-tool для управления группами
Команда
|
Описание
|
Примечание
|
---|---|---|
group add <имя группы> [опции]
|
Создать новую группу
|
Переданное в команде значение <имя группы> интерпретируется как имя учетной записи SAM (значение атрибута sAMaccountName). Оно должно быть уникальным.
Некоторые опции:
|
group create <имя группы> [опции]
|
Создать новую группу
|
Доступна только в целях совместимости. Рекомендуется вместо этой команды использовать команду
samba-tool group add
|
group addmembers <имя группы> (<список участников>|--member-dn=<member-dn>) [опции]
|
Добавить участников в группу
|
Команда позволяет добавить в группу одного или нескольких участников (указанных через запятую). В качестве участника группы может выступать учетная запись пользователя, учетная запись компьютера или другая группа, существующая в домене.
Опции:
|
group delete <имя группы> [опции]
|
Удалить группу
|
Операция удаления является необратимой.
При удалении группы также удаляются все связанные с нею разрешения и права, а также унаследованные от нее разрешения и права участников.
|
group edit <имя группы> [опции]
|
Редактировать объект группы
|
В опции
--editor=<редактор> можно указать редактор (по умолчанию vi)
|
group addunixattrs <имя группы> <gidnumber> [опции]
|
Добавить атрибуты Unix/RFC 2307 для группы
|
Для использования этих атрибутов для сопоставления UID/GID в конфигурации (
smb.conf ) должен быть задан параметр idmap_ldp:use rfc2307 = Yes
|
group list [опции]
|
Вывести список групп
|
По умолчанию выводится список имен учетных записей SAM (sAMAccountName).
Можно использовать следующие опции:
|
group listmembers <имя группы> [опции]
|
Вывести список участников данной группы
|
По умолчанию выводятся sAMAccountNames участников. Если sAMAccountName недоступен, будет использоваться CN.
Можно использовать следующие опции:
|
group move <имя группы> <контейнер> [опции]
|
Переместить группу в указанную организационную единицу или контейнер
|
Имя группы указывается в команде в формате sAMAccountName.
Имя организационной единицы или контейнера можно указать как полное DN или без компонента domainDN.
|
group removemembers <имя группы> (<список участников>|--member-dn=<member-dn>) [опции]
|
Удалить участников из группы
|
Команда позволяет удалить из группы одного или нескольких участников (указанных через запятую).
При удалении из группы участник теряет все унаследованные от нее разрешения и права.
Опции:
|
group show <имя группы> [опции]
|
Вывести группу и её атрибуты
|
В опции
--attributes=USER_ATTRS можно указать, разделённый запятыми, список атрибутов
|
group stats [опции]
|
Показать статистику для общих групп и членства в группах
|
В результате выполнения команды выводятся следующие сведения:
|
group rename <имя группы> [опции]
|
Переименовать группу и изменить её атрибуты
|
Для удаления атрибута следует использовать пустое значение атрибута.
Имя группы указывается в команде в формате sAMAccountName.
Можно использовать следующие опции:
|
Примечание
# samba-tool group add --help
--group-type=Distribution
.
# samba-tool group add
office --description='Simple group'
Added group office
# samba-tool group add
manager --group-type=Distribution \
-H ldap://dc2.test.alt -U administrator
Added group manager
# samba-tool group add
mygroup --nis-domain=samdom --gid-number=12345
Added group mygroup
# samba-tool group delete office
Deleted group office
# samba-tool group addmembers "Domain Users" ivanov
# samba-tool group addmembers mygroup manager,kim,ivanov
# samba-tool group removemembers "Domain Users" ivanov
# samba-tool group move manager 'OU=OU'
Moved group "manager" into "OU=OU,DC=test,DC=alt"
# samba-tool group show manager --attributes=member,objectGUID
dn: CN=test2,CN=Users,DC=test,DC=alt
objectGUID: 2f708ea2-f42c-4344-af22-bc243301c777
member: CN=Иван Иванов,OU=KDE,DC=test,DC=alt
# samba-tool group listmembers "Domain Users"
# samba-tool group stats
Group membership statistics*
-------------------------------------------------
Total groups: 48
Total memberships: 32
Average members per group: 0.67
Max members: 8 (Denied RODC Password Replication Group)
Median members per group: 0.0
Members Number of Groups
-------------------------------------------------
0-1 42
2-4 5
5-9 1
* Note this does not include nested group membership
Примечание
--special
:
# samba-tool group add 'Protected Users' --special
work.test.alt. IN A 192.168.0.55Эта запись будет храниться в DNS-зоне прямого просмотра домена и использоваться для разрешения имени work.test.alt в IP-адрес 192.168.0.55.
$ samba-tool dns add dc1.test.alt 0.168.192.in-addr.arpa 55 PTR work.test.alt -U administrator
Password for [TEST\administrator]:
Record added successfully
При этом будет создана DNS-запись:
55.0.168.192.in-addr.arpa. 3600 IN PTR work.test.alt.Проверить наличие записи можно, выполнив команду:
$ host -t PTR 192.168.0.55 dc1.test.alt
Using domain server:
Name: dc1.test.alt
Address: 192.168.0.132#53
Aliases:
55.0.168.192.in-addr.arpa domain name pointer work.test.alt.
Примечание
$ samba-tool dns zonecreate dc1.test.alt 0.168.192.in-addr.arpa -U administrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
samba-tool
.
Примечание
-H
или --URL=
. Например:
$ samba-tool dns add 192.168.0.132 test.alt DC2 A 192.168.0.133 -H ldap://<DC> -Uadministrator
По умолчанию в качестве значения опции -H
передается текущий узел в формате ldap://<имя узла>.
Таблица 6.3. Команды управления DNS-записями samba-tool
Команда
|
Описание
|
Примечание
|
---|---|---|
dns add <сервер> <зона> <имя> <A|AAAA|PTR|CNAME|NS|MX|SRV|TXT> <данные>
|
Добавить новую запись
|
Параметры вызова:
|
dns delete <сервер> <зона> <имя> <A|AAAA|PTR|CNAME|NS|MX|SRV|TXT> <данные>
|
Удалить DNS-запись
|
|
dns edit <сервер> <зона> <имя> <A|AAAA|PTR|CNAME|NS|MX|SOA|SRV|TXT> <текущие данные> <новые данные>
|
Изменить DNS-запись
|
Дополнительно для изменения доступен тип записи SOA (Start of Authority), являющейся начальной записью зоны, со следующими данными (порядок пунктов в списке ниже соответствует порядку следования параметров в строке):
|
dns cleanup <сервер> <имя узла> [опции]
|
Очистить DNS-записи указанного DNS-узла
|
Во многих случаях данная подкоманда только устанавливает значение true в атрибуте dNSTombstoned DNS-записей. После этого при запросе таких записей информация о них возвращаться не будет, но в базе данных могут оставаться соответствующие им записи-заполнители.
|
dns query <сервер> <зона> <имя> <A|AAAA|PTR|CNAME|NS|MX|SOA|SRV|TXT|ALL> [опции]
|
Вывести информацию о DNS-записях
|
Можно использовать следующие опции:
|
Примечание
$ samba-tool dns add --help
Примечание
samba-tool dns
указание аутентифицирующей информации (имени пользователя и пароля) обязательно!
$ samba-tool dns add
192.168.0.132 test.alt \
DC2 A 192.168.0.133 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
$ samba-tool dns add
dc1.test.alt 0.168.192.in-addr.arpa \
55 PTR demo.test.alt -U administrator
Password for [TEST\administrator]:
Record added successfully
$ samba-tool dns delete
dc1.test.alt test.alt \
DC2 A 192.168.0.133 -U administrator
Password for [TEST\administrator]:
Record deleted successfully
$ samba-tool dns update
dc1.test.alt test.alt DC2 \
A 192.168.0.133 192.168.0.149 -U administrator
Password for [TEST\administrator]:
Record updated succefully
$ samba-tool dns update
dc1.test.alt test.alt @ SOA \
"dc1.test.alt admin.test.alt 63 900 600 86400 3600" \
"dc1.test.alt new.test.alt 64 900 600 86400 3600" \
-U administrator
Password for [TEST\administrator]:
Record updated succefully
$ samba-tool dns query
dc1.test.alt 0.168.192.in-addr.arpa \
@ ALL -U administrator
Таблица 6.4. Команды samba-tool для управления зонами DNS
Команда
|
Описание
|
Примечание
|
---|---|---|
dns zonecreate <сервер> <зона> [опции]
|
Создать зону DNS
|
Дополнительно с помощью параметра
--client-version можно указать версию DNS-клиента. Возможные значения: w2k, dotnet, longhorn (по умолчанию).
|
dns zonedelete <сервер> <зона> [опции]
|
Удалить зону DNS
|
|
dns zoneinfo <сервер> <зона> [опции]
|
Вывести информацию о зоне DNS
|
|
dns zonelist <сервер> [опции]
|
Вывести список зон DNS
|
Можно использовать следующие опции:
|
dns zoneoptions <сервер> <зона> [опции]
|
Изменить настройки очистки от устаревших записей для зоны DNS
|
Можно использовать следующие опции:
|
Примечание
$ samba-tool dns zoneoptions --help
Примечание
samba-tool dns
указание аутентифицирующей информации (имени пользователя и пароля) обязательно!
$ samba-tool dns zonecreate
192.168.0.132 \
0.168.192.in-addr.arpa -U administrator
$ samba-tool dns zoneinfo
dc1.test.alt \
0.168.192.in-addr.arpa -U administrator
$ samba-tool dns zoneoptions
dc1.test.alt \
test.alt --aging=1 --refreshinterval=306600
Примечание
smb.conf
хотя бы на одном контроллере домена должен быть задан параметр dns zone scavenging = yes
.
Таблица 6.5. Команды samba-tool для получения информации о DNS-серверах
Команда
|
Описание
|
Примечание
|
---|---|---|
dns serverinfo <сервер> [опции]
|
Вывести информацию о DNS-сервере
|
Дополнительно с помощью параметра
--client-version можно указать версию DNS-клиента. Возможные значения: w2k, dotnet, longhorn (по умолчанию)
|
dns roothints <сервер> [<имя>] [опции]
|
Вывести информацию о корневых серверах DNS
|
|
Примечание
$ samba-tool dns roothints --help
$ samba-tool dns serverinfo
dc1.test.alt -U administrator
$ samba-tool dns zoneinfo
dc1.test.alt \
0.168.192.in-addr.arpa -U administrator
Данная команда возвращает структуру DNS_RPC_SERVER_INFO, содержащую информацию о состоянии и конфигурации DNS-сервера, в формате, соответствующем версии DNS-клиента.
$ samba-tool dns roothints
dc1.test.alt -U administrator
nsupdate
используется для отправки запросов на обновление динамического DNS серверу имен в соответствии со стандартом RFC 2136. С ее помощью можно добавлять или удалять записи ресурсов из зоны без необходимости правки зонного файла вручную. Один запрос на обновление может содержать запросы на добавление или удаление нескольких записей ресурсов.
nsupdate
:
nsupdate [-dDi] [-L level] [-l][-g | -o | -y keyname:secret | -k keyfile] [-v] [-V] [-P] [-T] [-4 | -6] [filename]
Таблица 6.6. Опции команды nsupdate
Ключ
|
Описание
|
---|---|
-4
|
Использовать только IPv4
|
-6
|
Использовать только IPv6
|
-d
|
Включить режим отладки
|
-D
|
Включить дополнительный режим отладки
|
-i
|
Принудительно включить интерактивный режим, даже если стандартный ввод не является терминалом
|
-k keyfile
|
Позволяет указать файл, содержащий ключ аутентификации TSIG. Файлы могут быть в двух форматах: один файл, содержащий оператор ключа named.conf-format, который может быть автоматически сгенерирован ddns-confgen; или пара файлов, имена которых имеют формат K{name}.+157.+{random}.key и K{name}.+157.+{random}.private, которые могут быть сгенерированы dnssec-keygen. Параметр
-k также может использоваться для указания ключа SIG(0), используемого для аутентификации запросов на обновление Dynamic DNS. В этом случае указанный ключ не является ключом HMAC-MD5
|
-l
|
Установить режим локального хоста. Адрес сервера будет установлен на на localhost (отключая сервер, чтобы адрес сервера не мог быть переопределен). Подключения к локальному серверу используют ключ TSIG, найденный в
/var/run/named/session.key , который автоматически генерируется named, если какая-либо локальная первичная зона установила update-policy на local. Расположение этого файла ключа можно переопределить с помощью опции -k
|
-L level
|
Установить уровень отладки ведения журнала. Если 0, ведение журнала отключено
|
-p port
|
Установить порт для подключения к серверу имен. Значение по умолчанию — 53
|
-P
|
Вывести список частных типов записей ресурсов BIND, формат которых понимает nsupdate
|
-r udpretries
|
Установить количество повторных попыток UDP. Значение по умолчанию — 3. Если 0, выполняется только один запрос на обновление
|
-t timeout
|
Установить максимальное время, которое может занять запрос на обновление, прежде чем он будет прерван. Значение по умолчанию — 300 секунд. Если 0, тайм-аут отключен
|
-T
|
Вывести список стандартных типов записей ресурсов IANA, формат которых понимает nsupdate. nsupdate завершает работу после вывода списков. Параметр
-T можно комбинировать с параметром -P .
Другие типы можно ввести с помощью TYPEXXXXX, где XXXXX — это десятичное значение типа без начальных нулей. Rdata, если они присутствуют, анализируются с использованием формата UNKNOWN rdata (<обратная косая черта> <хэш> <пробел> <длина> <пробел> <шестнадцатеричная строка>)
|
-u udptimeout
|
Задать интервал повтора UDP. Значение по умолчанию — 3 секунды. Если равно 0, интервал вычисляется из интервала тайм-аута и количества повторов UDP
|
-v
|
Указывает, что TCP следует использовать даже для небольших запросов на обновление. По умолчанию nsupdate использует UDP для отправки запросов на обновление на сервер имен, если только они не слишком велики для того, чтобы поместиться в запрос UDP, в этом случае используется TCP. TCP может быть предпочтительнее, когда выполняется пакет запросов на обновление
|
-V
|
Вывести номер версии
|
-y [hmac:]keyname:secret
|
Задает буквальный ключ аутентификации TSIG. keyname — имя ключа, а secret — общий секрет в кодировке base64. hmac — имя алгоритма ключа; допустимые варианты: hmac-md5, hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384 или hmac-sha512. Если hmac не указан, по умолчанию используется hmac-md5 или, если MD5 отключен, hmac-sha256.
Примечание
Использование опции -y не рекомендуется, поскольку общий секрет предоставляется как аргумент командной строки в виде открытого текста.
|
nsupdate
считывает входные данные из filename или стандартного ввода. Каждая команда предоставляется ровно в одной строке ввода. Некоторые команды предназначены для административных целей; другие — это либо инструкции по обновлению, либо проверки предварительных условий содержимого зоны. Эти проверки устанавливают условия, что некоторое имя или набор записей ресурсов (RRset) либо существует, либо отсутствует в зоне. Эти условия должны быть выполнены, чтобы весь запрос на обновление был успешным. Обновления отклоняются, если тесты на предварительные условия не пройдены.
send
) приводит к отправке накопленных команд как одного запроса на обновление Dynamic DNS на сервер имен.
Таблица 6.7. Форматы команд и их значения
Команда
|
Описание
|
---|---|
server servername port
|
Отправить все динамические запросы на обновление на сервер имен servername. Если не указано ни одного оператора сервера, nsupdate отправляет обновления на основной сервер правильной зоны. Поле MNAME записи SOA этой зоны определяет основной сервер для этой зоны. port — это номер порта на servername, куда отправляются динамические запросы на обновление. Если номер порта не указан, используется номер порта DNS по умолчанию 53.
Примечание
Эта команда не действует, если используется GSS-TSIG.
|
local address port
|
Отправить все динамические запросы на обновление, используя локальный адрес. Если локальный оператор не указан,
nsupdate отправляет обновления, используя адрес и порт, выбранные системой. port также может использоваться для принудительного поступления запросов с определенного порта. Если номер порта не указан, система назначает его
|
zone zonename
|
Указывает, что все обновления должны быть сделаны в зоне zonename. Если оператор zone не указан,
nsupdate пытается определить правильную зону для обновления на основе остальной части ввода
|
class classname
|
Указывает класс по умолчанию. Если класс не указан, класс по умолчанию — IN
|
ttl seconds
|
Указывает время жизни по умолчанию в секундах для добавляемых записей. Значение none очищает TTL по умолчанию
|
key hmac:keyname secret
|
Указывает, что все обновления должны быть подписаны TSIG с использованием пары keyname-secret. Если указан hmac, он устанавливает используемый алгоритм подписи. Значение по умолчанию — hmac-md5; если MD5 отключен, то по умолчанию используется hmac-sha256. Команда key переопределяет любой ключ, указанный в командной строке с помощью
-y или -k
|
gsstsig
|
Эта команда использует GSS-TSIG для подписи обновлений. Это эквивалентно указанию
-g в командной строке
|
oldgsstsig
|
Эта команда использует версию GSS-TSIG для Windows 2000 для подписи обновлений. Это эквивалентно указанию
-o в командной строке
|
realm [realm_name]
|
При использовании GSS-TSIG эта команда указывает использование realm_name вместо realm по умолчанию в krb5.conf. Если realm не указан, сохраненная realm очищается
|
check-names [yes_or_no]
|
Включить или выключить обработку check-names для добавляемых записей. Check-names не влияет на предварительные условия или удаляемые записи. По умолчанию обработка check-names включена. Если обработка check-names завершается неудачей, запись не добавляется в сообщение UPDATE
|
prereq nxdomain domain-name
|
Эта команда требует, чтобы не существовало ни одной записи ресурса любого типа с именем domain-name
|
prereq yxdomain domain-name
|
Эта команда требует, чтобы существовал domain-name (как минимум одна запись ресурса любого типа)
|
prereq nxrrset domain-name class type
|
Эта команда требует, чтобы не существовало ни одной записи ресурса указанного типа, класса и domain-name. Если class не указан, предполагается IN (Интернет)
|
prereq yxrrset domain-name class type
|
Для этой команды требуется, чтобы существовала запись ресурса указанного типа, класса и доменного имени. Если class не указан, предполагается IN (Интернет)
|
prereq yxrrset domain-name class type data
|
С помощью этой команды данные из каждого набора предварительных условий этой формы, имеющих общий тип, класс и доменное имя, объединяются для формирования набора RR. Этот набор RR должен точно соответствовать набору RR, существующих в зоне с указанным типом, классом и доменным именем. Данные записываются в стандартном текстовом представлении RDATA записи ресурса
|
update delete domain-name ttl class type data
|
Удалить все записи ресурсов с именем domain-name. Если указаны type и data, удаляются только соответствующие записи ресурсов. Если class не указан, предполагается класс Internet. TTL игнорируется и допускается только для совместимости
|
update add domain-name ttl class type data
|
Добавить новую запись ресурса с указанным ttl, class и data
|
show
|
Отобразить текущее сообщение, содержащее все предварительные условия и обновления, указанные с момента последней отправки
|
send
|
Отправить текущее сообщение (эквивалентно вводу пустой строки)
|
answer
|
Отобразить ответ
|
debug
|
Включить отладку
|
version
|
Вывести номер версии
|
help
|
Вывести список команд
|
Примечание
nsupdate
для динамического обновления DNS-записей в доменных средах AD, необходимо использовать механизм аутентификации GSS-TSIG, который использует Kerberos-билет для аутентификации машины в домене. Kerberos-билет используется при обновлении DNS-записей с помощью nsupdate
с флагом -g
.
nsupdate -g
необходимо получить Kerberos-билет для машинного аккаунта с помощью команды:
# kinit -k 'MACHINENAME$'
Примечание
hostname -s
. В команде kinit
имя машинного аккаунта нужно указывать в верхнем регистре со знаком $, например:
#hostname -s
comp01 #kinit -k 'COMP01$'
nsupdate
для добавления и удаления записей ресурсов из зоны test.alt.
# nsupdate -g
> update delete oldhost.test.alt A
> update add newhost.test.alt 86400 A 192.168.0.195
> send
Новая запись будет имеет TTL 1 день (86400 секунд).
# nsupdate -g
> prereq nxdomain nickname.test.alt
> update add nickname.test.alt 86400 CNAME somehost.test.alt
> send
Предварительное условие позволяет серверу имен проверить, нет ли записей о ресурсах любого типа для nickname.test.alt. Если в зоне есть записи ресурсов, запрос на обновление не выполняется. Если этого имени не существует, добавляется CNAME.
Примечание
smb.conf
, а не через оснастку MMC.
Примечание
/etc/sssd/sssd.conf
;
/etc/sssd/sssd.conf
) в секцию с параметрами домена можно добавить опции, приведенные в табл. Параметры настройки автоматического обновления DNS. Например:
[domain/TEST.ALT] ..... #Включить обновление прямых записей (A/AAAA записей) dyndns_update = true #Включить обновление обратных записей (PTR записей) dyndns_update_ptr = true #Задать интервал обновления в секундах. #По умолчанию — 86400 (24 часа), обновление выполняется раз в сутки. #Если интервал равен 0, то обновление выполняется только один раз при запуске службы SSSD. #Если интервал менее 60 секунд, то обновление выполняется раз в 60 секунд. #Если адрес после предыдущего обновления не изменялся — обновление не выполняется. dyndns_refresh_interval = 60
Примечание
# systemctl restart sssd
Таблица 6.8. Параметры настройки автоматического обновления DNS
Параметр
|
Описание
|
Значение по умолчанию
|
---|---|---|
dyndns_update
|
Позволяет включить или отключить автоматическое обновление DNS-записей (защищенных с помощью GSS-TSIG) IP-адресом клиента через SSSD. Соответственно, администратору AD требуется только разрешить защищённые обновления для зоны DNS. Для обновления будет использован IP-адрес LDAP-соединения AD, если с помощью параметра «dyndns_iface» не указано иное.
|
true
|
dyndns_ttl
|
Значение TTL, которое применяется при обновлении DNS-записи клиента. Если
dyndns_update имеет значение false , этот параметр не имеет никакого эффекта. Если администратором установлено значение TTL на стороне сервера, оно будет переопределено этим параметром.
|
3600 (секунд)
|
dyndns_iface
|
Позволяет указать интерфейс или список интерфейсов, IP-адреса которых должны использоваться для динамических обновлений DNS. Специальное значение «*» подразумевает, что следует использовать IP-адреса всех интерфейсов. Если
dyndns_update имеет значение false , этот параметр не имеет никакого эффекта.
|
IP-адреса интерфейса, который используется для подключения LDAP AD.
|
dyndns_refresh_interval
|
Определяет как часто внутреннему серверу следует выполнять периодическое обновление DNS в дополнение к автоматическому обновлению, выполняемому при переходе внутреннего сервера в сетевой режим. Этот параметр применим только в том случае, если для параметра
dyndns_update установлено значение true .
Следует обратить внимание, что наименьшее допустимое значение составляет 60 секунд: если будет указано меньшее значение, параметр примет наименьшее допустимое значение (60 секунд).
|
86400 (24 часа)
|
dyndns_update_ptr
|
Определяет будет ли обновляться клиентская PTR-запись (защищенная с помощью GSS-TSIG) при обновлении DNS-записей клиента. Применимо, только если параметр
dyndns_update имеет значение true .
Следует обратить внимание, что параметр
dyndns_update_per_family не применяется для обновлений записей PTR. Эти обновления всегда отправляются отдельно.
|
true
|
dyndns_force_tcp
|
Должна ли утилита
nsupdate по умолчанию использовать TCP для обмена данными с сервером DNS.
|
false (разрешить
nsupdate выбрать протокол)
|
dyndns_auth
|
Следует ли утилите
nsupdate использовать проверку подлинности GSS-TSIG для защищённых обновлений сервера DNS. Незащищённые отправления можно отправлять, установив этот параметр в значение none .
|
GSS-TSIG
|
dyndns_auth_ptr
|
Следует ли утилите
nsupdate использовать проверку подлинности GSS-TSIG для защищённых обновлений PTR сервера DNS. Незащищённые отправления можно отправлять, установив этот параметр в значение none .
|
То же, что и
dyndns_auth
|
dyndns_server
|
Сервер DNS, который следует использовать для выполнения обновления DNS. В большинстве конфигураций рекомендуется не устанавливать значение для этого параметра.
Установка этого параметра имеет смысл для сред, в которых сервер DNS отличается от сервера данных идентификации.
Следует обратить внимание, что этот параметр используется только для резервной попытки, которая выполняется если предыдущая попытка с использованием автоматически определённых параметров завершилась неудачей.
|
none (разрешить
nsupdate выбрать сервер)
|
dyndns_update_per_family
|
По умолчанию обновление DNS выполняется за два шага: обновление IPv4, а затем обновление IPv6. В некоторых случаях может быть желательно выполнить обновление IPv4 и IPv6 за один шаг.
|
true
|
# control | grep sssd-dyndns
sssd-dyndns-refresh-interval unknown (disabled INTERVAL)
sssd-dyndns-ttl unknown (disabled TTL)
sssd-dyndns-update unknown (disabled enabled default)
sssd-dyndns-update-ptr unknown (disabled enabled default)
Таблица 6.9. control для настройки автоматического обновления DNS для SSSD
control
|
Опция в файле
/etc/sssd/sssd.conf
|
Описание
|
---|---|---|
sssd-dyndns-refresh-interval
|
dyndns_refresh_interval
|
Определяет как часто серверная часть должна выполнять периодическое обновление DNS в дополнение к автоматическому обновлению, выполняемому при подключении серверной части к сети. Этот параметр применим только в том случае, если для параметра
dyndns_update установлено значение true .
Доступные режимы:
|
sssd-dyndns-ttl
|
dyndns_ttl
|
Срок жизни, применяемый к DNS-записи клиента при ее обновлении. Если
dyndns_update имеет значение false , этот параметр не имеет никакого эффекта
Доступные режимы:
|
sssd-dyndns-update
|
dyndns_update
|
Позволяет включить или отключить автоматическое обновление DNS-записей (защищенных с помощью GSS-TSIG) с IP-адресом клиента через SSSD
Доступные режимы:
|
sssd-dyndns-update-ptr
|
dyndns_update_ptr
|
Определяет будет ли обновляться клиентская PTR-запись (защищенная с помощью GSS-TSIG) при обновлении DNS-записей клиента. Применимо, только если параметр
dyndns_update имеет значение true .
Доступные режимы:
|
# control sssd-dyndns-update enabled
и перезапустить службу SSSD:
# systemctl restart sssd
Проверка:
# control sssd-dyndns-update
enabled
dyndns_update
и dyndns_update_ptr
. Подробнее см. Групповые политики control (раздел SSSD опции).
winbind-dnsupdate
.
# apt-get install samba-winbind-dnsupdate
И активировать и запустить таймер, который в свою очередь запускает сервис:
# systemctl enable --now winbind-dnsupdate.timer
winbind-dnsupdate
является обновление IPv4 (A), IPv6 (AAAA) и соответствующих PTR DNS-записей. Для обновления DNS-записей winbind-dnsupdate
использует файл /etc/resolv.conf
.
winbind-dnsupdate
:
winbind-dnsupdate [опции]При запуске без параметров скрипт обновляет A запись.
Таблица 6.10. Опции команды winbind-dnsupdate
Ключ
|
Описание
|
---|---|
-h, --help
|
Вывести справку о команде
|
-v, --version
|
Вывести версию
|
-a, --all
|
Включить обновление всех записей
|
-6, --update-ipv6
|
Включить обновление IPv6 (AAAA) записей
|
-d, --daemon
|
Отправлять логи в journald
|
-t, --ttl <time>
|
Задать TTL («время жизни», указывает, как долго настройки DNS должны храниться в кеше, прежде чем они будут автоматически обновлены)
|
--allow-ipv4-ptr-update
|
Включить обновление обратной DNS-записи IPv4 (A) PTR
|
--allow-ipv6-ptr-update
|
Включить обновление обратной DNS-записи IPv6 (AAAA) PTR
|
winbind-dnsupdate
:
# winbind-dnsupdate -a
[INFO]: Hostname: comp01.test.alt.
[INFO]: Check winbind status.
[INFO]: Winbind is running. Continue.
[INFO]: Trying to get the site name.
[INFO]: Site: Default-First-Site-Name.
[INFO]: Get host credentials.
[INFO]: Retrieving host credentials successfully.
[INFO]: Trying to get a list of domain controllers in site.
[INFO]: Success.
[INFO]: Trying to find an available DNS server.
[INFO]: Checking the availability of DNS server on dc1.test.alt..
[INFO]: DNS server on dc1.test.alt. available.
[INFO]: Update IPv4.
[INFO]: Trying to get IPv4 address of a domain controller.
[INFO]: Successful. DC info:
[INFO]: Domain controller name: dc1.test.alt.
[INFO]: Domain controller IPv4: 192.168.0.132.
[INFO]: Trying parse connection interface name.
[INFO]: Successful. Intraface name: enp0s3.
[INFO]: Checking the existence of A record.
[INFO]: IPv4 record exists.
[INFO]: Checking whether the IPv4 records needs to be updated.
[INFO]: Current IPv4 address: 192.168.0.195.
[INFO]: IPv4 address in DNS server: 192.168.0.195.
[INFO]: The IPv4 address of interface enp0s3 has not been changed.
[INFO]: The update IPv4 was skipped.
[INFO]: IPv4 update was successful.
[INFO]: The update was successful.
[INFO]: Destroy host credential.
# systemctl cat winbind-dnsupdate.timer
# /lib/systemd/system/winbind-dnsupdate.timer
[Unit]
Description=Update dns record Daily and on boot
[Timer]
OnBootSec=5min
OnUnitActiveSec=60min
[Install]
WantedBy=timers.target
Чтобы изменить частоту запуска systemd сервиса, необходимо отредактировать настройки таймера:
# systemctl edit winbind-dnsupdate.timer
Anything between here and the comment below will become the new contents of the file
:
[Timer] OnUnitActiveSec= OnUnitActiveSec=120min
OnUnitActiveSec=
очистит предыдущее определение (60min), а OnUnitActiveSec=120min
установит новое значение (120min).
# systemctl daemon-reload
Примечание
# systemctl edit winbind-dnsupdate.timer
открывает текстовый редактор с конфигурацией winbind-dnsupdate.timer, куда можно внести изменения. Этот подход позволяет создавать или изменять так называемые «дополнения» (overrides) для systemd сервиса, не изменяя оригинальный файл сервиса, который находится в /usr/lib/systemd/system/
. Это важно, потому что оригинальные файлы могут быть перезаписаны при обновлении пакетов.
/etc/systemd/system/winbind-dnsupdate.timer.d/
, в котором, после сохранения изменений, появляется файл override.conf
. В этом файле можно задать новые параметры или изменить существующие параметры сервиса.
ipconfig /registerdns
. Для DHCP-клиентов DHCP-сервер может выполнять эти обновления от имени клиента, что снижает необходимость ручного администрирования.
samba-tool
(см. Утилита samba-tool);
nsupdate
(см. nsupdate);
system-auth
, которая в свою очередь использует команду net ads join
. В рамках данной команды выполняется присоединение к домену с использованием Kerberos-аутентификации и не производится обновление DNS. После успешного присоединения машина регистрирует свою DNS-запись с помощью команды net ads dns register
также используя Kerberos-аутентификацию.
system-auth
использует билет администратора, и в результате владельцем записи становится он, а не машина, что впоследствии не позволяет машине обновить свою DNS-запись.
Примечание
DC=host1,DC=test.alt,CN=MicrosoftDNS,DC=DomainDnsZones,DC=test,DC=alt
Примечание
# samba_allow_nsupdate --domain-dns="test.alt" --computers-base-dn="CN=Computers,DC=test,DC=alt"
Domain: test.alt
Domain DN: DC=test,DC=alt
Computers search base DN: CN=Computers,DC=test,DC=alt
Action: allow
Selected computers list:
DC1$
WS2$
WS$
WS3$
Allow self nsupdate for this computers list? (Y/n):
DC1$ S-1-5-21-3099202228-3607437695-3279060739-1000 DONE
WS2$ S-1-5-21-3099202228-3607437695-3279060739-1113 DONE
WS$ S-1-5-21-3099202228-3607437695-3279060739-1107 DONE
WS3$ S-1-5-21-3099202228-3607437695-3279060739-1127 DONE
# samba_allow_nsupdate --action=allow WS$ WS2$ --computers-base-dn="DC=test,DC=alt" --domain-dns="test.alt"
Domain: test.alt
Domain DN: DC=test,DC=alt
Computers search base DN: DC=test,DC=alt
Action: allow
Selected computers list:
WS$
WS2$
Allow self nsupdate for this computers list? (Y/n):
WS$ S-1-5-21-3099202228-3607437695-3279060739-1107 DONE
WS2$ S-1-5-21-3099202228-3607437695-3279060739-1113 DONE
samba-tool dsacl
.
samba-tool
.
Примечание
-H
или --URL=
. Например:
# samba-tool sites list -H ldap://<DC> -Uadministrator
По умолчанию в качестве значения опции -H
передается текущий узел в формате ldap://<имя узла>.
Таблица 6.11. Команды управления сайтами samba-tool
Команда
|
Описание
|
Примечание
|
---|---|---|
sites create <сайт> [опции]
|
Добавить новый сайт
|
В качестве аргумента (
сайт ) ожидается общее имя (CN) сайта.
После создания сайта в него могут быть добавлены контроллеры домена, например, путём передачи имени сайта в параметре
--site=SITE при выполнении операции присоединения (см. Присоединение к домену в роли контроллера домена).
|
sites list [опции]
|
Вывести список сайтов
|
Подкоманда поддерживает два формата представления информации о сайтах:
|
sites remove <сайт> [опции]
|
Удалить сайт
|
В качестве аргумента (
сайт ) ожидается общее имя (CN) сайта.
|
sites subnet <подкоманда>
|
Подкоманды управления подсетью
|
|
sites view <сайт> [опции]
|
Вывести информацию об отдельном сайте
|
В качестве аргумента (
сайт ) ожидается общее имя (CN) сайта.
Подкоманда выводит тот же набор атрибутов сайта, что и подкоманда
samba-tool sites list --json
|
Таблица 6.12. Команды управления подсетями samba-tool
Команда
|
Описание
|
Примечание
|
---|---|---|
sites subnet create <подсеть> <сайт> [опции]
|
Создать новую подсеть
|
Параметры вызова:
|
sites subnet list <сайт> [опции]
|
Вывести список подсетей сайта
|
В качестве аргумента (
сайт ) ожидается общее имя (CN) сайта.
Подкоманда поддерживает два формата представления информации о подсетях:
|
sites subnet remove <подсеть> [опции]
|
Удалить подсеть
|
В качестве аргумента (
подсеть ) ожидается общее имя (CN) существующей подсети.
|
sites subnet set-site <подсеть> <сайт> [опции]
|
Закрепить подсеть за сайтом
|
Параметры вызова:
|
sites subnet view <подсеть> [опции]
|
Просмотр сведений о подсети
|
В качестве аргумента (
подсеть ) ожидается общее имя (CN) существующей подсети.
Подкоманда выводит тот же набор атрибутов подсети, что и подкоманда
samba-tool subnet list --json
|
Примечание
$ samba-tool sites subnet view --help
# samba-tool sites list
--json
{
"Default-First-Site-Name": {
"cn": "Default-First-Site-Name",
"distinguishedName": "CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt",
"dn": "CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=alt",
"instanceType": 4,
"name": "Default-First-Site-Name",
"objectCategory": "CN=Site,CN=Schema,CN=Configuration,DC=test,DC=alt",
"objectClass": [
"top",
"site"
],
"objectGUID": "4dbdb4a9-ebe9-4ff8-a047-40da60136056",
"showInAdvancedViewOnly": true,
"systemFlags": 1107296256
}
}
# samba-tool sites view Default-First-Site-Name
# samba-tool sites create newSite
Site newSite created !
# samba-tool sites subnet create 192.168.10.0/24 newSite
Subnet 192.168.10.0/24 created !
# samba-tool sites subnet list newSite --json
{
"192.168.10.0/24": {
"cn": "192.168.10.0/24",
"distinguishedName": "CN=192.168.10.0/24,CN=Subnets,CN=Sites,CN=Configuration,DC=test,DC=alt",
"dn": "CN=192.168.10.0/24,CN=Subnets,CN=Sites,CN=Configuration,DC=test,DC=alt",
"instanceType": 4,
"name": "192.168.10.0/24",
"objectCategory": "CN=Subnet,CN=Schema,CN=Configuration,DC=test,DC=alt",
"objectClass": [
"top",
"subnet"
],
"objectGUID": "5ebde1f9-5369-4673-a10a-b9c10310d137",
"showInAdvancedViewOnly": true,
"siteObject": "CN=newSite,CN=Sites,CN=Configuration,DC=test,DC=alt",
"systemFlags": 1073741824
}
}
# samba-tool sites subnet set-site 192.168.10.0/24 newSite
Subnet 192.168.10.0/24 shifted to site newSite
# samba-tool sites subnet remove 192.168.10.0/24
passwordsettings
утилиты samba-tool
.
# samba-tool domain passwordsettings show
# 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 …
CN=<имя парольной политики>,CN=Password Settings Container,CN=System,DC=<domain>.
Примечание
#Если объектов 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"
pso
утилиты samba-tool
.
# 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 <pso-name> <precedence> [options]
Примечание
# samba-tool domain passwordsettings pso apply <pso-name> <user-or-group-name> [options]
Подкоманда обеспечивает применение атрибутов парольной политики (PSO) с указанным именем (<pso-name>) к указанному пользователю или группе пользователей (<user-or-group-name>).
# 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'.
# samba-tool domain passwordsettings pso list [options]
Эта подкоманда выводит список всех парольных политик (PSO), доступных в домене, в виде таблицы со столбцами Precedence и PSO name.
Примечание
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
может не существовать или его настройки могут отличаться от настроек контроллера домена).
Примечание
samba-tool dbcheck
и исправить все ошибки, о которых она сообщает.
Примечание
#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-2024-06-04T16-15-49.475857.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
) на всех контроллерах домена. Этот шаг можно пропустить если используется переименованная резервная копия.
samba-tool domain backup restore
, с требуемыми параметрами для восстановления базы данных домена на одном новом контроллере домена.
samba
на новом контроллере домена.
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-2024-06-04T16-15-49.475857.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.
Примечание
--keep-dns-realm
, пользователи могут использовать для входа в домен свои полные UPN-имена. В противном случае они могут использовать имена в формате user@new-realm (при условии, что конфигурация Kerberos корректно обрабатывает новую область);
Примечание
samba-tool domain backup rename
делает клон работающей базы данных DC, в процессе клонирования переименовывает домен и создаёт файл резервной копии;
samba-tool domain backup restore
из файла резервной копии формирует файлы, необходимые для запуска нового контроллера домена Samba.
# samba-tool domain backup rename
<new-domain-netbios> \
<newdomain-dns-realm> --server=<dc-to-backup> \
--targetdir=<output-dir> --no-secrets -UAdministrator
где
Предупреждение
--no-secrets
исключает из резервной копии конфиденциальную информацию о паролях (например, такие атрибуты, как unicodePwd
, lmPwdHistory
и т. д.) для всех пользователей в домене. При этом, файл резервной копии по-прежнему содержит конфиденциальную информацию, такую как имена учётных записей пользователей.
/var/samba-backup-rename/samba-backup-newtest.alt-<timestamp>.tar.bz2
.
smb.conf
, максимально соответствующий производственному контроллеру домена, и передать его команде резервного копирования (с помощью параметра --configfile=smb.conf
). Это гарантирует, что резервная копия будет содержать smb.conf
, точно соответствующий домену.
#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... …
/var/samba-backup-rename/samba-backup-newtest.alt-<timestamp>.tar.bz2
может использоваться для восстановления клонированной и переименованной базы данных на диске. В восстановленном домене будет только один новый контроллер домена с именем, указанными с помощью опции --newservername
. В последующем к нему могут быть присоединены другие контроллеры домена. Для указания нового каталога для размещения всех файлов службы каталогов (smb.conf, sam.ldb и т. п.) может использоваться опция --targetdir
.
# samba-tool domain backup restore
--backup-file=<tar-file> \
--newservername=<DC-name> --targetdir=<new-samba-dir>
где
#mkdir /var/lib/samba/newtest
#samba-tool domain backup restore
--targetdir=/var/lib/samba/newtest \ --newservername=NEWDC1 --backup-file=/home/user/samba-backup-newtest.alt.alt-2024-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
smb.conf
(например, /var/lib/samba/newtest/etc/smb.conf
) и в файле /etc/krb5.conf
, и при необходимости вручную внести в них изменения.
smb.conf
(это гарантирует, что Samba загрузит правильные файлы базы данных для нового домена). Например:
# samba -s /var/lib/samba/newtest/etc/smb.conf
samba_dnsupdate
запускается автоматически и добавляет записи DNS для нового домена.
samba
можно проверить правильность работы нового контроллера домена, например, выполнив команду:
# ldbsearch -H ldap://NEWDC1 -UAdministrator
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-2024-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.6) 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.
--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-адресам на контроллере домена, на котором разворачиваются данные из резервной копии. Избежать этой проблемы можно, указав аргумент --host-ip
во время восстановления (это имеет значение только на переименованных резервных копий).
samba-tool domain join DC
локальная копия базы данных полностью перезаписывается актуальной копией распределенной базы данных (происходит процесс «повторного ввода» контроллера в домен).
# 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) …Это нормально, и через некоторое время после полной репликации оно исчезнет. Репликация может занять до нескольких часов.
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-адреса.
Примечание
<service class>/<host>:<port>/<service name>
Примечание
Важно
samba-tool spn add
:
# 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):
И заново экспортировать keytab-файл.
# samba-tool spn list <user> [options]
В качестве аргумента передается имя учетной записи SAM (значение атрибута sAMaccountName).
# samba-tool spn delete <name> <user> [options]
В качестве аргументов передаются значение SPN (name) и имя учетной записи SAM (значение атрибута sAMaccountName).
# samba-tool user create
dhcpduser \
--description="Пользователь для обновления TSIG-GSSAPI DNS через DHCP-сервер" \
--random-password
User 'dhcpduser' added successfully
Установить срок действия пароля (бессрочный) для созданного пользователя и добавить его в группу DnsAdmins:
#samba-tool user setexpiry dhcpduser --noexpiry
Expiry for user 'dhcpduser' disabled. #samba-tool group addmembers DnsAdmins dhcpduser
Added members to group DnsAdmins
#samba-tool domain exportkeytab --principal=dhcpduser@TEST.ALT /etc/dhcp/dhcpduser.keytab
Export one principal to /etc/dhcp/dhcpduser.keytab #chown dhcpd:dhcp /etc/dhcp/dhcpduser.keytab
#chmod 400 /etc/dhcp/dhcpduser.keytab
Примечание
/usr/local/bin/dhcp-dyndns.sh
):
#!/bin/bash # # This script is for secure DDNS updates on Samba, # it can also add the 'macAddress' to the Computers object. # # Version: 0.9.6 # ########################################################################## # # # You can optionally add the 'macAddress' to the Computers object. # # Add 'dhcpduser' to the 'Domain Admins' group if used # # Change the next line to 'yes' to make this happen # Add_macAddress='no' # # ########################################################################## keytab=/etc/dhcp/dhcpduser.keytab usage() { cat >>-EOF USAGE: $(basename "$0") add ip-address dhcid|mac-address hostname $(basename "$0") delete ip-address dhcid|mac-address EOF } _KERBEROS() { # get current time as a number test=$(date +%d'-'%m'-'%y' '%H':'%M':'%S) # Note: there have been problems with this # check that 'date' returns something like # Check for valid kerberos ticket #logger "${test} [dyndns] : Running check for valid kerberos ticket" klist -c "${KRB5CCNAME}" -s ret="$?" if [ $ret -ne 0 ] then logger "${test} [dyndns] : Getting new ticket, old one has expired" kinit -F -k -t $keytab "${SETPRINCIPAL}" ret="$?" if [ $ret -ne 0 ] then logger "${test} [dyndns] : dhcpd kinit for dynamic DNS failed" exit 1 fi fi } rev_zone_info() { local RevZone="$1" local IP="$2" local rzoneip rzoneip="${RevZone%.in-addr.arpa}" local rzonenum rzonenum=$(echo "$rzoneip" | tr '.' '\n') declare -a words for n in $rzonenum do words+=("$n") done local numwords="${#words[@]}" unset ZoneIP unset RZIP unset IP2add case "$numwords" in 1) # single ip rev zone '192' ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1}') RZIP="${rzoneip}" IP2add=$(echo "${IP}" | awk -F '.' '{print $4"."$3"."$2}') ;; 2) # double ip rev zone '168.192' ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1"."$2}') RZIP=$(echo "${rzoneip}" | awk -F '.' '{print $2"."$1}') IP2add=$(echo "${IP}" | awk -F '.' '{print $4"."$3}') ;; 3) # triple ip rev zone '0.168.192' ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1"."$2"."$3}') RZIP=$(echo "${rzoneip}" | awk -F '.' '{print $3"."$2"."$1}') IP2add=$(echo "${IP}" | awk -F '.' '{print $4}') ;; *) # should never happen exit 1 ;; esac } BINDIR=$(samba -b | grep 'BINDIR' | grep -v 'SBINDIR' | awk '{print $NF}') [[ -z $BINDIR ]] && printf "Cannot find the 'samba' binary, is it installed ?\\nOr is your path set correctly ?\\n" WBINFO="$BINDIR/wbinfo" SAMBATOOL=$(command -v samba-tool) [[ -z $SAMBATOOL ]] && printf "Cannot find the 'samba-tool' binary, is it installed ?\\nOr is your path set correctly ?\\n" MINVER=$($SAMBATOOL -V | grep -o '[0-9]*' | tr '\n' ' ' | awk '{print $2}') if [ "$MINVER" -gt '14' ] then KTYPE="--use-kerberos=required" else KTYPE="-k yes" fi # DHCP Server hostname Server=$(hostname -s) # DNS domain domain=$(hostname -d) if [ -z "${domain}" ] then logger "Cannot obtain domain name, is DNS set up correctly?" logger "Cannot continue... Exiting." exit 1 fi # Samba realm REALM="${domain^^}" # krbcc ticket cache export KRB5CCNAME="/tmp/dhcp-dyndns.cc" # Kerberos principal SETPRINCIPAL="dhcpduser@${REALM}" # Kerberos keytab as above # krbcc ticket cache : /tmp/dhcp-dyndns.cc TESTUSER="$($WBINFO -u | grep 'dhcpduser')" if [ -z "${TESTUSER}" ] then logger "No AD dhcp user exists, need to create it first.. exiting." logger "you can do this by typing the following commands" logger "kinit Administrator@${REALM}" logger "$SAMBATOOL user create dhcpduser --random-password --description='Unprivileged user for DNS updates via DHCP server'" logger "$SAMBATOOL user setexpiry dhcpduser --noexpiry" logger "$SAMBATOOL group addmembers DnsAdmins dhcpduser" exit 1 fi # Check for Kerberos keytab if [ ! -f "$keytab" ] then logger "Required keytab $keytab not found, it needs to be created." logger "Use the following commands as root" logger "$SAMBATOOL domain exportkeytab --principal=${SETPRINCIPAL} $keytab" logger "chown XXXX:XXXX $keytab" logger "Replace 'XXXX:XXXX' with the user & group that dhcpd runs as on your distro" logger "chmod 400 $keytab" exit 1 fi # Variables supplied by dhcpd.conf action="$1" ip="$2" DHCID="$3" name="${4%%.*}" # Exit if no ip address if [ -z "${ip}" ] then usage exit 1 fi # Exit if no computer name supplied, unless the action is 'delete' if [ -z "${name}" ] then if [ "${action}" = "delete" ] then name=$(host -t PTR "${ip}" | awk '{print $NF}' | awk -F '.' '{print $1}') else usage exit 1 fi fi # exit if name contains a space case ${name} in *\ * ) logger "Invalid hostname '${name}' ...Exiting" exit ;; esac # if you want computers with a hostname that starts with 'dhcp' in AD # comment the following block of code. if [[ $name == dhcp* ]] then logger "not updating DNS record in AD, invalid name" exit 0 fi ## update ## case "${action}" in add) _KERBEROS count=0 # does host have an existing 'A' record ? mapfile -t A_REC < <($SAMBATOOL dns query "${Server}" "${domain}" "${name}" A "$KTYPE" 2>/dev/null | grep 'A:' | awk '{print $2}') if [ "${#A_REC[@]}" -eq 0 ] then # no A record to delete result1=0 $SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE" result2="$?" elif [ "${#A_REC[@]}" -gt 1 ] then for i in "${A_REC[@]}" do $SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${i}" "$KTYPE" done # all A records deleted result1=0 $SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE" result2="$?" elif [ "${#A_REC[@]}" -eq 1 ] then # turn array into a variable VAR_A_REC="${A_REC[*]}" if [ "$VAR_A_REC" = "${ip}" ] then # Correct A record exists, do nothing logger "Correct 'A' record exists, not updating." result1=0 result2=0 count=$((count+1)) elif [ "$VAR_A_REC" != "${ip}" ] then # Wrong A record exists logger "'A' record changed, updating record." $SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${VAR_A_REC}" "$KTYPE" result1="$?" $SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE" result2="$?" fi fi # get existing reverse zones (if any) ReverseZones=$($SAMBATOOL dns zonelist "${Server}" "$KTYPE" --reverse | grep 'pszZoneName' | awk '{print $NF}') if [ -z "$ReverseZones" ]; then logger "No reverse zone found, not updating" result3='0' result4='0' count=$((count+1)) else for revzone in $ReverseZones do rev_zone_info "$revzone" "${ip}" if [[ ${ip} = $ZoneIP* ]] && [ "$ZoneIP" = "$RZIP" ] then # does host have an existing 'PTR' record ? PTR_REC=$($SAMBATOOL dns query "${Server}" "${revzone}" "${IP2add}" PTR "$KTYPE" 2>/dev/null | grep 'PTR:' | awk '{print $2}' | awk -F '.' '{print $1}') if [[ -z $PTR_REC ]] then # no PTR record to delete result3=0 $SAMBATOOL dns add "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE" result4="$?" break elif [ "$PTR_REC" = "${name}" ] then # Correct PTR record exists, do nothing logger "Correct 'PTR' record exists, not updating." result3=0 result4=0 count=$((count+1)) break elif [ "$PTR_REC" != "${name}" ] then # Wrong PTR record exists # points to wrong host logger "'PTR' record changed, updating record." $SAMBATOOL dns delete "${Server}" "${revzone}" "${IP2add}" PTR "${PTR_REC}"."${domain}" "$KTYPE" result3="$?" $SAMBATOOL dns add "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE" result4="$?" break fi else continue fi done fi ;; delete) _KERBEROS count=0 $SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE" result1="$?" # get existing reverse zones (if any) ReverseZones=$($SAMBATOOL dns zonelist "${Server}" --reverse "$KTYPE" | grep 'pszZoneName' | awk '{print $NF}') if [ -z "$ReverseZones" ] then logger "No reverse zone found, not updating" result2='0' count=$((count+1)) else for revzone in $ReverseZones do rev_zone_info "$revzone" "${ip}" if [[ ${ip} = $ZoneIP* ]] && [ "$ZoneIP" = "$RZIP" ] then host -t PTR "${ip}" > /dev/null 2>&1 ret="$?" if [ $ret -eq 0 ] then $SAMBATOOL dns delete "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE" result2="$?" else result2='0' count=$((count+1)) fi break else continue fi done fi result3='0' result4='0' ;; *) logger "Invalid action specified" exit 103 ;; esac result="${result1}:${result2}:${result3}:${result4}" if [ "$count" -eq 0 ] then if [ "${result}" != "0:0:0:0" ] then logger "DHCP-DNS $action failed: ${result}" exit 1 else logger "DHCP-DNS $action succeeded" fi fi if [ "$Add_macAddress" != 'no' ] then if [ -n "$DHCID" ] then Computer_Object=$(ldbsearch "$KTYPE" -H ldap://"$Server" "(&(objectclass=computer)(objectclass=ieee802Device)(cn=$name))" | grep -v '#' | grep -v 'ref:') if [ -z "$Computer_Object" ] then # Computer object not found with the 'ieee802Device' objectclass, does the computer actually exist, it should. Computer_Object=$(ldbsearch "$KTYPE" -H ldap://"$Server" "(&(objectclass=computer)(cn=$name))" | grep -v '#' | grep -v 'ref:') if [ -z "$Computer_Object" ] then logger "Computer '$name' not found. Exiting." exit 68 else DN=$(echo "$Computer_Object" | grep 'dn:') objldif="$DN changetype: modify add: objectclass objectclass: ieee802Device" attrldif="$DN changetype: modify add: macAddress macAddress: $DHCID" # add the ldif echo "$objldif" | ldbmodify "$KTYPE" -H ldap://"$Server" ret="$?" if [ $ret -ne 0 ] then logger "Error modifying Computer objectclass $name in AD." exit "${ret}" fi sleep 2 echo "$attrldif" | ldbmodify "$KTYPE" -H ldap://"$Server" ret="$?" if [ "$ret" -ne 0 ]; then logger "Error modifying Computer attribute $name in AD." exit "${ret}" fi unset objldif unset attrldif logger "Successfully modified Computer $name in AD" fi else DN=$(echo "$Computer_Object" | grep 'dn:') attrldif="$DN changetype: modify replace: macAddress macAddress: $DHCID" echo "$attrldif" | ldbmodify "$KTYPE" -H ldap://"$Server" ret="$?" if [ "$ret" -ne 0 ] then logger "Error modifying Computer attribute $name in AD." exit "${ret}" fi unset attrldif logger "Successfully modified Computer $name in AD" fi fi fi exit 0
Примечание
Add_macAddress='no'на:
Add_macAddress='yes'Следует обратить внимание, что необходимо предоставить права администратора домена пользователю обновления DNS.
# chmod 755 /usr/local/bin/dhcp-dyndns.sh
# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
/etc/dhcp/dhcpd.conf
:
authoritative; ddns-update-style none; subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option time-offset 0; option routers 192.168.0.1; option domain-name-servers 192.168.0.122, 192.168.0.123; option ntp-servers 192.168.0.122, 192.168.0.123; option domain-name "test.alt"; default-lease-time 3600; pool { max-lease-time 1800; #30 минут range 192.168.0.150 192.168.0.200; } } on commit { set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address)); set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) ); set ClientName = pick-first-value(option host-name, config-option host-name, client-name, noname); log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName)); execute("/usr/local/bin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName); } on release { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) ); log(concat("Release: IP: ", ClientIP)); execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, ClientDHCID); } on expiry { set ClientIP = binary-to-ascii(10, 8, ".", leased-address); # cannot get a ClientMac here, apparently this only works when actually receiving a packet log(concat("Expired: IP: ", ClientIP)); # cannot get a ClientName here, for some reason that always fails # however the dhcp update script will obtain the short hostname. execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, "", "0"); }
# control dhcpd-chroot disabled
# systemctl restart dhcpd
dhcpd[7817]: DHCPDISCOVER from 08:00:27:99:a6:1f via enp0s3 dhcpd[7817]: DHCPOFFER on 192.168.0.150 to 08:00:27:99:a6:1f (host-199) via enp0s3 dhcpd[7817]: Commit: IP: 192.168.0.150 DHCID: 08:00:27:99:a6:1f Name: host-199 dhcpd[7817]: execute_statement argv[0] = /usr/local/bin/dhcp-dyndns.sh dhcpd[7817]: execute_statement argv[1] = add dhcpd[7817]: execute_statement argv[2] = 192.168.0.150 dhcpd[7817]: execute_statement argv[3] = 08:00:27:99:a6:1f dhcpd[7817]: execute_statement argv[4] = host-199 dhcpd[8228]: 17-07-24 08:55:31 [dyndns] : Getting new ticket, old one has expired dhcpd[8236]: 'A' record changed, updating record. dhcpd[8237]: Record deleted successfully dhcpd[8240]: Record added successfully dhcpd[8268]: Record added successfully dhcpd[8271]: DHCP-DNS add succeeded dhcpd[7817]: DHCPREQUEST for 192.168.0.125 (192.168.0.122) from 08:00:27:99:a6:1f (host-199) via enp0s3 dhcpd[7817]: DHCPACK on 192.168.0.150 to 08:00:27:99:a6:1f (host-199) via enp0s3
#host host-199
host-199.test.alt has address 192.168.0.150 host-199.test.alt has IPv6 address fd47:d11e:43c1:0:a00:27ff:fe99:a61f #host 192.168.0.150
150.0.168.192.in-addr.arpa domain name pointer host-199.test.alt.
# tsig-keygen -a hmac-md5 omapi_key
key "omapi_key" {
algorithm hmac-md5;
secret "KKkAspinSr/nXYXhAv7CTQ==";
};
Как на ведущем, так и на ведомом устройстве должен быть настроен специальный раздел, путём добавления следующих строк в файл /etc/dhcp/dhcpd.conf
:
omapi-port 7911; omapi-key omapi_key; key "omapi_key" { algorithm hmac-md5; secret "Секретный_ключ"; };«Секретный_ключ» следует заменить на ключ, полученный на предыдущем шаге.
/etc/dhcp/dhcpd.conf
перед разделом subnet следует добавить строки:
omapi-port 7911; omapi-key omapi_key; key "omapi_key" { algorithm hmac-md5; secret "KKkAspinSr/nXYXhAv7CTQ=="; }; failover peer "dhcp-failover" { primary; address dc1.test.alt; # Полное DNS-имя основного DHCP-сервера port 847; peer address dc2.test.alt; # Полное DNS-имя имя резервного DHCP-сервера peer port 647; max-response-delay 60; max-unacked-updates 10; mclt 3600; split 128; load balance max seconds 3; }И добавить ссылку на подсеть/пул, которые будут выполнять аварийное переключение в раздел pool:
pool { failover peer "dhcp-failover"; # Add for failover max-lease-time 1800; #30 минут range 192.168.0.150 192.168.0.200; }
#scp dc1:/usr/local/bin/dhcp-dyndns.sh /usr/local/bin/
#scp dc1:/etc/dhcp/dhcpduser.keytab /etc/dhcp/
#chown dhcpd:dhcp /etc/dhcp/dhcpduser.keytab
Примечание
#cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
#scp dc1:/etc/dhcp/dhcpd.conf /etc/dhcp/
/etc/dhcp/dhcpd.conf
внести изменения в раздел «failover peer "dhcp-failover"»:
failover peer "dhcp-failover" { secondary; address dc2.test.alt; # Полное DNS-имя имя резервного DHCP-сервера port 647; peer address dc1.test.alt; # Полное DNS-имя основного DHCP-сервера peer port 847; max-response-delay 60; max-unacked-updates 10; load balance max seconds 3; }
# control dhcpd-chroot disabled
Примечание
split
должен быть установлен только на ведущем DHCP-сервере. Этот параметр управляет балансировкой нагрузки двух серверов. Параметр может принимать значения от 0 до 255. Если установлено значение «255», основной сервер, если он не отключен (по какой-либо причине), будет отвечать на все запросы DHCP. Если установить значение «128», то оба DHCP-сервера будут использоваться одинаково. Подробности смотрите на man-странице dhcpd.conf.
# systemctl restart dhcpd
В системном журнале на обоих серверах должны появиться записи вида:
dhcpd[7879]: failover peer dhcp-failover: peer moves from recover-done to normal dhcpd[7879]: failover peer dhcp-failover: Both servers normal
Примечание
$ samba-tool dns add dc1.test.alt test.alt web A 192.168.0.150 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
где dc1.test.alt — имя контроллера домена.
$ samba-tool dns zonecreate dc1.test.alt 0.168.192.in-addr.arpa -Uadministrator
Password for [TEST\administrator]:
Zone 0.168.192.in-addr.arpa created successfully
$ samba-tool dns add dc1.test.alt 0.168.192.in-addr.arpa 150 PTR web.test.alt
#samba-tool user add --random-password webauth
#samba-tool user setexpiry webauth --noexpiry
#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 apache2:apache2 /etc/httpd2/conf/httpd.keytab
#chmod 0440 /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 user add --random-password nginxauth
#samba-tool user setexpiry nginxauth --noexpiry
#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
файла конфигурации сайта:
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", "AuthNegotiateDelegateAllowlist": "*.test.alt" }где .test.alt — имя Kerberos области (realm).
chrome://policy
.
Примечание
$ chromium-browser --auth-server-whitelist="*.test.alt"
/etc/opt/yandex/browser/policies/managed/policies.json
добавить строки:
{ "AuthServerAllowlist": "*.test.alt", "AuthNegotiateDelegateAllowlist": "*.test.alt" }Где .test.alt — имя Kerberos области (realm).
browser://policy
.
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
Таблица 6.13. Уровни журналирования SSSD
Уровень
|
Описание
|
---|---|
0, 0x0010
|
Фатальные ошибки. Ошибки, которые не позволяют запустить службу SSSD или вызывает завершение работы сервиса
|
1, 0x0020
|
Критические ошибки. Ошибки, которые не завершают работу службы SSSD, но как минимум одна из основных функций не работает должным образом
|
2, 0x0040
|
Серьёзные ошибки. Ошибки, сообщающие о том, что определенный запрос или операция завершились неудачно. Это уровень журналирования по умолчанию
|
3, 0x0080
|
Незначительные ошибки. Ошибки, которые могут стать причиной ошибок второго уровня (ошибок при выполнении действий)
|
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.
Таблица 6.14. Настройки 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
|
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
).
offline_credentials_expiration
в разделе [pam], чтобы установить ограничение по времени (в днях), в течении которого пользователи смогут аутентифицироваться в автономном режиме с момента последнего успешного входа.
[pam] offline_credentials_expiration = 5 [domain/TEST.ALT] cache_credentials = true
control sssd-cache-credentials
. Например:
# control sssd-cache-credentials
default
# control sssd-cache-credentials enabled
default
# control sssd-cache-credentials disabled
default
Примечание
Примечание
# 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
.
Важно
/var/log/samba/
.
log file
, который задается в разделе [global]
файла /etc/samba/smb.conf
. Параметр представляет собой список бэкэндов, разделенных пробелом, в формате:
logging = backend1[:option][@loglevel] backendN[:option][@loglevel]Где:
backend
— один из доступных бэкендов:
log file
, либо в стандартные файлы журналов Samba в каталоге /var/log/samba/
;
logging = ringbuf:size=NBYTES(значение по умолчанию — 1 МБ).
[:option]
— дополнительные опции, специфичные для указанного бэкенда;
[@loglevel]
— уровень журналирования. Если для бэкенда данный параметр не установлен, в бэкенд отправляются все сообщения. Параметр log level
определяет общие уровни журнала, а указанные здесь уровни определяют, что отправляется на отдельные бэкенды.
Примечание
logging
задан, то его значение переопределяет значения параметров syslog
и syslog only
.
logging
не задан.
logging
:
logging = syslog@1 file
log file
в разделе [global]
файла /etc/samba/smb.conf
позволяет переопределить файл журнала Samba.
log file
использует стандартные подстановки, что позволят иметь отдельные файлы журналов для различных сущностей и объектов, обслуживаемых Samba.
%m
— NetBIOS-имя клиентской машины. Этот параметр недоступен, когда Samba прослушивает порт 445, поскольку клиенты больше не отправляют эту информацию. Для возможности использования этой подстановки следует установить в разделе [global]
параметр:
smbports = 139
%M
— интернет-имя клиентской машины;
%I
— IP-адрес клиентской машины;
%i
— локальный IP-адрес, с которым установил соединение клиент;
%T
— текущие дата и время;
%U
— имя пользователя сессии.
Примечание
man smb.conf
).
/var/log/samba/
следует задать параметр следующим образом:
log file = /var/log/samba/%m.log
max log size
в разделе [global]
файла /etc/samba/smb.conf
определяет максимальный размер файла журнала. Значение параметра задается в килобайтах. Samba периодически проверяет размер файла журнала и, если он превышен, переименовывает файл, добавляя расширение .old и создает новый файл.
max log size
означает отсутствие ограничений. Значение по умолчанию 5000.
max log size = 1000
Примечание
log level
файла /etc/samba/smb.conf
. Для разных классов отладки можно указывать разные уровни журналирования и отдельные файлы журналов.
Таблица 6.15. Классы отладки
Класс отладки
|
Описание
|
---|---|
all
|
Включает все сообщения отладки и подходит для общего мониторинга системы
|
tdb
|
Отвечает за отладку работы с TDB (Trivial Database). TDB — это простая встраиваемая база данных, используемая Samba для хранения различных данных, таких как сессии, аутентификационные данные, метаданные файлов и другие внутренние структуры
|
printdrivers
|
Используется для отладки драйверов печати. Этот класс полезен для отладки и анализа работы с принтерами, включая загрузку, установку и настройку драйверов
|
lanman
|
Предназначен для отладки протоколов LAN Manager, что может быть полезно при работе с устаревшими системами или приложениями
|
smb
|
Предназначен для регистрации вызовов по протоколу SMB
|
rpc_parse
|
Включает информацию об обработке RPC-сообщений. Может использоваться при анализе репликации
|
rpc_srv
|
Включает информацию о регистрации конечных точек RPC
|
rpc_cli
|
Предназначен для регистрации информации, связанной с работой RPC-клиента (Remote Procedure Call). Используется для отладки взаимодействия между клиентом и сервером в контексте RPC-вызовов, которые используются для выполнения различных операций в Samba, таких как управление доменными службами, доступ к общим ресурсам и другие действия, связанные с протоколами SMB/CIFS
|
passdb
|
Предназначен для регистрации доступа к хранилищу данных паролей
|
sam
|
Предназначен для регистрации событий, связанных с управлением учетными записями пользователей и групп в AD (SAM — Security Accounts Manager)
|
auth
|
Предназначен для регистрации событий аутентификации пользователей. Включает процессы проверки учетных данных (логин/пароль), использование Kerberos, NTLM и других механизмов аутентификации
|
winbind
|
Предназначен для регистрации сообщений при присоединении клиентов к Samba для проведения различных операций. Позволяет анализировать работу сервиса Winbind
|
vfs
|
Предназначен для журналирования проблем с правами доступа и некорректным поведением бэкенда, абстрагируемого VFS
|
idmap
|
Предназначен для регистрации событий установки соответствия между SID и группами в Linux (Identity Mapping)
|
quota
|
Предназначен для регистрации информации, связанной с управлением квотами (quotas) на файловых системах. Квоты используются для ограничения объема дискового пространства, которое может использовать пользователь или группа
|
acls
|
Предназначен для регистрации событий проверки и изменения прав доступа на основе списков управления доступом (Access Control Lists)
|
locking
|
Предназначен для регистрации событий блокировок файлов базы данных каталога и конкретных записей при одновременном доступе к ним разных клиентов
|
msdfs
|
Предназначен для регистрации событий, связанных с поддержкой DFS (Distributed File System) в Samba. DFS позволяет объединять несколько общих ресурсов в одну виртуальную иерархию
|
dmapi
|
Предназначен для регистрации событий, связанных с использованием DMAPI (Data Management API) в Samba
|
registry
|
Предназначен для регистрации взаимодействия с данными реестра Windows, которые используются в службе каталогов
|
scavenger
|
Предназначен для регистрации событий «сборки мусора» (garbage collection) в Samba. Этот процесс используется для очистки устаревших или неиспользуемых данных, таких как открытые файлы, сессии, аутентификации и другие ресурсы, которые больше не нужны
|
dns
|
Предназначен для регистрации запросов на поиск и изменение записей DNS
|
ldb
|
Предназначен для регистрации подключений к базе данных LDAP
|
tevent
|
Предназначен для регистрации сообщений библиотеки управления памятью talloc
|
auth_audit, auth_json_audit
|
Предназначены для регистрации событий аутентификации и авторизации учетных записей (успешных и неуспешных попытках входа в систему, изменениях паролей и изменениях статусов учетных записей). Могут использоваться, например, для отслеживания попыток несанкционированного входа
|
kerberos
|
Предназначен для регистрации событий взаимодействия по протоколу Kerberos
|
drs_repl
|
Предназначен для регистрации событий входящей и исходящей репликации на контроллере домена
|
smb2
|
Предназначен для регистрации вызовов по протоколу SMB (SMB2 и SMB3)
|
smb2_credits
|
Предназначен для регистрации запросов передачи данных по протоколу SMB. Записи содержат информацию о количестве переданных запросов и количестве запросов, которые осталось выполнить для завершения передачи файлов
|
dsdb_audit, dsdb_json_audit
|
Предназначены для регистрации изменений в базе данных контроллера домена Samba (sam.ldb) (изменения пользователей, групп, разрешений, структуры каталога и т. д.)
|
dsdb_password_audit, dsdb_password_json_audit
|
Предназначены для регистрации событий изменения и сброса паролей
|
dsdb_transaction_audit, dsdb_transaction_json_audit
|
Предназначены для регистрации транзакций (фиксация, откат) в базе данных каталога. Могут использоваться для контроля целостности данных
|
dsdb_group_audit, dsdb_group_json_audit
|
Предназначены для регистрации изменений в составе групп
|
@PATH
к классу.
man smb.conf
).
smb.conf
log level
для настройки уровня журналирования:
log level = 3
log level = 3 passdb:5 auth:5
/var/log/winbind.log
:
log level = 3 winbind:1@/var/log/winbind.log
log level
в файле /etc/samba/smb.conf
. Для всех команд Samba это значение можно переопределить, используя следующую опцию:
-d DEBUGLEVEL, --debuglevel=DEBUGLEVELНапример:
$net usershare add Share2 /tmp/share2 -d 5
#samba-tool group add testgroup12 -d dsdb_audit:3
Примечание
auth_audit
для ведения записи в стандартном формате и auth_json_audit
для ведения записи в формате JSON).
Примечание
Примечание
auth_audit
— регистрация в стандартном формате;
auth_json_audit
— регистрация в формате JSON.
auth_audit
и auth_json_audit
доступны следующие уровни журналирования (каждый последующий уровень включает все предшествующие ему):
[global]
файла /etc/samba/smb.conf
:
log level = 1 auth_audit:3 auth_json_audit:3
[2024/05/29 14:32:52.509247, 2] ../../auth/auth_log.c:858(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[ivanov\\@TEST@TEST.ALT] at [Wed, 29 May 2024 14:32:52.509236 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.135:51947] mapped to [TEST]\[ivanov]. local host [NULL] [2024/05/29 14:39:06.426556, 3] ../../auth/auth_log.c:858(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[ivanov\\@TEST@TEST.ALT] at [Wed, 29 May 2024 14:39:06.426540 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.135:55134] became [TEST]\[ivanov] [S-1-5-21-578923263-1107570656-1287136478-1103]. local host [NULL]
{"timestamp": "2024-05-29T14:32:52.509393+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 3}, "eventId": 4625, "logonId": "5bd240f7cc4de1b5", "logonType": 3, "status": "NT_STATUS_WRONG_PASSWORD", "localAddress": null, "remoteAddress": "ipv4:192.168.0.135:51947", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "ivanov\\@TEST@TEST.ALT", "workstation": null, "becameAccount": "ivanov", "becameDomain": "TEST", "becameSid": "S-1-5-21-578923263-1107570656-1287136478-1103", "mappedAccount": "ivanov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null, "duration": 3129}} {"timestamp": "2024-05-29T14:39:06.426725+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 3}, "eventId": 4624, "logonId": "11424f6685e647f9", "logonType": 3, "status": "NT_STATUS_OK", "localAddress": null, "remoteAddress": "ipv4:192.168.0.135:55134", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "ivanov\\@TEST@TEST.ALT", "workstation": null, "becameAccount": "ivanov", "becameDomain": "TEST", "becameSid": "S-1-5-21-578923263-1107570656-1287136478-1103", "mappedAccount": "ivanov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null, "duration": 5421}}
dsdb_audit
— регистрация в стандартном формате;
dsdb_json_audit
— регистрация в формате JSON.
dsdb_group_audit
— регистрация в стандартном формате;
dsdb_group_json_audit
— регистрация в формате JSON.
dsdb_audit
, dsdb_json_audit
, dsdb_group_audit
и dsdb_group_json_audit
доступны следующие уровни журналирования:
dsdb_password_audit
— регистрация в стандартном формате;
dsdb_password_json_audit
— регистрация в формате JSON.
Примечание
auth_audit
и auth_audit_json
.
dsdb_password_audit
и dsdb_password_json_audit
доступны следующие уровни журналирования:
dsdb_transaction_audit
— регистрация в стандартном формате;
dsdb_transaction_json_audit
— регистрация в формате JSON.
dsdb_transaction_audit
и dsdb_transaction_json_audit
доступны следующие уровни журналирования:
[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": 2024-05-29T14:32:52.509393+0200, "type": одно из значений "Authentication", "Authorization", "dsdbChange", "dsdbTransaction", "passwordChange", "replicatedUpdate", "groupChange", type: { data } }
Примечание
serviceDescription
), для параметра netlogonComputer
будет установлено значение «null», для параметра netlogonNegotiateFlags
будет установлено значение «0x00000000», другие параметры, оносящиеся к NETLOGON, будут иметь аналогичные пустые значения.
Таблица 6.16. Общие атрибуты
Атрибут
|
Значение
|
---|---|
version
|
Номер версии формата JSON. Состоит из двух частей:
Изменения в перечне возможных значений обычно не приводят к изменению версии. Это распространяется на все данные, предоставляемые клиентами. Также это относится, например, к атрибуту
passwordType , набор поддерживаемых форматов которого может меняться с течением времени без изменения версии в JSON.
|
Таблица 6.17. Атрибуты событий аутентификации
Атрибут
|
Значение
|
---|---|
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», если аутентификация не удалась после регистрации этого сообщения, но обычно имеет код ошибки.
Некоторые типы сообщений при неудачной аутентификации:
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 3} |
workstation
|
Заявленное имя клиентской рабочей станции
|
{"timestamp": "2024-05-29T14:39:06.426725+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 3}, "eventId": 4624, "logonId": "11424f6685e647f9", "logonType": 3, "status": "NT_STATUS_OK", "localAddress": null, "remoteAddress": "ipv4:192.168.0.135:55134", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "ivanov\\@TEST@TEST.ALT", "workstation": null, "becameAccount": "ivanov", "becameDomain": "TEST", "becameSid": "S-1-5-21-578923263-1107570656-1287136478-1103", "mappedAccount": "ivanov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null, "duration": 5421}}
Таблица 6.18. Успешные события авторизации
Атрибут
|
Значение
|
---|---|
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»)
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 2} |
{"timestamp": "2024-05-29T15:32:39.282334+0200", "type": "Authorization", "Authorization": {"version": {"major": 1, "minor": 2}, "localAddress": "ipv4:127.0.0.1:389", "remoteAddress": "ipv4:127.0.0.1:43350", "serviceDescription": "LDAP", "authType": "simple bind", "domain": "NT AUTHORITY", "account": "ANONYMOUS LOGON", "sid": "S-1-5-7", "sessionId": "5accdd86-4c6e-4bd2-8ab1-7e95f641ecf2", "logonServer": "DC1", "transportProtection": "NONE", "accountFlags": "0x00000010", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null}}
Таблица 6.19. События dsdbChange
Атрибут
|
Значение
|
---|---|
attributes
|
Список изменяемых атрибутов
|
dn
|
Уникальное составное имя (DN) изменяемого объекта
|
operation
|
Операция LDAP, соответствующая выполняемому действию по изменению данных:
|
performedAsSystem
|
Признак системного или пользовательского действия:
|
remoteAddress
|
Удаленный адрес пользователя, инициировавшего операцию
|
sessionId
|
Уникальный идентификатор (GUID) сессии аутентификации
|
status
|
Строка, указывающая на успешное завершение действия или невозможность его выполнения по той или иной причине; выводимая информация соответствует кодам ответа LDAP, которые фиксируются в атрибуте
statusCode .
Примеры значений:
|
Числовой код, соответствующий статусу в атрибуте
status
|
В общем случае в качестве значения атрибута приводится код ответа LDAP в соответствии с RFC 4511
|
transactionId
|
Уникальный идентификатор (GUID) транзакции, в рамках которой выполняется операция (если операция является частью транзакции)
|
userSid
|
Идентификатор безопасности (SID) пользователя, инициировавшего операцию
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 2} |
attributes
может рассматриваться в качестве аналога описания изменения в формате LDIF.
"dsdbChange": { "operation": "Modify", "dn": "@SAMBA_DSDB", "attributes": { "backupDate": {"actions": [ {"action": "add", "values": [ {"value": "2024-05-29T15:32:39.282334+0200"} ] } ] }}}описывает изменение, выполненное этим LDIF:
dn: @SAMBA_DSDB changetype: modify add: backupDate backupDate: 2024-05-29T15:32:39.282334+0200
redacted: true
.
truncated: true
, например:
"values": [ {truncated: true, "value": "It was the best of times, it was the worst of times, it was the age…" } ]
{"timestamp": "2024-05-29T09:52:14.813697+0200", "type": "dsdbChange", "dsdbChange": {"version": {"major": 1, "minor": 0}, "statusCode": 0, "status": "Success", "operation": "Modify", "remoteAddress": "ipv6:fd47:d11e:43c1:0:a00:27ff:fe9d:4de0:38500", "performedAsSystem": false, "userSid": "S-1-5-21-578923263-1107570656-1287136478-500", "dn": "CN=Марков Кирилл,CN=Users,DC=test,DC=alt", "transactionId": "ce759566-8bf9-46ce-95a1-0d632232a220", "sessionId": "48c760f6-6cdc-4fba-b16d-1689f2cfad33", "attributes": {"unicodePwd": {"actions": [{"action": "replace", "redacted": true}]}}}}
transactionId
.
Таблица 6.20. Атрибуты событий, связанных с транзакциями
Атрибут
|
Значение
|
---|---|
action
|
Текущий этап транзакции:
|
duration
|
Продолжительность транзакции в микросекундах (до момента записи этого поля)
|
transactionId
|
Уникальный идентификатор (GUID) транзакции
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 0} |
{"timestamp": "2024-05-29T20:41:36.895027+0200", "type": "dsdbTransaction", "dsdbTransaction": {"version": {"major": 1, "minor": 0}, "action": "commit", "transactionId": "a89149be-5c19-42c2-bf08-94ddc5b0eb78", "duration": 8819}} {"timestamp": "2024-05-29T20:41:37.691707+0200", "type": "dsdbTransaction", "dsdbTransaction": {"version": {"major": 1, "minor": 0}, "action": "commit", "transactionId": "92a8db3a-94d4-4ac5-b929-b1e4344b12e3", "duration": 5697}}
Таблица 6.21. Атрибуты событий, связанных с изменением пароля
Атрибут
|
Значение
|
---|---|
action
|
Тип операции:
|
dn
|
Уникальное составное имя (DN) пользователя, пароль которого изменяется или сбрасывается
|
eventId
|
Идентификатор события Windows:
|
remoteAddress
|
Удаленный адрес пользователя, выполняющего операцию
|
sessionId
|
Идентификатор сессии DSDB
|
status
|
Текст ошибки
|
statusCode
|
Код ошибки
|
transactionId
|
Уникальный идентификатор (GUID) транзакции, в рамках которой выполняется операция (если операция является частью транзакции)
|
userSid
|
Идентификатор безопасности (SID) пользователя, инициировавшего операцию
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 1} |
{"timestamp": "2024-05-29T15:28:18.876663+0200", "type": "passwordChange", "passwordChange": {"version": {"major": 1, "minor": 1}, "eventId": 4724, "statusCode": 0, "status": "Success", "remoteAddress": "ipv6:fd47:d11e:43c1:0:a00:27ff:fe9d:4de0:35534", "userSid": "S-1-5-21-578923263-1107570656-1287136478-500", "dn": "CN=Орлов Игорь,CN=Users,DC=test,DC=alt", "action": "Reset", "transactionId": "d7456cd1-6f32-4575-b530-dc22a34bdc6a", "sessionId": "ce6866f6-43ea-4665-a896-0d10bd3194e1"}}
Таблица 6.22. Атрибуты событий, связанных с изменением группы
Атрибут
|
Значение
|
---|---|
action
|
Тип операции:
|
eventId
|
Идентификатор события Windows:
|
group
|
Уникальное составное имя (DN) группы
|
remoteAddress
|
Удаленный адрес пользователя, выполняющего операцию
|
sessionId
|
Идентификатор сессии DSDB
|
status
|
Текст ошибки
|
Числовой код, соответствующий статусу в атрибуте
status
|
В общем случае в качестве значения атрибута приводится код ответа LDAP в соответствии с RFC 4511
|
transactionId
|
Уникальный идентификатор (GUID) транзакции, в рамках которой выполняется операция (если операция является частью транзакции)
|
user
|
Уникальное составное имя (DN) пользователя, членство в группе которого изменяется в рамках операции
|
userSid
|
Идентификатор безопасности (SID) пользователя, инициировавшего операцию
|
version
|
См. описание в таблице Общие атрибуты
Текущая версия:
{"major": 1, "minor": 1} |
{"timestamp": "2024-05-29T15:20:19.634972+0200", "type": "groupChange", "groupChange": {"version": {"major": 1, "minor": 1}, "eventId": 4728, "statusCode": 0, "status": "Success", "action": "Added", "remoteAddress": "ipv6:fd47:d11e:43c1:0:a00:27ff:fe9d:4de0:59778", "userSid": "S-1-5-21-578923263-1107570656-1287136478-500", "group": "CN=testgroup,CN=Users,DC=test,DC=alt", "transactionId": "28372270-093c-4bca-af45-ae3e93b71eda", "sessionId": "9518687d-8ad1-4c2c-810c-8cc18c2943f7", "user": "CN=Марков Кирилл,CN=Users,DC=test,DC=alt"}}
# rpcclient -U "" -c enumdomusers dc1.test.alt
/etc/samba/smb.conf
:
[global] restrict anonymous = 2
dSHeuristics
:
# samba-tool forest directory_service dsheuristics 0000000
global
файла /etc/samba/smb.conf
:
[global] disable netbios = yes smb ports = 445
global
файла /etc/samba/smb.conf
:
[global] printcap name = /dev/null load printers = no disable spoolss = yes printing = bsd
global
файла /etc/samba/smb.conf
:
[global] ntlm auth = mschapv2-and-ntlmv2-only
global
файла /etc/samba/smb.conf
строку:
[global] password hash userPassword schemes = CryptSHA256 CryptSHA512
GlobalQueryBlockList
перечислены эти две записи DNS, для предотвращения создания таких записей и перенаправления сетевого трафика неавторизованным объектом, действующим в локальной сети. Протокол автоматического обнаружения веб-прокси (WPAD) по умолчанию настроен в браузерах WPAD, в частности в браузерах Internet Explorer.
#samba-tool dns add `hostname -s` `hostname -d` wpad A 127.0.0.1 -P
#samba-tool dns add `hostname -s` `hostname -d` isatap A 127.0.0.1 -P
global
файла /etc/samba/smb.conf
строку:
[global] rpc server dynamic port range = 50000-55000
Примечание
/etc/samba/smb.conf
строки:
[global] ... full_audit:failure = none full_audit:success = pwrite write renameat full_audit:prefix = IP=%I|USER=%u|MACHINE=%m|VOLUME=%S full_audit:facility = local7 full_audit:priority = NOTICE ... [sysvol] ... vfs objects = dfs_samba4, acl_xattr, full_audit ... [netlogon] ... vfs objects = dfs_samba4, acl_xattr, full_audit
# apt-get install rsyslog-classic
/etc/rsyslog.d/all.conf
, в котором прописать протокол (@@ — TCP, @ — UDP) и адрес доставки сообщений:
*.* @@192.168.0.111:514
/etc/rsyslog.d/00_common.conf
раскомментировать строки:
#для udp module(load="imudp") input(type="imudp" port="514") #для tcp module(load="imtcp") input(type="imtcp" port="514")и создать свой шаблон для логов
/etc/rsyslog.d/myrules.conf
:
$template remote-incoming-logs,"/var/log/%HOSTNAME/%PROGRAMNAME.log" *.* ?remote-incoming-logs
global
файла /etc/samba/smb.conf
добавить строку:
[global] log level = 1 auth_json_audit:3@/var/log/samba/samba_audit.log
/etc/rsyslog.d/send_samba.conf
:
module(load="imfile" PollingInterval="10") #needs to be done just once input(type="imfile" File="/var/log/samba/samba_audit.log" Tag="samba_auth" Severity="info" Facility="auth") if ($syslogtag == "samba_auth") then { action(type="omfwd" target="dc1.test.alt" port="514" protocol="tcp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000") }
global
файла /etc/samba/smb.conf
добавить строку:
[global] log level = 1 auth_json_audit:3@/var/log/samba/samba_audit.log
/etc/rsyslog.d/recv_samba.conf
:
$ModLoad imtcp $InputTCPServerRun 514 if ($syslogtag == "samba_auth") then /var/log/samba/audit_auth.log
smb.conf
для:
Примечание
[global] ... idmap config * : backend = tdb idmap config * : range = 10000-999999 idmap config AD-DOM:backend = rid idmap config AD-DOM:range = 2000000-2999999 idmap config TRUST-DOM:backend = rid idmap config TRUST-DOM:range = 4000000-4999999
Примечание
Важно
2^31 - 1 = 2147483647
[global]
в файле smb.conf
можно задать:
idmap config * : backend = tdb idmap config * : range = 10000-999999Для получения более подробной информации см. Использование tdb
[global]
в файле smb.conf
можно задать:
idmap config * : backend = autorid idmap config * : range = 10000-999999Для получения более подробной информации см. Использование autorid
Примечание
Таблица 6.23. Атрибуты из AD, которые считывает бэкенд ad
Имя атрибута AD
|
Тип объекта
|
Сопоставление
|
---|---|---|
sAMAccountName
|
Пользователь и группа
|
Имя пользователя или группы в зависимости от объекта
|
uidNumber
|
Пользователь
|
Идентификатор пользователя (UID)
|
gidNumber
|
Группа
|
Идентификатор группы (GID)
|
loginShell
|
Пользователь
|
Путь к командной строке пользователя
|
smb.conf
. Объекты, идентификаторы которых находятся за пределами диапазона, не будут доступны на клиенте;
smb.conf
.
idmap config * : backend = tdb idmap config * : range = 3000-7999 idmap config TEST : backend = ad idmap config TEST : range = 10000-999999 idmap config TEST : schema_mode = rfc2307
idmap config DOMAIN : unix_nss_info = yes
template shell = /bin/bash template homedir = /home/%U
S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-RIDГде:
idmap config DOMAIN : backend = rid idmap config DOMAIN : range = 10000-999999Samba берёт RID из SID и добавляет его к началу диапазона range. Например, для пользователя с SID S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-1000, UID будет вычислен как 10000 + 1000 = 11000.
idmap config DOMAIN : range
. Samba не будет сопоставлять пользователей или группы с более низким или более высоким RID, чем указано в этом параметре.
Примечание
Важно
idmap config * : backend = tdb idmap config * : range = 10000-999999 idmap config DOMAIN : backend = rid idmap config DOMAIN : range = 2000000-2999999
Примечание
smb.conf
.
idmap config * : backend = autorid idmap config * : range = 100000-9999999
Примечание
idmap config * : rangesize = 200000
Примечание
idmap config * : range
.
Примечание
Таблица 6.24. Рекомендуемые компоненты для администрирования 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
|
Таблица 6.25. Рекомендуемые компоненты для администрирования 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).
|
Таблица 6.26. Рекомендуемые компоненты для администрирования 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).
|
Таблица 6.27. Основные инструменты командной строки
Утилита
|
Описание
|
---|---|
Основная утилита управления Samba
|
|
Позволяет получить информацию от демона winbindd
|
|
Инструмент администрирования Samba и удаленных серверов CIFS
|
|
Инструмент для выполнения действий в домене Active Directory
|
|
Утилита для поиска информации в LDAP
|
|
Проверка корректности содержимого основного файла конфигурации Samba —
/etc/samba/smb.conf
|
samba-tool
.
Таблица 6.28. Основные команды 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).
Таблица 6.29. Параметры команды 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
пытается определить его автоматически.
Таблица 6.30. Основные команды 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.
Таблица 6.31. Основные команды 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
найдет одну или несколько записей, то значения указанных атрибутов этих записей будут переданы в стандартный поток вывода. Если в этом списке указан знак *, возвращаются все пользовательские атрибуты. Если в этом списке указан знак +, возвращаются все операционные атрибуты. Если атрибуты не указаны, то возвращаются все пользовательские атрибуты.
-L
.
Таблица 6.32. Параметры команды 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). Тело фильтра должно быть заключено в скобки.
Таблица 6.33. Примеры 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
можно:
Таблица 6.34. Основные команды 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: 03/27/24 20:57:31
Cache entry last update time: 06/03/24 16:49:12
Cache entry expiration time: 06/03/24 18:19:12
Initgroups expiration time: 06/03/24 18:19:12
Cached in InfoPipe: N
# sssctl user-checks kim
user: kim
action: acct
service: system-auth
SSSD nss user lookup result:
- user name: kim
- user id: 1939201105
- group id: 1939200513
- gecos: Олег Ким
- home directory: /home/TEST.ALT/kim
- shell: /bin/bash
SSSD InfoPipe user lookup result:
- name: kim
- uidNumber: 1939201105
- gidNumber: 1939200513
- 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
(см. описание параметров выше).
/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.
named.conf
или в директиве @ $ORIGIN текущего описания зоны;
Таблица 6.35. Разделы конфигурационного файла bind
Раздел
|
Описание
|
---|---|
acl
|
Позволяет задать именованный список сетей. Формат раздела: acl имя_сети {ip; ip; ip; };
|
controls
|
Объявляет каналы управления, которые будут использоваться утилитой rndc
|
dnssec-policy
|
Описывает ключ DNSSEC и политику подписи для зон
|
key
|
Указывает ключевую информацию для использования при аутентификации и авторизации с использованием TSIG
|
:any:key-store
|
Описывает хранилище ключей DNSSEC
|
logging
|
Указывает, какую информацию регистрирует сервер и куда отправляются сообщения журнала
|
options
|
Задает глобальные параметры конфигурационного файла, управляющие всеми зонами
|
parental-agents
|
Определяет именованный список серверов для включения в списки родительских агентов основной и дополнительной зон
|
primaries
|
Определяет именованный список серверов для включения в основные и дополнительные зоны или списки уведомлений
|
server
|
Устанавливает определенные параметры конфигурации для каждого сервера
|
tls
|
Указывает информацию о конфигурации для соединения TLS
|
http
|
Указывает информацию о конфигурации для HTTP-соединения
|
trust-anchors
|
Определяет якоря доверия DNSSEC: при использовании с ключевым словом Initial-key или Initial-ds якоря доверия поддерживаются в актуальном состоянии с помощью обслуживания якоря доверия RFC 5011; при использовании со static-key или static-ds ключи являются постоянными.
|
zone
|
Определяет описание зон(ы)
|
/etc/bind/options.conf
. Для получения более подробной информации следует обратиться к man странице named.conf(5)
.
Таблица 6.36. Основные параметры конфигурационного файла bind
Опция
|
Описание
|
---|---|
directory
|
Указывает каталог расположения таблиц зон
|
listen-on
|
Определяет адреса IPv4, на которых сервер прослушивает DNS-запросы
|
listen-on-v6
|
Определяет адреса IPv6, на которых сервер прослушивает DNS-запросы
|
allow-query
|
IP-адреса и подсети, от которых будут обрабатываться запросы. Если параметр не задан, сервер отвечает на все запросы
|
allow-transfer
|
Устанавливает возможность передачи зон для slave-серверов
|
allow-query-cache
|
IP-адреса и подсети, которые могут получить доступ к кешу этого сервера
|
allow-recursion
|
IP-адреса и подсети, от которых будут обрабатываться рекурсивные запросы (для остальных будут выполняться итеративные запросы). Если параметр не задан, сервер выполняет рекурсивные запросы для всех сетей
|
pid-file
|
Указывает путь к файлу, в который сервер записывает идентификатор процесса
|
tkey-gssapi-keytab
|
Устанавливает файл таблицы ключей KRB5, который будет использоваться для обновлений GSS-TSIG. Это файл таблицы ключей KRB5, который можно использовать для обновлений GSS-TSIG. Если этот параметр установлен, а
tkey-gssapi-credential не установлен, обновления разрешены с любым ключом, соответствующим участнику в указанной вкладке ключей
|
minimal-responses
|
Контролирует, добавляет ли сервер записи в разделы полномочий и дополнительных данных. При значении yes сервер добавляет записи в авторитетные и дополнительные разделы только тогда, когда такие записи требуются протоколом DNS (например, при возврате делегирования или отрицательных ответах). Это обеспечивает лучшую производительность сервера, но может привести к увеличению количества клиентских запросов
|
max-cache-ttl
|
Указывает максимальное время (в секундах), в течение которого сервер кеширует обычные (положительные) ответы. Максимальный срок кеша по умолчанию — 04800 (одна неделя)
|
forward
|
Позволяет указать каким образом сервер обрабатывает запрос клиента. При значении first DNS-сервер будет пытаться разрешать имена с помощью DNS-серверов, указанных в параметре forwarders. Если разрешить имя с помощью данных серверов не удалось, то попытаться разрешить имя самостоятельно. Если указать значение none, сервер не будет пытаться разрешить имя самостоятельно
|
forwarders
|
DNS-сервер, на который будут перенаправляться запросы клиентов
|
dnssec-validation
|
Включает проверку DNSSEC в именованных файлах. Если установлены значения auto (по умолчанию) и yes, проверка DNSSEC включена. Если установлено значение no, проверка DNSSEC отключена
|
type
|
Указывает тип зоны, описываемой в текущем разделе. Тип зоны может принимать следующие значения:
|
# apt-get install diag-domain-controller
diag-domain-controller [options] [<diagnostic-task>]
где diagnostic-task — название функции из списка тестов. Если не указывать название функции, будут запущены все тесты.
-l
, --list
— вывести список тестов;
-V
, --version
— вывести версию и выйти;
-h
, --help
— показать справку и выйти.
Таблица 7.1. Тесты diag-domain-controller
Тест
|
Описание
|
---|---|
is_domain_info_available
|
Проверка доступности просмотра общей информации о домене
|
is_hostname_correct
|
Проверка правильного написания доменного имени узла
|
is_not_empty_sysvol
|
Проверяет, содержит ли файлы каталог sysvol
|
is_samba_package_installed
|
Проверяет, установлен ли в системе пакет Samba (samba-dc или samba-dc-mitkrb5)
|
is_samba_service_running
|
Проверяет, запущена ли служба Samba
|
are_there_errors_in_samba_databases
|
Проверяет наличие ошибок в базах Samba
|
is_ntp_service_running
|
Проверяет, включена ли синхронизация времени
|
$ diag-domain-controller -l
is_domain_info_available
is_hostname_correct
is_not_empty_sysvol
is_samba_package_installed
is_samba_service_running
are_there_errors_in_samba_databases
is_ntp_service_running
$ diag-domain-controller is_domain_info_available
is_domain_info_available
[DONE]: is_domain_info_available
$ diag-domain-controller
[DONE]: is_domain_info_available
[DONE]: is_hostname_correct
[DONE]: is_not_empty_sysvol
[DONE]: is_samba_package_installed
[DONE]: is_samba_service_running
[FAIL]: are_there_errors_in_samba_databases
[WARN]: is_ntp_service_running
# apt-get install diag-domain-client
diag-domain-client [options] [<test-function-name>]
где test-function-name — название функции из списка тестов. Если не указывать название функции, будут запущены все тесты.
-h
, --help
— показать справку и выйти;
-V
, --version
— вывести версию и выйти;
-v
, --verbose
— подробный вывод;
-w[FILE]
, --logfile[=FILE]
— записать подробный вывод в файл по указанному пути. Если файл не указан, вывод будет записан в файл ./diag-domain-client.log
. В случае если файл уже существует, то запись производится в файл с постфиксом (например, diag-domain-client.log.1
, diag-domain-client.log.2
и т.д.);
-f
, --force
— принудительная запись в существующий файл;
-l
, --list
— вывести список тестов.
Таблица 7.2. Тесты и проверки diag-domain-client
Тест/Проверка
|
Описание
|
---|---|
check_hostnamectl
|
Отображает полную информацию о узле и соответствующие настройки: имя, значок, система, версия ядра, архитектура, информация о виртуализации (при наличии)
|
test_hostname
|
Проверяет, является ли имя компьютера полностью определенным именем домена (FQDN)
|
check_system_auth
|
Отображает метод аутентификации пользователей, используемый в подсистеме PAM (sss, winbind — компьютер введен в домен, local — не введен). Выводит содержимое файла
/etc/pam.d/system-auth
|
is_samba_package_installed
|
Проверяет, установлен ли в системе пакет Samba (samba-dc или samba-dc-mitkrb5)
|
test_domain_system_auth
|
Проверяет, подходит ли метод аутентификации для работы машины в домене (допустимые значения: sss, winbind)
|
check_system_policy
|
Отображает, какие политики применяются в процессе PAM-аутентификации: local — никакие, gpupdate — локальные и доменные
|
test_gpupdate_system_policy
|
Проверяет, настроено ли применение групповых политик в системе
|
check_krb5_conf_exists
|
Проверяет наличие, отображает права доступа и содержимое файла конфигурации
krb5.conf
|
check_krb5_conf_ccache
|
Отображает текущий способ кеширования Kerberos-билетов — keyring, file, dir
|
test_keyring_krb5_conf_ccache
|
Проверяет настроенный способ кеширования Kerberos-билетов (для keyring)
|
check_krb5_conf_kdc_lookup
|
Проверяет включен ли поиск Kerberos-имени домена через DNS. Допустимыми значениями для «dns_lookup_kdc» в
/etc/krb5.conf являются — true/yes
|
check_krb5_keytab_exists
|
Проверяет наличие, права доступа и дату последнего изменения файла
/etc/krb5.conf . В этом файле хранятся принципалы и хеши пароля доменной учётной записи компьютера
|
check_keytab_credential_list
|
Отображает содержимое файла
/etc/krb5.conf (файл с учётными данными машинного пользователя). В этом файле хранятся принципалы и хеши пароля доменной учётной записи компьютера.
Требуется запуск от root, иначе SKIP
|
check_resolv_conf
|
Проверяет наличие и выводит содержимое файла конфигурации разрешения имен
resolv.conf
|
compare_resolv_conf_with_default_realm
|
Сравнивает домен для поиска (поле search в
/etc/resolv.conf ) с доменом по умолчанию, указанным для Kerberos
|
check_smb_conf
|
Проверяет наличие и выводит содержимое файла настроек конфигурации Samba
|
compare_smb_realm_with_krb5_default_realm
|
Сравнивает домен, указанный в файле конфигурации Samba, с доменом по умолчанию, указанным для Kerberos
|
test_smb_realm
|
Проверяет корректное заполнение информации о домене в конфигурационных файлах Samba и Kerberos
|
test_domainname
|
Сверяет доменное имя из
/etc/hostname с именем домена в составе FQDN-имени узла
|
check_time_synchronization
|
Отображает настройку синхронизации времени с сервером; выводит подробную информацию — часовой пояс, временную зону и т.д. Необходимо для корректной работы с сертификатами, электронной подписью, билетами Kerberos
|
test_time_synchronization
|
Проверяет, включена ли синхронизация времени
|
check_nameservers
|
Проверяет доступность всех контроллеров домена по имени (
host <domain FQDN> ) и IP-адресу (работает ли resolv.conf )
|
check_domain_controllers
|
Проверяет доступность всех контроллеров домена в домене (из srv-записей). Отображает версии контроллеров домена (из LDAP)
|
check_kerberos_and_ldap_srv_records
|
Проверяет наличие srv-записей вида _kerberos._udp.<domain FQDN> и _ldap._tcp.<domain FQDN> для домена. Требуется для корректной работы машины в домене. Без записей Kerberos, sssd и winbind не смогут найти контроллеры домена
|
compare_netbios_name
|
Сравнивает короткое имя машины из
/etc/hostname с NetBios-именем машины в smb.conf
|
check_common_packages
|
Проверяет наличие установленных основных пакетов и их версий (alterator-auth, libnss-role, libkrb5 и libsmbclient)
|
check_group_policy_packages
|
Проверяет наличие установленных основных пакетов и их версий для управления групповыми политиками (local-policy и gpupdate)
|
check_sssd_ad_packages
|
Проверяет наличие установленного мета-пакета и его версии для аутентификации c помощью sssd (task-auth-ad-sssd)
|
check_sssd_winbind_packages
|
Проверяет наличие установленного мета-пакета и его версии для аутентификации c помощью winbind (task-auth-ad-winbind)
|
$ diag-domain-client -l
check_hostnamectl
test_hostname
check_system_auth
test_domain_system_auth
check_system_policy
test_gpupdate_system_policy
check_krb5_conf_exists
check_krb5_conf_ccache
test_keyring_krb5_conf_ccache
check_krb5_conf_kdc_lookup
check_krb5_keytab_exists
check_keytab_credential_list
check_resolv_conf
compare_resolv_conf_with_default_realm
check_smb_conf
compare_smb_realm_with_krb5_default_realm
test_smb_realm
test_domainname
check_time_synchronization
test_time_synchronization
check_nameservers
check_domain_controllers
check_kerberos_and_ldap_srv_records
compare_netbios_name
check_common_packages
check_group_policy_packages
check_sssd_ad_packages
check_sssd_winbind_packages
$ diag-domain-client check_smb_conf
is_domain_info_available
[DONE]: is_domain_info_available
$ diag-domain-client check_krb5_conf_kdc_lookup -v
===============================================================================
| Samba environment diagnostic tool |
-------------------------------------------------------------------------------
Version: 0.2.8
Date: Ср 09 окт 2024 12:54:51 EET
-------------------------------------------------------------------------------
System information
Kernel: 5.10.212-std-def-alt1
Branch: p10
===============================================================================
===============================================================================
| check_krb5_conf_kdc_lookup |
-------------------------------------------------------------------------------
/etc/krb5.conf: dns_lookup_kdc is enabled
-------------------------------------------------------------------------------
Check DNS lookup kerberos KDC status: [DONE]
===============================================================================
$ diag-domain-client
Check hostname persistance: [DONE]
Test hostname is FQDN (not short): [DONE]
System authentication method: [DONE]
Domain system authentication enabled: [DONE]
System policy method: [DONE]
System group policy enabled: [DONE]
Check Kerberos configuration exists: [DONE]
Kerberos credential cache status: [DONE]
Using keyring as kerberos credential cache: [DONE]
Check DNS lookup kerberos KDC status: [DONE]
Check machine crendetial cache is exists: [DONE]
Check machine credentials list in keytab: [SKIP]
Check nameserver resolver configuration: [DONE]
Compare krb5 realm and first search domain: [DONE]
Check Samba configuration: [DONE]
Compare samba and krb5 realms: [DONE]
Check Samba domain realm: [DONE]
Check hostname FQDN domainname: [DONE]
Check time synchronization: [DONE]
Time synchronization enabled: [WARN]
Check nameservers availability: [WARN]
Check domain controllers list: [FAIL]
Check Kerberos and LDAP SRV-records: [DONE]
Compare NetBIOS name and hostname: [DONE]
Check common packages: [DONE]
Check group policy packages: [DONE]
Check SSSD AD packages: [DONE]
Check SSSD Winbind packages: [WARN]
/tmp/diag-domain-client.log
:
$ diag-domain-client check_krb5_conf_kdc_lookup -w/tmp/diag-domain-client.log
Check DNS lookup kerberos KDC status: [DONE]
просмотреть содержимое файла /tmp/diag-domain-client.log
:
$ cat /tmp/diag-domain-client.log
===============================================================================
| Samba environment diagnostic tool |
-------------------------------------------------------------------------------
Version: 0.2.8
Date: Ср 09 окт 2024 12:54:24 EET
-------------------------------------------------------------------------------
System information
Kernel: 5.10.212-std-def-alt1
Branch: p10
===============================================================================
===============================================================================
| check_krb5_conf_kdc_lookup |
-------------------------------------------------------------------------------
/etc/krb5.conf: dns_lookup_kdc is enabled
-------------------------------------------------------------------------------
Check DNS lookup kerberos KDC status: [DONE]
===============================================================================
# apt-get install adt
Установка инструментов диагностики состояния клиента домена и состояния контроллера домена:
# apt-get install diag-domain-client diag-domain-controller
# systemctl enable --now alterator-manager.service
$ adt
Примечание
-r
, --report
.
.backend
— описывает интерфейс диагностического инструмента, обеспечивающий взаимодействие с D-Bus. В нем же описываются методы интерфейса: info, run, list, report;
.diagnostictool
— описывает отображение диагностического инструмента в ADT. Содержит информацию о тестах, доступных в рамках описываемого диагностического инструмента.
.backend
и запуска исполняемых файлов.
.backend
обо всех установленных диагностических инструментах и создает объекты на системной и сессионных (в зависимости от расположения backend-файлов) шинах D-Bus с именами вида «ru.basealt.alterator.<имя инструмента>».
.backend
и .diagnostictool
(или .diag
), описывающие сущности Alterator Entry.
Примечание
.diagnostictool
и .diag
считаются верными.
/путь_к_исполняемому_файлу {param}где {param} — означает имя теста, который необходимо выполнить.
-l
или --list
— вывод списка тестов. Список необходимо выводить в стандартный вывод. Имя каждого теста должно быть с новой строки;
-r
или report
— сгенерировать файл с отчетом. Файл с отчетом может представлять собой как текстовые данные, так и бинарные (например, архив). Его содержимое необходимо направить в стандартный вывод. ADT получит этот вывод и сохранит в файл с именем вида «имя_инструмента_дата» и суффиксом, указанным в файле .diagnostictool
.
.backend
и .diagnostictool
следует воспользоваться спецификацией Alterator Entry
.backend
и .diagnostictool
являются текстовыми и содержат описание в виде секций. Синтаксис файлов:
[имя секции1] Поле1 = значение Поле2 = значение ПолеN = значение [имя секции2] Поле1 = значение Поле2 = значение ПолеN = значение [имя секцииN] Поле1 = значение Поле2 = значение ПолеN = значениеПри этом следует учитывать:
./backends
для файла .backend
;
./diagnostictools
для файла .diagnostictool
(или .diag
).
.diagnostictool
имеет имя вида <имя диагностического инструмента>.diagnostictool
.
/usr/share/alterator/diagnostictools/
. В противном случае, рекомендуется использовать каталог /etc/alterator/diagnostictools/
.
.diagnostictool
содержит информацию для GUI Он включает секцию [Alterator Entry] и секции, описывающие варианты тестирования.
.backend
имеет имя вида <имя диагностического инструмента>.ru.basealt.alterator.backend
.
/usr/share/alterator/backends/system
— если объект необходимо создать на системной шине;
/usr/share/alterator/backends/user
— если объект необходимо создать на сессионной шине;
/etc/alterator/backends/system/
— если объект необходимо создать на системной шине;
/etc/alterator/backends/user/
— если объект необходимо создать на сессионной шине;
.diagnostictool
(cat <путь к файлу>
);
<путь к исполняемому файлу> {param}
;
<путь к исполняемому файлу> -l
;
<путь к исполняемому файлу> -R
;
/usr/bin/diag-example
;
/usr/share/alterator/backends/diag-example.backend
;
/usr/share/alterator/diagnostictools/diag-example.diag
.
/usr/bin/diag-example
:
#!/bin/bash # # Copyright (c) 2024 Evgeny Sinelnikov <sin@altlinux.org> # # Example diagnostic tool # # SPDX-License-Identifier: GPL-2.0-or-later # set -euo pipefail . shell-getopt PROG="${0##*/}" PROG_VERSION='0.0.1' cmd="run" global_retval=0 print_version() { cat <<EOF $PROG version $PROG_VERSION Written by Evgeny Sinelnikov <sin@altlinux.org> Copyright (C) 2024 Evgeny Sinelnikov <sin@altlinux.org> This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EOF exit } show_usage() { cat <<EOF $PROG - example diagnostic tool. Usage: $PROG [options] [<diagnostic-task>] Options: -l, --list list of diagnostic tasks; -V, --version print program version and exit; -h, --help show this text and exit. Report bugs to https://bugzilla.altlinux.org/ EOF exit } TEMP=$(getopt -n "$PROG" -o "l,V,h" -l "list,version,help" -- "$@") || show_usage eval set -- "$TEMP" while :; do case "$1" in --) shift; break ;; -l|--list) cmd="list"; ;; -V|--version) print_version ;; -h|--help) show_usage ;; *) fatal "Unrecognized option: $1" ;; esac shift done task_list="$*" task_show() { local func="$1" echo "$func" } task_run() { local retval=126 local func="$1" if test -n "$task_list"; then echo "$task_list" | tr ' ' '\n' | grep -q "^$func\$" || return 0 fi $func && retval=0 || retval="$?" test $retval = 0 || global_retval=1 return $retval } task() { local task="$1" case "$cmd" in list) task_show "$task" ;; run) task_run "$task" && echo "[DONE]: $task" || echo "[FAIL]: $task" ;; *) fatal "Unrecognized command: $cmd" ;; esac } is_gigabyte() { /usr/sbin/dmidecode -s baseboard-manufacturer | grep -q "^Gigabyte Technology" } is_std_def_kernel_running() { uname -r | grep -q '^[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+-std-def-' } task is_gigabyte task is_std_def_kernel_running exit "$global_retval"
/usr/share/alterator/backends/diag-example.backend
:
[Alterator Entry] Type = Backend Module = executor Name = diag_example Interface = diag1 [Info] execute = cat /usr/share/alterator/diagnostictools/diag-example.diag stdout_bytes = enabled stdout_byte_limit = 200000 action_id = Info [Run] execute = diag-example {param} stdout_signal_name = diag_example_stdout_signal stderr_signal_name = diag_example_stderr_signal thread_limit = 1 action_id = Run [List] execute = diag-example -l stdout_strings = enabled stdout_strings_limit = 200000 action_id = List
/usr/share/alterator/diagnostictools/diag-example.diag
:
[Alterator Entry] Type = diag Name = Example DisplayName = Diagnostic tool example DisplayName[ru] = Пример инструмента диагностики Comment = Diagnostic tool comment Comment[ru] = Комментарий к диагностическому инструменту Icon = system-run [is_gigabyte] DisplayName = Is motherboard manufacturer — Gigabyte? DisplayName[ru] = Производитель материнской платы — Gigabyte?
Примечание
# systemctl restart alterator-manager.service
Примечание
# 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