Пользователь в 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 ответа
РЕШИТЬ!!!!!!!!!!!
У меня есть скрипт, который запускал 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 не имеет никакого эффекта.
Надеюсь, что это помогает другим сборщикам систем....