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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.