Bug 33369

Summary: Ошибка при подключении к домену AD. Дистрибутив "Образование"
Product: Branch p8 Reporter: Константин Артюшкин <akv>
Component: alterator-authAssignee: Andrey Cherepanov <cas>
Status: CLOSED FIXED QA Contact: qa-p8 <qa-p8>
Severity: normal    
Priority: P3 CC: kondratyuk, lav, sin
Version: не указана   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 30940    
Attachments:
Description Flags
alterato-auth_gui_error
none
system-auth.log none

Description Константин Артюшкин 2017-04-13 15:17:02 MSK
Created attachment 7044 [details]
alterato-auth_gui_error

Сервер настроен по иснтрукции https://www.altlinux.org/ActiveDirectory/DC
Клиент ( дистрибутив "Образование" ) настроен по инструкции https://www.altlinux.org/ActiveDirectory/Login. По ней же происходит попытка войти в домен AD.

При вводе значений в модуле alterator-auth получаю ошибку см. скриншот "alerator-auth_gui_error"

Проверка backend: 
system-auth write ad eter.localdomain DC ETER 'administrator' '$iM$iMopen'
kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed for ldap/dc.eter.localdomain with user[administrator] realm[ETER.LOCALDOMAIN]: Invalid credentials
Failed to join domain: failed to connect to AD: Invalid credentials
kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed for ldap/dc.eter.localdomain with user[administrator] realm[ETER.LOCALDOMAIN]: Invalid credentials

Полный лог подключения во вложении system-auth.log
Comment 1 Константин Артюшкин 2017-04-13 15:17:34 MSK
Created attachment 7045 [details]
system-auth.log
Comment 2 Константин Артюшкин 2017-04-13 15:19:41 MSK
Сервер: task-samba-dc-4.6.2-alt1.M80P.1
samba-DC-doc-4.6.2-alt1.M80P.1
samba-DC-common-4.6.2-alt1.M80P.1
samba-DC-winbind-clients-4.6.2-alt1.M80P.1
samba-DC-client-4.6.2-alt1.M80P.1
task-samba-dc-4.6.2-alt1.M80P.1
samba-DC-libs-4.6.2-alt1.M80P.1
samba-DC-winbind-4.6.2-alt1.M80P.1
samba-DC-4.6.2-alt1.M80P.1
python-module-samba-DC-4.6.2-alt1.M80P.1

Клиент: task-auth-ad-sssd-0.33.1-alt1
samba-common-tools-4.6.2-alt2.M80P.1
samba-common-libs-4.6.2-alt2.M80P.1
samba-libs-4.6.2-alt2.M80P.1
samba-4.6.2-alt2.M80P.1
samba-common-4.6.2-alt2.M80P.1
samba-client-libs-4.6.2-alt2.M80P.1
samba-client-4.6.2-alt2.M80P.1
Comment 3 Andrey Cherepanov 2017-04-13 15:58:42 MSK
Invalid credential - неверный пароль. Но в GUI он должен парситься и сообщать по-русски.
Comment 4 Константин Артюшкин 2017-04-13 17:09:45 MSK
(В ответ на комментарий №3)
> Invalid credential - неверный пароль. Но в GUI он должен парситься и сообщать
> по-русски.

Неверный пароль чего и какой момент?
Команда kinit administrator@ETER.LOCALDOMAIN вроде отрабатывает успешно.

# system-auth write ad eter.localdomain DC ETER 'administrator' '$iM$iMopen'
kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed for ldap/dc.eter.localdomain with user[administrator] realm[ETER.LOCALDOMAIN]: Invalid credentials
Failed to join domain: failed to connect to AD: Invalid credentials
kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed for ldap/dc.eter.localdomain with user[administrator] realm[ETER.LOCALDOMAIN]: Invalid credentials

# kinit administrator@ETER.LOCALDOMAIN
Password for administrator@ETER.LOCALDOMAIN: 
# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@ETER.LOCALDOMAIN

Valid starting       Expires              Service principal
13.04.2017 17:08:51  14.04.2017 03:08:51  krbtgt/ETER.LOCALDOMAIN@ETER.LOCALDOMAIN
	renew until 20.04.2017 17:08:46
Comment 5 Evgeny Sinelnikov 2017-04-14 12:43:02 MSK
Вот такие варианты проблем нужно, для начала, исключить:
- Проблема синхронизации времени (лучше поставить везде chronyd и забыть о проблемах);
- Проблема DNS (в resolv.conf должен быть указан один из контроллеров домена, играющий соответствующую роль, или выделенный для домена DNS-сервер);
- Проблемы настройки KDC. Команды kinit - мало. Нужно проверить доступ к сервисам. Как минимум smbclient -k -L //dc.eter.localdomain, потом klist.
Comment 6 Константин Артюшкин 2017-04-14 18:17:13 MSK
(В ответ на комментарий №5)
> Вот такие варианты проблем нужно, для начала, исключить:
> - Проблема синхронизации времени (лучше поставить везде chronyd и забыть о
> проблемах);
Установил пакет chrony на сервер и на клиент, запустил сервис на обоих - пока не помогло. 

> - Проблема DNS (в resolv.conf должен быть указан один из контроллеров домена,
> играющий соответствующую роль, или выделенный для домена DNS-сервер);
Если я правильно понял то сервер и клиент должны корректно отзываться на комманду host eter.localdomain:
Сервер:
  #host eter.localdomain
  eter.localdomain has address 192.168.4.51
Клиент:
  #host eter.localdomain
  eter.localdomain has address 192.168.4.51
Каким ещё способами моно проверить настройку dns?

> - Проблемы настройки KDC. Команды kinit - мало. Нужно проверить доступ к
> сервисам. Как минимум smbclient -k -L //dc.eter.localdomain, потом klist.
Вот тут уже интересно 
Клиент:
  # kinit administrator@ETER.LOCALDOMAIN
  Password for administrator@ETER.LOCALDOMAIN: 

  # smbclient -k -L //dc.eter.localdomain
  session setup failed: NT_STATUS_LOGON_FAILURE

  # klist
  Ticket cache: KEYRING:persistent:0:0
  Default principal: administrator@ETER.LOCALDOMAIN
  
  Valid starting       Expires              Service principal
  14.04.2017 18:12:02  15.04.2017 04:11:58  cifs/dc.eter.localdomain@ETER.LOCALDOMAIN
  	renew until 21.04.2017 18:11:54
  14.04.2017 18:11:58  15.04.2017 04:11:58  krbtgt/ETER.LOCALDOMAIN@ETER.LOCALDOMAIN
  	renew until 21.04.2017 18:11:54
Сервер:
  #kinit administrator@ETER.LOCALDOMAIN
  Password for administrator@ETER.LOCALDOMAIN: 

  # smbclient -k -L //dc.eter.localdomain
  SPNEGO: Could not find a suitable mechtype in NEG_TOKEN_INIT
  session setup failed: NT_STATUS_INTERNAL_ERROR

  # klist
  Ticket cache: KEYRING:persistent:0:0
  Default principal: administrator@ETER.LOCALDOMAIN
  
  Valid starting       Expires              Service principal
  14.04.2017 18:13:25  15.04.2017 04:13:25  krbtgt/ETER.LOCALDOMAIN@ETER.LOCALDOMAIN
  	renew until 21.04.2017 18:13:20
---

Выходит что нужно где-то настроить kerberos?
Comment 7 Andrey Cherepanov 2017-05-02 14:17:55 MSK
2sin: Женя, что скажешь по поводу
SPNEGO: Could not find a suitable mechtype in NEG_TOKEN_INIT
Comment 8 Evgeny Sinelnikov 2017-05-04 14:22:17 MSK
Нужны детали. Было бы крайне полезно приложить файл отчёта или ссылку на него где-нибудь в облаке с результатами упакованными с помощью утилиты сбора информации sos.

Желательно также поднять при тестировании уровень логов. sosreport их тоже запакует.

Вообще, место имеется для это
Comment 9 Evgeny Sinelnikov 2017-05-04 14:28:15 MSK
Вообще, место для этой ошибки ("SPNEGO: Could not find a suitable mechtype in NEG_TOKEN_INIT") имеется ровно одно - функция spnego_parse_negTokenInit():

$ git grep gensec_spnego_parse_negTokenInit|cat
auth/gensec/spnego.c:static NTSTATUS gensec_spnego_parse_negTokenInit(struct gensec_security *gensec_security,
auth/gensec/spnego.c:                   nt_status = gensec_spnego_parse_negTokenInit(gensec_security,
auth/gensec/spnego.c:           nt_status = gensec_spnego_parse_negTokenInit(gensec_security,

Такая ошибка - Could not find a suitable mechtype... - может возникнуть при расхождении версий клиентов и серверов. И я об этом не вижу никаких упоминаний. Даже дистрибутив "Образование" я не использовал так что не знаю - это p7 или p8?

Ну, и сервер-то какой? Какова инфраструктура в которую добавляют клиент?
Comment 10 Константин Артюшкин 2017-05-04 14:30:57 MSK
(В ответ на комментарий №9)
> Вообще, место для этой ошибки ("SPNEGO: Could not find a suitable mechtype in
> NEG_TOKEN_INIT") имеется ровно одно - функция spnego_parse_negTokenInit():
> 
> $ git grep gensec_spnego_parse_negTokenInit|cat
> auth/gensec/spnego.c:static NTSTATUS gensec_spnego_parse_negTokenInit(struct
> gensec_security *gensec_security,
> auth/gensec/spnego.c:                   nt_status =
> gensec_spnego_parse_negTokenInit(gensec_security,
> auth/gensec/spnego.c:           nt_status =
> gensec_spnego_parse_negTokenInit(gensec_security,
> 
> Такая ошибка - Could not find a suitable mechtype... - может возникнуть при
> расхождении версий клиентов и серверов. И я об этом не вижу никаких упоминаний.
> Даже дистрибутив "Образование" я не использовал так что не знаю - это p7 или
> p8?
> 
> Ну, и сервер-то какой? Какова инфраструктура в которую добавляют клиент?

https://bugzilla.altlinux.org/show_bug.cgi?id=33369#c2

Какая ещё информация нужна?
Comment 11 Evgeny Sinelnikov 2017-05-04 14:33:31 MSK
Да, я уже пересмотрел...

samba-DC-4.6.2-alt1.M80P.1 - сервер
samba-4.6.2-alt2.M80P.1 - клиент.

А информация нужна полная. По названию пакетов воспроизвести проблему не получится. Давайте собирём вывод утилиты sosreport на клиенте и на сервере. Поднимем уровень логов. Вот такая информация необходима.
Comment 12 Константин Артюшкин 2017-05-05 16:18:21 MSK
(В ответ на комментарий №11)
> А информация нужна полная. По названию пакетов воспроизвести проблему не
> получится. Давайте собирём вывод утилиты sosreport на клиенте и на сервере.
> Поднимем уровень логов. Вот такая информация необходима.

Какой уровень логов нужен? Вы про опцию --all-logs?
Comment 13 Evgeny Sinelnikov 2017-05-06 16:09:23 MSK
Условно, я выделяю три уровня сложности из основных:
log level = 3, 6 или 10
Всё зависит от объёма мусора для выделения существенного. Можно установить 6, по умолчанию, и 10, как расширенный.

Упаковать их можно в два архива, созданных с помощью sosreport. Сначала прогнать 6, потом сделать sosreport-отчёт. Потом ещё раз 10. Вообще, даже 3 может быть полезен. Думаю сначала нужно смотреть на нём и логи сразу с ним присылать.
Comment 14 Константин Артюшкин 2017-05-10 16:40:55 MSK
(В ответ на комментарий №13)
> Условно, я выделяю три уровня сложности из основных:
> log level = 3, 6 или 10
> Всё зависит от объёма мусора для выделения существенного. Можно установить 6,
> по умолчанию, и 10, как расширенный.
> 
> Упаковать их можно в два архива, созданных с помощью sosreport. Сначала
> прогнать 6, потом сделать sosreport-отчёт. Потом ещё раз 10. Вообще, даже 3
> может быть полезен. Думаю сначала нужно смотреть на нём и логи сразу с ним
> присылать.

Выполнил с уровнями 6 и 10. Результат можно найти по адресу https://stog.etersoft.ru/d/1a5ab7bce8/
Comment 15 Evgeny Sinelnikov 2017-05-11 15:41:57 MSK
К сожалению, запаковалось не всё, что нужно. Samba логи, вообще, отсутствуют.

Давайте уточним команду. Предлагая, для верности включить нужные модули явно:
# sosreport -e krb5,samba --all-logs

Использовать нужно новую сборку sos из Сизифа.
#182831 BUILDING #2 [locked] p8 sos.git=3.4-alt1%ubt

Старая не собирает все нужные логи. Плюс я, вообще не обнаружил samba в архиве для сервера. Проверьте, пожалуйста, архив перед отправкой. Там должен быть запакаован весь /var/log/samba
Comment 16 Константин Артюшкин 2017-05-11 17:52:34 MSK
(В ответ на комментарий №15)
> К сожалению, запаковалось не всё, что нужно. Samba логи, вообще, отсутствуют.
> 
> Давайте уточним команду. Предлагая, для верности включить нужные модули явно:
> # sosreport -e krb5,samba --all-logs
> 
> Использовать нужно новую сборку sos из Сизифа.
> #182831 BUILDING #2 [locked] p8 sos.git=3.4-alt1%ubt
> 
Добавил эту версию 
 $ rpm -qa | egrep -i --color -- "(sos)"
sos-3.4-alt1.M80P.1

Обновил файлы в https://stog.etersoft.ru/d/1a5ab7bce8/. Теперь там логи выполненные командой # sosreport -e krb5,samba --all-logs. В логах сервера присутствует каталог /var/log/samba
Comment 17 Константин Артюшкин 2017-06-07 15:52:11 MSK
На данный момент 2017-06-05.
Обновил пакеты samba (на данный момент 4.6.4 )на сервере и клиенте.
Почистил стары конфиги по инструкции "https://www.altlinux.org/ActiveDirectory/DC/Создание нового домена" 
  rm -f /etc/samba/smb.conf
  rm -rf /var/lib/samba
  mkdir -p /var/lib/samba/sysvol

Создал заново samba-tool domain provision

Ошибок при подключении с командой system-auth wrute больше нет
Comment 18 Evgeny Sinelnikov 2017-07-17 04:00:28 MSK
Наткнулся снова на эту проблему, как на фантомную боль.

[mastersin@kr01-dc-alt ~]$ sudo apt-get install /usr/bin/smbclient
Reading Package Lists... Done
Building Dependency Tree... Done
Package /usr/bin/smbclient is a virtual package provided by:
  samba-DC-client 4.6.6-alt1.M70C.1 [Installed]
  samba-client 4.6.6-alt1.M70C.1
You should explicitly select one to install.
E: Package /usr/bin/smbclient is a virtual package with multiple good providers.

[mastersin@kr01-dc-alt ~]$ smbclient -k -L //kr01-dc-w2k8
SPNEGO: Could not find a suitable mechtype in NEG_TOKEN_INIT
session setup failed: NT_STATUS_INTERNAL_ERROR
[mastersin@kr01-dc-alt ~]$ klist 
Ticket cache: KEYRING:persistent:511:krb_ccache_ZFeuOaW
Default principal: sin@DP.MOSREG.RU

Valid starting       Expires              Service principal
17.07.2017 03:08:47  17.07.2017 13:08:47  krbtgt/DP.MOSREG.RU@DP.MOSREG.RU
        renew until 24.07.2017 03:08:42
[mastersin@kr01-dc-alt ~]$ klist -e
Ticket cache: KEYRING:persistent:511:krb_ccache_ZFeuOaW
Default principal: sin@DP.MOSREG.RU

Valid starting       Expires              Service principal
17.07.2017 03:08:47  17.07.2017 13:08:47  krbtgt/DP.MOSREG.RU@DP.MOSREG.RU
        renew until 24.07.2017 03:08:42, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 
[mastersin@kr01-dc-alt ~]$ smbclient -k -L //kr01-dc-02
Connection to kr01-dc-02 failed (Error NT_STATUS_IO_TIMEOUT)


И вот, что выясняется...

[mastersin@kr01-dc-alt ~]$ sudo apt-get install samba-client
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  libnetapi libsmbclient samba-client-libs samba-common samba-common-libs samba-common-tools samba-libs
The following packages will be REMOVED:
  samba-DC samba-DC-client samba-DC-common samba-DC-winbind samba-DC-winbind-clients
The following NEW packages will be installed:
  libnetapi libsmbclient samba-client samba-client-libs samba-common samba-common-libs samba-common-tools samba-libs
0 upgraded, 8 newly installed, 5 removed and 0 not upgraded.
Need to get 0B/6074kB of archives.
After unpacking 8039kB of additional disk space will be used.
Do you want to continue? [Y/n] 
Committing changes...
Preparing...          ################### [100%]
1: samba-common       ################### [ 12%]
2: samba-client-libs  ################### [ 25%]
3: libnetapi          ################### [ 37%]
4: libsmbclient       ################### [ 50%]
5: samba-libs         ################### [ 62%]
6: samba-common-libs  ################### [ 75%]
7: samba-common-tools ################### [ 87%]
8: samba-client       ################### [100%]
Running /usr/lib/rpm/posttrans-filetriggers
Done.
[mastersin@kr01-dc-alt ~]$ smbclient -k -L //kr01-dc-w2k8

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        SYSVOL          Disk      Logon server share 

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

Утилиты на клиенте и на сервере в сборках samba и samba-DC используют разную библиотеку Kerberos. На клиенте используется обычный MIT Kerberos, на контроллере домена - встроенный Heimdal. Очевидно у них разные настройки на придмет допустимых и поддерживаемых алгоритмов шифрования.
Comment 19 Evgeny Sinelnikov 2017-07-17 04:25:19 MSK
В общем, дел не в алгоритмах шифрования. Это некорректный вывыод ошибки.

strace показывает, что встроенная библиотека лезет не в тот (credential_cache)  - то ли не умеет keyutils, вообще, то ли не понимает записи в настройках MIT Kerberos.

[mastersin@kr01-dc-alt ~]$ strace -f smbclient -k -L //kr01-dc-w2k8
...
getuid()                                = 511
open("/home/mastersin/.krb5/config", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/krb5.conf", O_RDONLY)        = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1fde975000
read(6, "[logging]\n# default = FILE:/var/"..., 4096) = 682
read(6, "", 4096)                       = 0
close(6)                                = 0
munmap(0x7f1fde975000, 4096)            = 0
open("/home/mastersin/.krb5/config", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/krb5.conf", O_RDONLY)        = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1fde975000
read(6, "[logging]\n# default = FILE:/var/"..., 4096) = 682
read(6, "", 4096)                       = 0
close(6)                                = 0
munmap(0x7f1fde975000, 4096)            = 0
open("/tmp/krb5cc_511", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "SPNEGO: Could not find a suitabl"..., 61SPNEGO: Could not find a suitable mechtype in NEG_TOKEN_INIT
) = 61
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 6), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1fde975000
write(1, "session setup failed: NT_STATUS_"..., 47session setup failed: NT_STATUS_INTERNAL_ERROR
) = 47
close(4)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Если закомментировать вот эту строку, то всё отрабатывает.

[mastersin@kr01-dc-alt ~]$ grep ccache_name /etc/krb5.conf 
# default_ccache_name = KEYRING:persistent:%{uid}

[mastersin@kr01-dc-alt ~]$ kinit 
kinit: Client 'mastersin@DP.MOSREG.RU' not found in Kerberos database while getting initial credentials
[mastersin@kr01-dc-alt ~]$ kinit sin 
Password for sin@DP.MOSREG.RU: 
[mastersin@kr01-dc-alt ~]$ klist 
Ticket cache: FILE:/tmp/krb5cc_511
Default principal: sin@DP.MOSREG.RU

Valid starting       Expires              Service principal
17.07.2017 04:17:55  17.07.2017 14:17:55  krbtgt/DP.MOSREG.RU@DP.MOSREG.RU
        renew until 24.07.2017 04:17:48
[mastersin@kr01-dc-alt ~]$ smbclient -k -L //kr01-dc-w2k8

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        SYSVOL          Disk      Logon server share 

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
Comment 20 Vitaly Lipatov 2017-08-02 00:48:39 MSK
> Если закомментировать вот эту строку, то всё отрабатывает.

> [mastersin@kr01-dc-alt ~]$ grep ccache_name /etc/krb5.conf 
> # default_ccache_name = KEYRING:persistent:%{uid}
Не очень понял, как избавились от ошибки — комментированием этой строки? А к чему это приведёт?
Хорошо бы не выставлять CLOSED FIXED без комментариев, а то тут ни CLOSED, ни FIXED.
Comment 21 Vitaly Lipatov 2019-03-23 18:04:48 MSK
(В ответ на комментарий №20)
> > Если закомментировать вот эту строку, то всё отрабатывает.
> 
> > [mastersin@kr01-dc-alt ~]$ grep ccache_name /etc/krb5.conf 
> > # default_ccache_name = KEYRING:persistent:%{uid}
> Не очень понял, как избавились от ошибки — комментированием этой строки? А к
> чему это приведёт?
> Хорошо бы не выставлять CLOSED FIXED без комментариев, а то тут ни CLOSED, ни
> FIXED.

(В ответ на комментарий №20)
> > Если закомментировать вот эту строку, то всё отрабатывает.
> 
> > [mastersin@kr01-dc-alt ~]$ grep ccache_name /etc/krb5.conf 
> > # default_ccache_name = KEYRING:persistent:%{uid}
> Не очень понял, как избавились от ошибки — комментированием этой строки? А к
> чему это приведёт?
> Хорошо бы не выставлять CLOSED FIXED без комментариев, а то тут ни CLOSED, ни
> FIXED.
А мы будем эту строку комментировать по умолчанию? Сейчас она как и была
 # rpm -qf /etc/krb5.conf
libkrb5-1.16.3-alt1

а с ней ничего не работает с новоприехавшей самбой.

Почти аналогичное описание проблемы:
https://bugs.etersoft.ru/show_bug.cgi?id=13785