У меня есть сервер 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) исправляет ошибку, делая обходной путь ненужным.