LINUX.ORG.RU
решено ФорумAdmin

Samba3 и guest account

 , ,


0

1

Ситуация такая: есть сервер с samba3 и сервер с slapd (openldap). Все учётки, в том числе для самбавского guest account, хранятся в LDAP'е. Если samba-сервер запускается до сервера с LDAP, то возникает проблема из-за того, что samba не видит аккаунт для гостевых входов.

Когда стояла samba 3.4.7 (ubuntu 10.04), то она просто писала сообщение в лог и smbd умирал. Меня такое поведение в принципе устраивало, так как я настроил автоматический перезапуск smbd через restartd, и когда LDAP-сервер появлялся в сети - вся эта система автоматически запускалась и начала работать нормально. До следующего отключения электричества =).

Но после обновления до samba 3.6.3 (ubuntu 12.04) поведение изменилось: самба пишет в лог

[2013/01/14 08:57:41.244400,  0] auth/auth_util.c:669(get_guest_info3)
  SamInfo3_for_guest: Unable to locate guest account [domain-guest]!
и продолжает работать, не пуская гостей. Меня такое поведение не устраивает, так как я никак не могу автоматизировать исправление подобной ситуации.

Вопрос: что делать? Как вернуть старое поведение? Гугл не отвечает.

Deleted

Последнее исправление: cetjs2 (всего исправлений: 3)

Кастую любителей LDAP'а и прочего ънтерпрайза

DRVTiny, no-dashi... больше никого не помню.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Речь о том, чтобы сделать аккаунт guest активным, когда LDAP сервер недоступен или речь о баге, в котором guest перестает быть доступным в случае, если LDAP сервер некоторое время отсутствовал (но уже в строю, другие аккаунты доступны)?

zgen ★★★★★
()
Последнее исправление: zgen (всего исправлений: 1)
Ответ на: комментарий от no-dashi

Вот это и надо исправлять, IMHO.

Предлагаешь сделать плату с микроконтроллером, которая будет включать сервер Б строго после загрузки сервера А? 8)

Deleted
()
Ответ на: комментарий от zgen

Речь о том, чтобы сделать аккаунт guest активным, когда LDAP сервер недоступен

Как один из вариантов решения проблемы - да. Либо сделать так, чтобы samba вообще не запускалась если гостевого аккаунта нет.

Deleted
()
Ответ на: комментарий от Deleted

Либо сделать так, чтобы samba вообще не запускалась если гостевого аккаунта нет.

В скрипт запуска самбы впиши тестовый запуск ldapsearch.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

В скрипт запуска самбы впиши тестовый запуск ldapsearch.

О! Как-то не подумал про этот вариант. Можно даже проще:

id domain-guest || FAIL

Deleted
()
Ответ на: комментарий от Deleted

Сделал так:

 init/smbd.conf |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/init/smbd.conf b/init/smbd.conf
index e887343..9c68727 100644
--- a/init/smbd.conf
+++ b/init/smbd.conf
@@ -14,6 +14,9 @@ pre-start script
 
 	[ "$RUN_MODE" = inetd ] && { stop; exit 0; }
 
+	guest_account=$( sed -ne "s,^  *guest  *account *= *\(.*\) *$,\1,p" /etc/samba/smb.conf )
+	[ -n "${guest_account}" ] && id "${guest_account}"
+
 	install -o root -g root -m 755 -d /var/run/samba
 end script
 
-- 
1.7.9.5
Вроде работает как надо.

Deleted
()
Ответ на: комментарий от Deleted

Честно говоря ничего не понял :(

Если LDAP сервер отсутствует (и, как следствие, guest account) - samba не работает ни в старых версиях, ни в новых
Если LDAP сервер присутствует - значит все работает (должно работать) включая guest.

Какой тут 3й вариант проблемы, решить которую ты пытаешься?

zgen ★★★★★
()
Ответ на: комментарий от zgen

Если LDAP сервер отсутствует (и, как следствие, guest account) - samba не работает ни в старых версиях, ни в новых

Не совсем так. Samba забирает информацию об аккаунте (точнее - UID) не напрямую, а как-то так: smbd -> libnss -> libnss-ldapd -> nslcd -> СЕТЬ -> slapd. Я сейчас лучше этот момент протестировал и выяснил, что проблема возникает когда samba может сама достучаться до LDAP-сервера, но в системе информации о сетевых аккаунтах ещё нет (например из-за того, что nslcd ещё не взлетел).

Deleted
()
Ответ на: комментарий от zgen

Заменил один костыль другим, вместо того, чтобы решить проблему.

У меня сейчас нет столько времени, чтобы переписывать систему работы samba с учётными записями.

Deleted
()
Ответ на: комментарий от Deleted

Или можно запилить кеширование где-то на уровне libnss. Но это опять же требует кучу свободного времени.

Deleted
()
Ответ на: комментарий от Deleted

в системе информации о сетевых аккаунтах ещё нет (например из-за того, что nslcd ещё не взлетел).

Вот эту проблему и надо решать, ибо samba3 тут не причем.

Переключиться на классический libnss никак? он таких проблем не имеет.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Вот эту проблему и надо решать, ибо samba3 тут не причем.

Вообще, это проблема linux'овой системы работы с учётками, паролями и так далее. Если её не переделывать везде и на корню - всегда получится костыль.

Переключиться на классический libnss никак? он таких проблем не имеет.

libnss вообще ничего не умеет, ибо он - фронтэнд. А libnss_file (видимо ты имел ввиду именно его) не умеет получать учётки из сети.

Deleted
()
Ответ на: комментарий от zgen

Наоборот, когда работает nscd - вообще чудеса в решете происходят. Похожие, кстати.

Я и не говорю про nscd. Я говорю про нормальное решение, которое не потребует 100500 дополнительных демонов и примочек, приклеенных на юниксвейные сопли.

Deleted
()
Ответ на: комментарий от Deleted

Предлагаешь сделать плату с микроконтроллером, которая будет включать сервер Б строго после загрузки сервера А? 8)

для этого нужно юзать LDAP репликацию master->slave

и никакого костыля здесь нет! в документации по SAMBA как раз эти моменты все расписаны...

SandySandy
()
Последнее исправление: SandySandy (всего исправлений: 3)
Ответ на: комментарий от Deleted

А libnss_file (видимо ты имел ввиду именно его) не умеет получать учётки из сети.

Я фиг знает, как оно у вас называется:
http://www.padl.com/OSS/nss_ldap.html

Из сети (удаленного LDAP сервера) он все умеет получать. 1 библиотека + 1 файл конфигурации и все. Без демонов и соплей.

zgen ★★★★★
()
Ответ на: комментарий от Deleted

Кстати, реплика в данном случае - это именно то, что должно покрывать проблемы сети/доступности LDAP сервера.

Но поскольку НАСАМОМДЕЛЕ LDAP сервер доступен, а проблемы где-то на уровне стороннего приложения - то надо последнюю решить.

zgen ★★★★★
()
Ответ на: комментарий от SandySandy

для этого нужно юзать LDAP репликацию master->slave

и никакого костыля здесь нет! в документации по SAMBA как раз эти моменты все расписаны...

Это и есть костыль.

P.S. А если у бы меня была 1000 samba-серверов?

Deleted
()
Ответ на: комментарий от zgen

Но поскольку НАСАМОМДЕЛЕ LDAP сервер доступен, а проблемы где-то на уровне стороннего приложения - то надо последнюю решить.

Проблема не в конкретном приложении, а во взаимодействии нескольких разных компонентов системы: nmbd, libnss/libnss_ldapd, nslcd и slapd. Вся эта система крива by design. Unix-way, чтоб его тудыть...

Deleted
()
Ответ на: комментарий от Deleted

Вся эта система крива by design. Unix-way, чтоб его тудыть...

Я и объясняю, что с банальным nss_ldap таких проблем просто нет, как класса ибо все 2 состояния:

1) ldap сервер доступен
2) ldap сервер недоступен

zgen ★★★★★
()
Ответ на: комментарий от zgen

Ответ в том, что учётные записи должны быть доступны всегда: есть LDAP-сервер или нет LDAP-сервера. Для этого данные NSS и PAM кешируются. Я ещё делал локальную реплику и прописывал в ldap_uri реплику на первом месте, мастер-сервер на втором. В целом кеширование и репликация дают очень высокую отказоустойчивость схемы.

DRVTiny ★★★★★
()
Ответ на: комментарий от zgen

У тебя получалось заставить его нормально работать?

Да, получилось. А что в нём не так? Кстати, здорово ускоряет работу того же сервера Samba.

DRVTiny ★★★★★
()
Ответ на: комментарий от DRVTiny

Да, получилось. А что в нём не так? Кстати, здорово ускоряет работу того же сервера Samba.

При использовании nscd становятся недоступными аккаунты (часть), которые на самом деле полностью доступны. Другие остаются доступными.

zgen ★★★★★
()
Ответ на: комментарий от DRVTiny

У человека недоступен аккаунт по nss, а ты ему советуешь заюзать
pam_ccreds, я предположил, что это (кешеирование через PAM) никак не поможет, поскольку samba им (PAM) не пользуется вовсе.

Я неправ?

zgen ★★★★★
()
Ответ на: комментарий от zgen

Я и объясняю, что с банальным nss_ldap таких проблем просто нет, как класса ибо все 2 состояния:

А, ты про nss_ldap говорил... Не помню точно что, но что-то меня заставило перейти с него на nss_ldapd. Вроде каких-то фич не хватало.

Deleted
()
Ответ на: комментарий от Deleted

Осталось наткнуться на pam_ccreds Насчёт NSCD zgen прав в том, что по народным поверьям с winbindd оно не слишком дружит, но winbind нужен при воссоединении с чужеродным доменом Windows , а никак не для того, чтобы самому играть роль контроллера домена.

DRVTiny ★★★★★
()
Ответ на: комментарий от DRVTiny

но winbind нужен при воссоединении с чужеродным доменом Windows

Почему с чужеродным? С родным - тоже. Например domain member на samba3 при DC на samba3. При trust'е DC с другим DC под samba3 (при этом функции чужого домена фактически исполняет родной). При реализации ntlm auth в проксе тоже нужен winbind.

zgen ★★★★★
()
Последнее исправление: zgen (всего исправлений: 2)
Ответ на: комментарий от DRVTiny

Осталось наткнуться на pam_ccreds

Вот это мне точно не нужно. PAM вообще к изначальной проблеме никакого отношения не имеет.

Deleted
()
Ответ на: комментарий от DRVTiny

Авторизация на Samba не использует PAM?

Проблема не в авторизации, а в преобразовании имя -> ID. А этим занимется не PAM, а NSS.

Deleted
()
Ответ на: комментарий от DRVTiny

Авторизация на Samba не использует PAM?

Неа, в конфигурации с ldapsam не использует.

zgen ★★★★★
()
Ответ на: комментарий от Deleted

Это и есть костыль.

P.S. А если у бы меня была 1000 samba-серверов?

Фантазер! Из серии А если бы бабушка была дедушкой...

Как это все работает написал DRVTiny

Я ещё делал локальную реплику и прописывал в ldap_uri реплику
на первом месте, мастер-сервер на втором. В целом кеширование
и репликация дают очень высокую отказоустойчивость схемы.

SandySandy
()
Последнее исправление: SandySandy (всего исправлений: 1)

ни кто не советовал еще?

smb.conf:

guest account = nobody

/etc/ldap.conf:

nss_initgroups_ignoreusers root,nobody

так же там полезно добавить всех системных...

SandySandy
()
Последнее исправление: SandySandy (всего исправлений: 2)
Ответ на: комментарий от Deleted

Проблема не в авторизации, а в преобразовании имя -> ID

Тогда ОК. Я просто всегда настраиваю и PAM, и NSS, поскольку уж если использовать LDAP, то для Unix-авторизации в первую очередь.

DRVTiny ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.