Назад | Перейти на главную страницу

Samba + LDAP: аутентификация пользователя работает на одном сервере, но не на другом

У меня очень неприятная проблема, которую я пытаюсь решить уже несколько дней, может быть, кто-нибудь из вас сможет мне помочь.

У меня есть два (автономных) сервера самбы, которые должны аутентифицировать пользователей с помощью сервера LDAP. Оба сервера samba используют LDAP для аутентификации пользователей nss и unix (т.е. ssh работает для всех пользователей LDAP, getent passwd / group показывает всех пользователей / группы) правильно. Однако самба работает только на сервере 1, но не на сервере 2, я получаю

[2013/06/06 19:03:06.972236,  3] auth/auth.c:216(check_ntlm_password)
  check_ntlm_password:  Checking password for unmapped user [XXX]\[xxx]@[XXX] with the new password interface
[2013/06/06 19:03:06.972266,  3] auth/auth.c:219(check_ntlm_password)
  check_ntlm_password:  mapped user is: [YYY]\[xxx]@[XXX]
[2013/06/06 19:03:06.972311,  3] smbd/sec_ctx.c:210(push_sec_ctx)
  push_sec_ctx(0, 0) : sec_ctx_stack_ndx = 1
[2013/06/06 19:03:06.972334,  3] smbd/uid.c:429(push_conn_ctx)
  push_conn_ctx(0) : conn_ctx_stack_ndx = 0
[2013/06/06 19:03:06.972351,  3] smbd/sec_ctx.c:310(set_sec_ctx)
  setting sec ctx (0, 0) - sec_ctx_stack_ndx = 1
[2013/06/06 19:03:06.972395,  3] smbd/sec_ctx.c:418(pop_sec_ctx)
  pop_sec_ctx (0, 0) - sec_ctx_stack_ndx = 0
[2013/06/06 19:03:06.972414,  3] auth/auth_sam.c:399(check_sam_security)
  check_sam_security: Couldn't find user 'xxx' in passdb.
[2013/06/06 19:03:06.972432,  2] auth/auth.c:314(check_ntlm_password)
  check_ntlm_password:  Authentication for user [xxx] -> [xxx] FAILED with error NT_STATUS_NO_SUCH_USER
[2013/06/06 19:03:06.972463,  3] smbd/error.c:80(error_packet_set)
  error packet at smbd/sesssetup.c(111) cmd=115 (SMBsesssetupX) NT_STATUS_LOGON_FAILURE

Общий раздел smb.conf: именно то же самое на обоих серверах. Однако сервер 1 правильно использует LDAP:

[2013/06/06 19:15:38.458920,  3] auth/auth.c:216(check_ntlm_password)
  check_ntlm_password:  Checking password for unmapped user [YYY]\[xxx]@[XXX] with the new password interface
[2013/06/06 19:15:38.458941,  3] auth/auth.c:219(check_ntlm_password)
  check_ntlm_password:  mapped user is: [XXX]\[xxx]@[XXX]
[2013/06/06 19:15:38.458961,  3] smbd/sec_ctx.c:210(push_sec_ctx)
  push_sec_ctx(0, 0) : sec_ctx_stack_ndx = 1
[2013/06/06 19:15:38.458974,  3] smbd/uid.c:429(push_conn_ctx)
  push_conn_ctx(0) : conn_ctx_stack_ndx = 0
[2013/06/06 19:15:38.458987,  3] smbd/sec_ctx.c:310(set_sec_ctx)
  setting sec ctx (0, 0) - sec_ctx_stack_ndx = 1
[2013/06/06 19:15:38.465392,  3] lib/smbldap.c:735(smb_ldap_start_tls)
  StartTLS issued: using a TLS connection
[2013/06/06 19:15:38.479800,  2] lib/smbldap.c:950(smbldap_open_connection)
  smbldap_open_connection: connection opened
[2013/06/06 19:15:38.481107,  3] lib/smbldap.c:1166(smbldap_connect_system)
  ldap_connect_system: successful connection to the LDAP server
[2013/06/06 19:15:38.481136,  4] lib/smbldap.c:1242(smbldap_open)
  The LDAP server is successfully connected
[2013/06/06 19:15:38.481922,  2] passdb/pdb_ldap.c:572(init_sam_from_ldap)
  init_sam_from_ldap: Entry found for user: ldaplookup

Единственное существенное отличие состоит в том, что сервер 1 - это debian 6.0.3 с samba 3.5.6, а сервер 2 - это CentOS 6.3 с samba 3.5.10. Файлы конфигурации ldap и pam находятся в разных местах, но самба мне кажется идентичной. Вот smb.conf без общих ресурсов:

[global]
   workgroup = XXX
   server string = %h server
   dns proxy = no
   name resolve order = lmhosts host wins bcast
   hosts allow = 127.0.0.0/8 192.168.99.0/24 172.24.0.0/16 172.25.0.0/16 172.30.0.0/16
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = true
   passdb backend = ldapsam:ldap://myldapserver
   ldap suffix = dc=mydomain,dc=com
   ldap admin dn = cn=replicator,dc=mydomain,dc=com
   ldap user suffix = ou=users
   ldap group suffix = ou=groups
   ldap machine suffix = ou=computers
   ldap passwd sync = Yes
   ldap ssl = start tls
   ldap debug level = 4
   log level = 4
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes

Я искал руководства и учебные пособия в течение последних нескольких дней, но в основном они использовали winbind и idmap, но поскольку моя установка работает для одного сервера, я не вижу необходимости в настройке дополнительных служб. Где-то в конфигурации должна быть ошибка, которую я не вижу. Поскольку до этого я использовал только debian и ubuntu в качестве серверной ОС, я не знаю, не хватает ли мне чего-то простого, что мне нужно включить / отключить / изменить в CentOS.

Я перезагрузил (но не перезапустил) службу samba на обоих серверах после изменения конфигурации. Перезапуск невозможен в ближайшие дни, поскольку пользователи работают в нем 24/7, и перезапуск приведет к разрыву соединения afaik. Однако, согласно log.smbd, конфигурация была обновлена:

[2013/06/06 19:44:15.896620,  3] param/loadparm.c:7873(do_section)
  Processing section "[global]"
...
  doing parameter passdb backend = ldapsam:ldap://myldapserver
  doing parameter ldap suffix = dc=mydomain,dc=com
...

И изменение таких вещей, как уровень отладки, работает. Может ли быть проблема, что при перезагрузке перезагружаются только некоторые части конфигурации, но не все?

Благодарю за каждую подсказку!