Назад | Перейти на главную страницу

обновление до samba 3.6.23-30 на сервере RedHat 6.7 разрывает соединения от клиентов в лесу AD

У меня есть сервер Samba (версия 3.6.23-30), работающий на сервере RedHat Enterprise версии 6.7. Он присоединен к Active Directory и аутентифицирует пользователей в AD. Winbind не работает ("Winbind не используется; пользователи и группы являются локальными"ситуация, согласно Samba howto). Это прекрасно работало долгое время, до последнего обновления samba 3.6.23-25 ​​до 3.6.23-30 (на самом деле несколько исправлений для проблем безопасности, включая Badlock, были введены за 10 дней. назад в 3.6.23-26, но эта версия здесь никогда не была развернута).

Я попытался понизить Samba до 3.6.23-25, и это решает проблему (но конечно не решение, учитывая исправления безопасности, содержащиеся в 3.6.23-26):

yum downgrade samba-3.6.23-25.el6_7.x86_64 samba-common-3.6.23-25.el6_7 samba-winbind-clients-3.6.23-25.el6_7 samba-client-3.6.23-25.el6_7 samba-winbind-3.6.23-25.el6_7

После установки обновления пользователи больше не могли подключаться к общим папкам на сервере, получая сообщение «Доступ запрещен»:

C:\Users\admin>net use \\servername /user:INTRANET\username
The password or user name is invalid for \\servername.

Enter the password for 'INTRANET\username' to connect to 'servername':
System error 5 has occurred.

Access is denied.

Это не из-за неправильного пароля или чего-то подобного, потому что в этом случае отображается ошибка 1326 (неверное имя пользователя или пароль). Было опробовано подключение из Windows 7, Windows Server 2012 R2 и даже Windows XP SP3 с тем же результатом.

net ads testjoin говорит, что этот сервер правильно присоединен к Active Directory. Я также пытался выйти из AD и вернуться в нее, но это не улучшило ситуацию.

Сообщение об ошибке для клиента в журнале smbd (с использованием уровня журнала отладки):

[2016/04/18 14:09:19.133618,  2] ../libcli/auth/credentials.c:289(netlogon_creds_client_check)   credentials check failed
[2016/04/18 14:09:19.133674,  0] rpc_client/cli_netlogon.c:623(rpccli_netlogon_sam_network_logon)   rpccli_netlogon_sam_network_logon: credentials chain check failed 
[2016/04/18 14:09:19.134036,  0] auth/auth_domain.c:331(domain_client_validate)   domain_client_validate: unable to validate password for user username in domain INTRANET to Domain controller AD6. Error was NT_STATUS_ACCESS_DENIED. 
[2016/04/18 14:09:19.135842,  5] auth/auth.c:281(check_ntlm_password)   check_ntlm_password: winbind authentication for user [username] FAILED with error NT_STATUS_ACCESS_DENIED 
[2016/04/18 14:09:19.135917,  2] auth/auth.c:330(check_ntlm_password)   check_ntlm_password:  Authentication for user [username] -> [username] FAILED with error NT_STATUS_ACCESS_DENIED

Теперь, если я запустил демон winbind, проблема аутентификации исчезнет, ​​и пользователи смогли успешно подключиться к серверу Samba. Однако в этом случае появляется вторая досадная проблема. Взять каталог, в котором у пользователя есть права только из-за членства в группе (т.е. пользователь является членом группы UNIX на сервере Samba):

username$ ls -l /export/projects/testproject
drwxrws---.  2 root testgrp     4096 Apr 18 11:24 testproject

Вот, username является членом testgrp группа и может успешно получить доступ к каталогу:

username$ ls -l /export/projects/testproject/
-rw-r--r--. 1 root testgrp         0 Apr 18 11:24 test.txt

Тот же пользователь, подключенный к серверу Samba, может не доступ к каталогу (доступ запрещен). Перед обновлением (с winbindd отключен) доступ работал нормально. Думаю, это как-то связано с тем, что winbindd работает, как testgrp группа не сопоставляется ни с одним объектом AD (отображается в Безопасность вкладка проводника Windows как Группа UNIX \ testgrp).

Есть ли способ использовать локальные группы, как здесь, с включенным winbind (и без необходимости создания соответствующих объектов AD)? Я попытался добавить это в smbd.conf:

idmap config * : backend = tdb
idmap config * : range = 1000000-1999999

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

Или, в качестве альтернативы, что может быть проблемой "отказано в доступе" при запуске Samba без winbindd? Это ошибка введены обновлением (и поэтому должны быть отправлены как отчет об ошибке в RedHat), или, скорее, характерная черта из-за какого-то изменения модели безопасности?

Да, это ошибка вышестоящей Samba, которая была представлена ​​пользователям RHEL в последних обновлениях пакета Samba. Red Hat знает об этой проблеме и имеет патч-кандидат для ее устранения, но на сегодняшний день (27 апреля) еще не выпустила обновление с этим патчем. Видеть https://bugzilla.redhat.com/show_bug.cgi?id=1326918 и https://bugzilla.redhat.com/show_bug.cgi?id=1327697 следить за обновлениями по этому поводу.

Между тем, некоторые пользователи могут запустить winbindd в качестве временного решения, если их конфигурация позволяет это; в противном случае переход на предыдущую версию, как вы это сделали, - единственный другой вариант.

Я столкнулся с той же проблемой: у меня была сломана аутентификация AD без winbind.

Причина, по которой я остановил winbind изначально, заключалась в том, что он не мог найти локальные группы (хотя, похоже, он нашел правильное сопоставление пользователей). Вот отрывок из журнала с активированным winbind:

[2016/04/22 16: 15: 20.654780, 5] Auth / token_util.c: 527 (debug_unix_user_token)
Токен UNIX пользователя 1154
Основная группа - 496 и содержит 0 дополнительных групп.

Как видите, идентификатор пользователя правильный (1154), но группы не найдены, кроме основной (что тоже верно).

Кажется, я нашел решение, чтобы исправить эту проблему: вы должны добавить опцию

username map script = /bin/echo

в /etc/smb.conf. Это решение было предложено здесь: http://samba.2283325.n4.nabble.com/samba-winbind-ignores-local-unix-groups-td3410748.html, но не проверено.

Как я понял из страниц руководства, эта опция вызывает другое сопоставление после аутентификации AD. Используя команду echo, просто сопоставьте имя самому себе, чтобы оно работало, когда локальное имя пользователя совпадает с именем пользователя AD. Результат следующий:

[2016/04/22 16: 21: 20.996130, 5] auth / token_util.c: 527 (debug_unix_user_token)
Токен UNIX пользователя 1154
Основная группа - 496 и включает 4 дополнительные группы.
[... список групп ...]

Итак, подведем итоги:

  • активируйте winbind, чтобы разрешить аутентификацию AD;

  • Добавить username map script = /bin/echo в файле conf.

Я не считаю это решение идеальным, но это может быть исправлением в ожидании чего-то лучшего.

Так что, возможно, это не подходящее место для этого, но у меня нет репутации для комментариев. У меня также возникла эта проблема с Scientific Linux 6.7, который был обновлен в прошлую среду во всех наших системах. Я обнаружил, что проблема заключается в разрешении имен netbios (nmb). Если пользователь указывает полное доменное имя активного каталога, ему предоставляется доступ, в противном случае, если он использует имя домена netbios, я увижу сообщение «NT_STATUS_ACCESS_DENIED».

Я также обнаружил, что окна Windows, присоединенные к домену, могут получить доступ к общим ресурсам samba, но я считаю, что это потому, что у них есть текущий токен Kerberos.

Обновление: я обнаружил, что указание полного доменного имени фактически задействовало билет Kerberos и предоставило доступ, я обнаружил на машине ubuntu, что установка krb5-user позволила nautilus получить билет Kerberos, а затем разрешить доступ (он не работал без него), поэтому я полагаю, что это та часть, которую делали клиенты Apple / Mac и клиенты Windows, я еще не заметил ..

Хотя это не ответ, я надеюсь, что это поможет. С уважением, -Glen

Как указано в нескольких ответах и ​​комментариях, это действительно была ошибка в пакете Samba после включения исправлений Badlock. В качестве временного обходного пути решение, предоставленное вкладками (с использованием winbindd и установив username map script = /bin/echo директива в файле конфигурации) работала отлично. Сейчас, недавно обновленный пакет (samba-3.6.23-35) исправляет ошибку, делая обходной путь ненужным.