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

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

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

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

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

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

Я не использую ПАМ. Я добавил два обновления реестра 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:trusted = yes, и когда я это делаю, я получаю ошибки аутентификации домена.

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

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

19 июня 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 SRCH base="dc=example,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 сп зп DisplayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath описание sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword Сэм baNTPassword SambaDomainName ObjectCass Sambaacctflags Sambamungeddial Sambabadpasswordscount Sambabaspasswordtime Sambapasswasshistory ModifyTimestamp Sambalobonhours ModifyTimestam P UIDNumber GidnoMonhours ModifytimeStam P UIDNumber GiDnumbous Homedirectory LoginShell Gecos Jun 19 14:20:14 TSRVR SLAPD [3803]: Conn = 1025 op = 15 Результат поиска Результаты = 1 101 ERR = 0 NENTRIES = 1 Текст = 1

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

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


person Eric    schedule 19.06.2010    source источник


Ответы (2)


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

person Craig Trader    schedule 19.06.2010
comment
Отметив это как правильный ответ. Это была проблема, но, более конкретно, это был также порядок событий в том, что параметр nsswitch.conf должен быть там, прежде чем вы запускаете демоны LDAP и SMBD. Я устанавливал настройки nsswitch.conf после запуска своих сервисов... Позор мне;) - person Eric; 12.11.2010

РЕШЕНО!!!!!!!!!!

У меня есть скрипт, запускающий 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 не имеет никакого эффекта.

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

person Eric    schedule 28.06.2010