Устранение неполадок участников домена Samba

Материал из ALT Linux Wiki

Устранение неполадок участников домена Samba

Общее

Настройка уровня логов Samba

Первым делом настройте уровень логов Samba.

Уровень логов

Обычно логи в Samba не очень подробные, вследствие чего, иногда бывает трудно найти ошибку. Но, степень вывода логов можно изменить. Для этого нужно отредактировать конфигурационный файл Samba.

# mcedit /etc/samba/smb.conf

И в секции «global» добавить две строки:

log level = 2
max log size = 20480

где log level - уровень логов от 1 до 5, чем больше значение, тем подробнее.

Перезапустите службу.

# service samba restart

Установите значение, например, на 5. Перезапустите службу. Начните выполнять в консоли настройку, которая у вас не получалась и Вы увидите что логи стали в разы подробней.

Логи у команды

Вы можете установить лог у выполняемой команды не меняя настройки системы. Для этого установите ключ -d и нужный уровень отладки.[i]

# net ads join -U administrator -d 1

Команде net не удается подключиться по адресу 127.0.0.1

Используя настройки по-умолчанию, команда net подключается к адресу 127.0.0.1. Если Samba не слушает петлевой интерфейс, подключение не удастся. Например:

# net rpc rights list -U administrator
Enter administrator's password:
Could not connect to server 127.0.0.1
Connection failed: NT_STATUS_CONNECTION_REFUSED

Для решения данной проблемы, настройте Samba на дополнительное прослушивание петлевого интерфейса. Для подробностей см. Настройка Samba для привязки к определенным интерфейсам.

В качестве временного решения проблемы, можно использовать ключ -I IP_address или -S host_name после команды net.

Настройка Samba для привязки к определенным интерфейсам

Если ваш сервер использует несколько сетевых интерфейсов, вы можете настроить Samba для привязки только к определенному интерфейсу. Например, если Samba установлена ​​на маршрутизаторе с одним сетевым интерфейсом, подключенным к Интернету, и другим, подключенным к внутренней сети.

Чтобы привязать все службы Samba к eth0 и устройству loopback (lo):

Добавьте следующие параметры в раздел [global] вашего файла smb.conf:

bind interfaces only = yes
interfaces = lo eth0

Параметр interfaces позволяет использовать альтернативные значения, такие как IP-адреса, вместо имен устройств. Для получения дополнительной информации см. smb.conf (5) man page.

Обратите внимание, что вы всегда должны включать Samba для прослушивания loopback (lo) устройства. Некоторые утилиты подключаются к петлевому IP-адресу, если имя хоста не указано.

Перезапустите службы Samba.

# systemctl restart samba [i]

getent не находит доменных пользователей и групп

Вы выполняете getent passwd или же getent group? Использование этих команд без параметров winbind enum users = yes и winbind enum groups = yes в файле smb.conf не будет отображать пользователей и группы домена. Добавление строк имеет обратную сторону, оно замедляет работу, и чем больше у вас пользователей и групп, тем медленнее могут работать команды, поэтому вам следует добавлять эти строки только в целях тестирования.

Если

getent passwd demo01

ничего не возвращает, попробуйте ввести:

getent passwd "SAMDOM\demo01"

если данная команда работает, а первая нет, вам может потребоваться добавить следующую строку в файл smb.conf

winbind use default domain = yes

Диагностика домена

Пример:

  • Домен: DOMAIN.RU
  • WG: DOMAIN
  • Хост: Client
Информация в виде таблицы
Команда Что делает Локальная система Доменная Комментарий
system-auth status Выводит текущую схему аутентификации local ad DOMAIN.RU CLIENT DOMAIN Вместо DOMAIN и CLIENT система выведет имена домена и клиента.
Команда работает только из под root. Для работы нужен пакет alterator-auth.
control system-auth Выводит систему аутентификации. local sss Команда работает только из под root.
systemctl status sssd (winbind) Статус служб бэкендов Samba not be found (inactive) active (active) Работает и под root и под обычным пользователем.
net ads info Информация о домене Ошибка, о недоступности серверов, способных обработать запрос Вывод информации Работает и под root и под обычным пользователем.
host kdc_ip Выводит имя хоста kdc по IP - (мы не знаем адрес) Вывод PTR-записи KDC Вместо kdc_ip введите IP адрес KDC из команды net ads info.
Работает и под root и под обычным пользователем.
ping kdc_ip Пингует kdc-сервер - (мы не знаем адрес) пинг идет Вместо kdc_ip введите IP адрес KDC из команды net ads info
Работает и под root и под обычным пользователем.
KRB5_TRACE=/dev/stdout kinit user Получение билета Kerberos с подробным логом Ошибка, что записи Kerberos не найдены (то, что в описании) Работает и под root и под обычным пользователем. Вместо user введите нужного Вам доменного пользователя.
net ads testjoin Информация о проверке связи с доменом Ошибка о том, что хост не настроен как член домена Join is ok Работает только под root
getent passwd выводит список пользователей выводит список локальных пользователей выводит список локальных пользователей Работает и под root и под обычным пользователем.
id выводит группы пользователя включают только локальные
(или был произведен вход
под локальным пользователем)
включают в себя доменные Работает и под root и под обычным пользователем.
groups выводит группы пользователя включают только локальные
(или был произведен вход
под локальным пользователем)
включают в себя доменные Работает и под root и под обычным пользователем.
ssh user@localhost Проверяет доступ по ssh подключается под локальным SSH подключается под локальным SSH Должна быть включена служба sshd. Работает и под root и под обычным пользователем.
Вход в DM Пускает пользователя в графическую часть + +

Вывод текущей схемы аутентификации

Примечание: Для работы нужен пакет alterator-auth.
# system-auth status

Команда работает только из под root.

Примечание: Вместо DOMAIN и CLIENT система выведет имена домена и клиента.
Вывод
Локальная система Доменная
local ad DOMAIN.RU CLIENT DOMAIN

Пример:

  • Доменная система
[root@test ~]# system-auth status
ad PETR.RU TEST PETR
  • Локальная система
[root@localhost ~]# system-auth status
local

Вывод системы аутентификации

# control system-auth

Команда работает только из под root

Вывод
Локальная система Доменная
local sss

Пример:

  • Доменная система
[root@test ~]# control system-auth
sss
  • Локальная система
[root@localhost ~]# control system-auth
local

Статус служб бэкендов Samba

$ systemctl status sssd
$ systemctl status winbind

Команда работает и под root и под обычным пользователем.

Вывод
Бэкэнд Локальная система Доменная
sssd not be found active
winbind inactive active

Пример:

  • Локальная система:
[root@host-9 ~]# systemctl status sssd
Unit sssd.service could not be found.
[root@host-9 ~]# systemctl status winbind
? winbind.service - Samba Winbind Daemon
Loaded: loaded (/lib/systemd/system/winbind.service; disabled; vendor preset: disabled) Active: inactive (dead)
Docs: man:winbindd(8) man:samba(7) man:smb.conf(5)
  • Доменная система:
 [root@test ~]# systemctl status sssd
  sssd.service - System Security Services Daemon
Loaded: loaded (/lib/systemd/system/sssd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-04-20 10:40:31 MSK; 6h ago
[petr@test ~]$ systemctl status winbind
winbind.service - Samba Winbind Daemon
Loaded: loaded (/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-04-20 10:40:33 MSK; 7h ago

Информация о домене

$ net ads info

Команда работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
Ошибка, о недоступности серверов, способных обработать запрос Вывод информации

Пример:

  • Локальная система
[ladmin@localhost -]$ net ads info
adsconnect: No logon servers are curently available to service the logon request.
adsconnect: No logon servers are curently available to service the logon request.
Didn't find the ldap server!
  • Доменная система
[ladmin@test ~]$ net ads info
LDAP server: 10.0.2.6
LDAP server name: dc.petr.ru
Realm: PETR.RU
Bind Path: dc=PETR,dc=RU
LDAP port: 389
Server time: Чт, 20 anp 2023 17:07:10 MSK
KDC server: 10.0.2.6
Server time offset: 2
Last machine account password change: Вт, 11 anp 2023 17:02:48 MSK

Вывод имени хоста kdc по IP

$ host kdc_ip
Примечание: Вместо kdc_ip введите IP адрес KDC из команды net ads info.

Команда работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
- (мы не знаем адрес) Вывод PTR-записи KDC

Пример:

  • Доменная система
[ladmin@test ~]$ host 10.0.2.6
6.2.0.10.in-addr.arpa has no PTR record

Пинг kdc-сервера

$ ping kdc_ip
Примечание: Вместо kdc_ip введите IP адрес KDC из команды net ads info.

Команда работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
- (мы не знаем адрес) Пинг идет

Пример:

  • Доменная система
[root@test ~]# ping 10.0.2.6
PING 10.0.2.6 (10.0.2.6) 56(84) bytes of data.
bytes	from	10.0.2.6:	icmp_seq=l	ttl=64	time=0.413	ms
bytes	from	10.0.2.6:	icmp_seq=2	ttl=64	time=0.423	ms
bytes	from	10.0.2.6:	icmp_seq=3	ttl=64	time=0.434	ms
bytes	from	10.0.2.6:	icmp_seq=4	ttl=64	time=0.436	ms

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

$ KRB5_TRACE=/dev/stdout kinit user

Работает и под root и под обычным пользователем.

Примечание: Вместо user введите нужного Вам доменного пользователя.
Вывод
Локальная система Доменная
Ошибка, что записи Kerberos не найдены Получение билета Kerberos с подробным логом

Пример:

  • Локальная система
[root@localhost ~]# kinit petг
kinit: Configuration file does not specify default realm when parsing name petr
  • Доменная система
[root@test ~]KRB5_TRACE=/deu/stdout кinit petr
[11850] 1682000087.974945: Getting initial credentials for petr@PETR.RU
[11050] 1682000087.974947: Sending unauthenticated request
[11050] 1682000087.974948: Sending request (193 bytes) to PETR.RU
[11050] 1682000087.974949: Sending initial UDP request to dgran 10.0.2.6:88
[11050] 1682000087.974950: Received answer (283 bytes) from dgran 10.0.2.6:88
[11050] 1682000087.974951: Response was from primary KDC
[11050] 1682000087.974952: Received error from KDC: -1765328359/Additional pre-authentication required
[11050] 1682000087.974955: Preauthenticating using KDC method data
[11050] 1682000087.974956: Processing preauth types: PA-PK-AS-REQ (16), PA-PK-AS-REP.OLD (15), PA-PK
INIT-KX (147), PA-ENC-TINESTAMP (2), PA-FX-FAST (136), 655, PA-ETYPE-INF02 (19)
[11050] 1682000087.974957: Selected etype info: etype aes256-cts, salt "PETR.RUpetr”, parans "\x00\x30\xl0\x00"
[11050] 1682000087.974958: PKINIT client has no configured identity; giuing up
[11050] 1682000087.974959: Preauth module pkinit (147) (info) returned: 0/Success
[11050] 1682000087.974960: PKINIT client has no configured identity; giuing up
111050] 1682000087.974961: Preauth module pkinit (16) (real) returned: 22/Heдопустимый аргумент
Password for petr@PETR.RU:

Информация о проверке связи с доменом

# net ads testjoin

Работает только под root

Вывод
Локальная система Доменная
Ошибка о том, что хост не настроен как член домена Join is ok

Пример:

  • Локальная система
[root@localhost ~]# net ads testjoin
Join to domain is not valid: NT code 0xfffffff6
  • Доменная система
[root@test ~J# net ads testjoin
Join is OK

Вывод списка пользователей

$ getent passwd

Или конкретного пользователя

$ getent passwd petr

Работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
выводит список локальных пользователей -выводит список локальных пользователей
-выводит информацию о локальном или доменном пользователе, если его указать

Пример:

  • Общий вывод
[petr@test ~]$ getent passwd
root:x:0:0:System Administrator:/root:/bin/bash
bin:x:1:1:bin:/:/dev/null
daemon:x:2:2:daemon:/:/dev/null
adm:x:3:4:adm:/var/adm:/dev/null
lp:x:4:7:lp:/var/spool/lpd:/dev/null
и т.д.
  • Вывод указанного пользователя
[petr@test ~]$ getent passwd petr
petr:*:1332601104:1332600513:petr:/home/PETR.RU/petr:/bin/bash

Вывод списка пользователей

$ wbinfo -u

Работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
Ошибка выводит список доменных пользователей
[ladmin@localhost ~]$ wbinfo -u
could not obtain winbind interface details: WBCERRWINBINDNOTAVAILABLE could not obtain winbind domain name!
Error looking up domain users
[petr@test ~]$ wbinfo -u
krbtgt
anton
serg
dima
administrator
guest
petr

Вывод групп пользователя

$ id

Работает и под root и под обычным пользователем.

Можно указать конкретного пользователя:

$ id dima
Вывод
Локальная система Доменная
включают только локальные
(или был произведен вход
под локальным пользователем)
включают в себя доменные

Пример:

  • Группы пользователя, зашедшего в систему:
[admin@host-9 ~]$ id
uid=500(admin) gid=500(admin) группы=500(admin),10(wheel),14(uucp),19(proc),22(cdrom),71(floppy),80(cdwriter),81(audio),83(radio),464(scanner),465(xgrp),466(camera),488(video)
  • Группы указанного пользователя:
[petr@test ~]$ id dima
uid=133Z601105(dima) gid=133Z600513(domain users) rpynnu=133Z600513(domain users),100(users),80(cdur iter),ZZ(cdrom),81(aud io),475(u ideo),19(proc),83(rad io),465(camera), 71(floppy),498(xgrp),499(scanner),14(uucp),457(uboxusers),469(fuse),489(uboxadd),488(uboxsf)

Вывод групп пользователя

$ groups

Можно указать конкретного пользователя

$ groups dima

Работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
включают только локальные
(или был произведен вход
под локальным пользователем)
включают в себя доменные

Пример:

  • Группы пользователя зашедшего в систему (доменный):
[petr@test ~]$ groups
domain users uucp proc cdrom floppy cdwriter audio radio users vboxusers camera fuse video vboxsf vboxadd xgrp scanner
  • Группы пользователя зашедшего в систему (локальный администратор):
[admin@host-9 ~]$ groups
admin wheel uucp proc cdrom floppy cdwriter audio radio scanner xgrp camera video
  • Запрос групп пользователя из другой учетной записи (доменный):
[petr@test ~]$ groups dima
dima : domain users uucp proc cdrom floppy cdwriter audio radio users vboxusers camera fuse video vboxsf vboxadd xgrp scanner

Вывод групп пользователя

$ wbinfo -g

Работает и под root и под обычным пользователем.

Вывод
Локальная система Доменная
Ошибка Вывод групп

Пример:

  • Локальная система
[ladmin@localhost ~]$ wbinfo -g
could not obtain winbind interface details: WBC ERR WINBIND NOT AVAILABLE could not obtain winbind domain name!
failed to call wbcListGroups: WBCERRWINBINDNOTAVAILABLE
Error looking up domain groups
  • Доменная система
[petr@test ~]$ wbinfo -g
domain computers
domain controllers
allowed rode password replication group
read-only domain controllers
domain admins
enterprise read-only domain controllers
dnsupdateproxy
group policy creator owners
dnsadmins
denied rode password replication group
enterprise admins
ras and ias servers
domain guests
domain users
schema admins
cert publishers

Проверка доступа по ssh

$ ssh user@localhost

Работает и под root и под обычным пользователем.

Примечание: Должна быть включена служба sshd
Вывод
Локальная система Доменная
подключается под локальным SSH подключается под локальным SSH

Пример:

[ladmin@test ~]$ ssh ladmin@localhost
The authenticity of host 'localhost (1Z7.0.0.1)' can't be established.
EDZ5519 key fingerprint is SHAZ56:Q0wrd5iKzKqaTuGguuyxyZ8RG8TZ68dS8oldBufBTNs.
Are you sure you want to continue connecting (yes/nо)? yes
Warning: Permanently added 'localhost' (EDZ5519) to the list of known hosts.
ladminl@localhost's password:
Last login: Thu Apr 20 10:45:05 2023
[ladmin@test ~]$

Вход в DM

Примечание: Пускает пользователя в графическую часть
Локальная система Доменная
+ +

Участник леса домена в лесу ActiveDirectory

Устранение неполадок при вводе в домен

Домен DNS не настроен. Не удается выполнить обновление DNS. (No DNS domain configured. Unable to perform DNS Update.)

Если при присоединении хоста к Active Directory (AD) команда net не может обновить DNS:

# net ads join -U administrator
Enter administrator's password:
Using short domain name -- SAMDOM
Joined 'AD-Member' to dns domain 'samdom.example.com'
No DNS domain configured for AD-Member. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

Обратите внимание, что ввод в домен прошел успешно, и произошел сбой только при обновлении DNS.

После присоединения клиента к домену команда net находит полное доменное имя (FQDN) с помощью библиотек переключателя службы имен (NSS). Если полное доменное имя не может быть разрешено, например, с помощью DNS или файла /etc/hosts, обновление DNS завершается ошибкой.

Решение проблемы:

Добавьте IP-адрес и полное доменное имя в файл /etc/hosts. Например:

10.99.0.5     AD-Member.samdom.example.com     AD-Member

Запустите команду net ads join снова.

Если динамические обновления DNS по-прежнему не работают, проверьте на DNS-сервере AD, работают ли динамические обновления.

Ошибка обновления DNS: ERROR_DNS_UPDATE_FAILED

Если при вводе компьютера в домен Active Directory (AD), команда net завершается с ошибкой, говорящей об обновлении DNS:

# net ads join -U administrator
Enter administrator's password:
Using short domain name -- SAMDOM
Joined 'M1' to dns domain 'samdom.example.com'
DNS Update for m1.samdom.example.com failed: ERROR_DNS_UPDATE_FAILED
DNS update failed: NT_STATUS_UNSUCCESSFUL

Обратите внимание, что ввод в домен прошел успешно, и произошел сбой только при обновлении DNS.

Решение проблемы:

  • Проверьте, работают ли на контроллере домена Samba (DC) динамические обновления DNS.
  • Запустите команду net ads join снова
Тестирование динамических обновлений

Чтобы протестировать динамические обновления DNS, запустите на контроллере домена Samba (DC) от суперпользователя:

# samba_dnsupdate --verbose --all-names
IPs: ['10.99.0.1']
...
force update: A samdom.example.com 10.99.0.1
...
21 DNS updates and 0 DNS deletes needed
Successfully obtained Kerberos ticket to DNS/dc1.samdom.example.com as DC1$
update(nsupdate): A samdom.example.com 10.99.0.1
Calling nsupdate for A samdom.example.com 10.99.0.1 (add)
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
samdom.example.com.	900	IN	A	10.99.0.1
...

Данная команда принудительно обновит все записи, указанные в файле /usr/local/samba/private/dns_update_list.[1]

Ошибка обновления DNS: ERROR_DNS_GSS_ERROR

При использовании BIND9_DLZ-бэкенда динамические обновления DNS могут завершаться ошибкой из-за неправильной настройки Kerberos на контроллере домена AD (DC), на котором запущен DNS-сервер:

# net ads join -U administrator
Enter administrator's password:
Using short domain name -- SAMDOM
Joined 'AD-Member' to dns domain 'samdom.example.com'
DNS Update for AD-Member.samdom.example.com failed: ERROR_DNS_GSS_ERROR
DNS update failed: NT_STATUS_UNSUCCESSFUL

Для решения проблемы нужно перенастроить Samba с бэкэндом BIND9:

# samba_upgradedns --dns-backend=BIND9_DLZ
Reading domain information
DNS accounts already exist
No zone file /usr/local/samba/private/dns/SAMDOM.EXAMPLE.COM.zone
DNS records will be automatically created
DNS partitions already exist
dns-DC1 account already exists
See /usr/local/samba/private/named.conf for an example configuration include file for BIND
and /usr/local/samba/private/named.txt for further documentation required for secure DNS updates
Finished upgrading DNS

И после этого перезапустить службу bind.[i]

Ошибка gss_init_sec_context: Разная ошибка: слишком большой перекос часов (gss_init_sec_context failed with: Miscellaneous failure: Clock skew too great)

Если при подключении хоста к домену AD команда net завершается следующей ошибкой:

# net ads join -U administrator 
Enter administrator's password:
gss_init_sec_context failed with [ Miscellaneous failure (see text): Clock skew too great]
kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed: An internal error occurred.
Failed to join domain: failed to connect to AD: An internal error occurred.

Обратите внимание на строку gss_init_sec_context failed with [ Miscellaneous failure (see text): Clock skew too great]. Она говорит о большом рассинхроне времени между контроллером домена и клиентом.

Kerberos требует синхронизированного времени для предотвращения атак повторного воспроизведения. Время на клиенте не должно отличаться от КД более чем на 5 минут.

Для исправления ошибки, установите правильное время и запустите команду net ads join снова.

Не удалось присоединиться к домену: не удалось найти контроллер домена для домена SAMDOM — неопределенная ошибка

Если при присоединении клиента к Active Directory (AD) команде net не удается найти контроллер домена (DC):

# net ads join -U administrator
Enter administrator's password:
Failed to join domain: failed to find DC for domain SAMDOM - Undetermined error

Samba использует DNS-запросы и широковещательные рассылки для обнаружения контроллеров домена при присоединении к домену. Если оба метода не срабатывают, отображается ошибка: failed to find DC for domain SAMDOM - Undetermined error.

В качестве краткосрочного решения вы можете передать команде параметр "-S" и имя контроллера домена. Например:

# net ads join -U administrator -S DC1.samdom.example.com

Однако в AD важна правильная конфигурация DNS. Чтобы избежать будущих проблем, связанных с неправильной конфигурацией DNS, корректней настроить конфигурацию преобразователя DNS. Дополнительные сведения см. в разделе Настройка DNS.

Winbind и проблемы с аутентификацией

Утилита getent не может вывести список всех пользователей или групп домена

Если утилита getent может вывести отдельных пользователей или группы домена, но команды getent passwd или же getent group не могут вывести список всех пользователей или групп домена:

  • Убедитесь, что коммутатор службы имен (name service switch, NSS) может использовать библиотеку libnss_winbind. Подробнее см. Libnss winbind Links

Включите следующие параметры в вашем файле smb.conf:

winbind enum users = yes
winbind enum groups = yes

По соображениям производительности не рекомендуется включать эти настройки в средах с большим количеством пользователей и групп.

Перезагрузите Samba:

# smbcontrol all reload-config

Участник леса домена в домене NT4

В настоящее время здесь нет контента.