Устранение неполадок участников домена Samba
Устранение неполадок участников домена 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 | Пускает пользователя в графическую часть | + | + |
Вывод текущей схемы аутентификации
# system-auth status
Команда работает только из под root.
Вывод | |
---|---|
Локальная система | Доменная |
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
Команда работает и под 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
Команда работает и под 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 и под обычным пользователем.
Вывод | |
---|---|
Локальная система | Доменная |
Ошибка, что записи 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 и под обычным пользователем.
Вывод | |
---|---|
Локальная система | Доменная |
подключается под локальным 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
В настоящее время здесь нет контента.