Пользователь в passdb, но getpwnam() не работает!

Попытка настроить Samba + OpenLDAP с помощью nss_ldap.

После присоединения Windows7 к автономному PDC Samba я не могу войти с учетной записью домена, если эта учетная запись также не добавлена ​​в файл /etc/passwd.

Я получаю: пользователь в passdb, но getpwnam() не работает!

Все, что я прочитал, пока указывает на проблему NSS_LDAP, getent passwd отлично показывает пользователей, и я могу зайти на тот же хост Linux, используя учетную запись пользователя, которая есть только в базе данных LDAP.

Кроме того, если я открою файл /etc/passwd и добавлю строку для данного пользователя, я могу войти в систему.

Я не использую PAM. Я добавил два обновления реестра Windows7, необходимые для сайта Samba.org.

Программный стек выглядит следующим образом: Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264

Мысли / предложения?

--------------------------------- ОБНОВИТЬ ---------------- -----------------

Все ближе! В моем nsswitch.conf были файлы ldap, поэтому я изменил порядок (теперь файлы ldap), и произошло нечто странное. Заметьте, раньше я говорил, что могу войти через SSH и getent passwd выгрузил пользователей как в ldap, так и в файлах. После внесения изменений в nsswitch.conf, ldap перед файлами, простые команды, такие как ls, заняли много времени. Кроме того, я обнаружил ошибки nss_ldap следующим образом:

ls: nss_ldap: не удалось найти сервер LDAP - сервер недоступен

а также

ls: nss_ldap: не удалось привязаться к серверу LDAP ldap://tsrvr.example.corp: неверные учетные данные

Я закомментировал строку rootbinddn в ldap.conf, и эти ошибки исчезли, и getent passwd немедленно снова начал работать. Изменился и порядок вывода: записи ldap перечислены перед записями файлов.

Тем не менее, мой клиент Windows7 не будет входить в домен, и я продолжаю получать то же сообщение об ошибке Samba

Тест пользователя в passdb, но getpwnam() не пройден!

В моем файле smb.conf я попытался удалить строку ldapsam:trust = yes, и при этом я получаю ошибки аутентификации домена.

Я не использую SSL/TLS с OpenLDAP, и у меня есть SSL = нет настройки. У меня также есть набор файлов ldap.secret. Я запускаю slapd под учетной записью root. Мой rootbinddn перед комментарием ссылался на корневого пользователя LDAP: uid=root,ou=Users,dc=example,dc=corp. userPassword пользователя root, использующий CRYPT, совпадает с bindpw, а также в /etc/shadow.

Если посмотреть на активность журнала LDAP, когда я получаю ошибку Samba, кажется, что LDAP возвращает правильный результат по запросу Samba:

19 июня 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 база SRCH ="dc= пример,dc=corp" scope=2 deref=0 filter="(&(uid=test)(objectClass=sambaSamAccount))"19 июня 14:20:14 tsrvr Slapd [3803]: Conn = 1025 оп =15 SRCH атр = UID uidNumber gidNumber HomeDirectory sambaPwdLastSet sambaPwdCanChange sambaPwdMustChange sambaLogonTime sambaLogoffTime sambaKickoffTime CN SN описание DisplayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword Сэм baNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBadPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestam p uidNumber gidNumber homeDirectory Тэг входа в систему = тэг = = = = ==============================================================================3_0_C_ВЭРОН-ТИПЛАВНОМ СОБРАНИИ СО СТРАНИЦЕВЫХ ОБРАЗОВАНИЙ ПО ВНУТР.

Любые другие предложения?

Очень признателен

2 ответа

Решение

Похоже, проблема с /etc/nsswitch.conf, В частности, passwd а также group Строки должны ссылаться на ldap перед compat или файлом. Вы смотрели на эту запись в Samba?

РЕШИТЬ!!!!!!!!!!!

У меня есть скрипт, который запускал Samba (NMBD, SMBD), а также OpenLDAP (SLAPD). Это RC-скрипт, который считывает данные конфигурации из файла, чтобы определить, среди прочего, какие процессы уже запущены или не удалось запустить зависимый процесс и т. Д. Вот фрагмент соответствующей части в скрипте. Последняя строка копирует версию nsswitch.conf на место, которое указывает использовать поиск LDAP.

while [ $i -lt $MAXPROCS ];
  do
   PID=${PROC[$i]}
   StartProc $PID

   if test $? != 0; then
    echo "!!! Aborting Any Remaining Start-up Processes !!!"
    exit 1
   fi

  i=$(($i+1))
done

 cp /etc/rc.d/pozix/nsswitch.conf.ldap /etc/nsswitch.conf

И после выключения я делал следующее; обратите внимание, я копирую файл nsswitch.conf, в котором есть записи "noldap".

while [ $i -lt $MAXPROCS ];
do
  PID=${PROC[$i]}
  StopProc $PID
  i=$(($i+1))
done

cp /etc/rc.d/pozix/nsswitch.conf.noldap /etc/nsswitch.conf

Оказывается, что в сценарии запуска samba хочет, чтобы в содержимом nsswtich.conf были записи ldap до вызова. Вот что я сделал, чтобы исправить свои проблемы:

cp /etc/rc.d/pozix/nsswitch.conf.ldap /etc/nsswitch.conf

while [ $i -lt $MAXPROCS ];
  do
   PID=${PROC[$i]}
   StartProc $PID

   if test $? != 0; then
    cp /etc/rc.d/pozix/nsswitch.conf.noldap /etc/nsswitch.conf
    echo "!!! Aborting Any Remaining Start-up Processes !!!"
    exit 1
   fi

  i=$(($i+1))
done

Таким образом, кажется, что способ запуска SMBD так же важен, как и при его запуске. Если вы запускаете SMBD, когда nsswitch.conf не имеет записей LDAP, вы получаете версию smbd, работающую с nss_ldap.so, полагая, что она должна полагаться только на /etc/passwd (если это все, что есть в файле nsswitch.conf) и изменение содержимого nsswitch.conf после запуска SMBD не имеет никакого эффекта.

Надеюсь, что это помогает другим сборщикам систем....

Другие вопросы по тегам