Samba mit LDAP passdb backend

bit-teufel

bit-teufel

Eroberer
Hallo zusammen !

Ich bin gerade dabei einen Samba Server (Version 3.0.30) der mit LDAP (openLDAP 2.4.8) gesteuerte Accounts arbeiten soll, einzurichten.
Nur gibt es ein Problem, wenn ein User der keinen Lokalen Unix Account hat (sambaSamAccount), kann er nicht auf die Shares zugreifen.
In diesem Fall spuckt Samba folgenden Fehler aus:
"NT_STATUS_LOGON_FAILURE" bzw.
[2008/06/05 20:09:07, 0] passdb/pdb_get_set.c:pdb_get_group_sid(211)
pdb_get_group_sid: Failed to find Unix account for test1
[2008/06/05 20:09:07, 1] auth/auth_util.c:make_server_info_sam(566)
User test1 in passdb, but getpwnam() fails!
[2008/06/05 20:09:07, 0] auth/auth_sam.c:check_sam_security(352)
check_sam_security: make_server_info_sam() failed with 'NT_STATUS_NO_SUCH_USER'

Wenn ich mit einem User, der ein lokales Unix Konto hat, einlogge z.B. "root", dann funktioniert alles
wunderbar.

Kann ich LDAP Accounts für Samba benutzen die keinen Lokalen Account haben bzw. quasi Imaginär sind ?
Muss ich noch zusätzlich Programme installieren oder irgendwelche Einstellungen machen ?

Vielen Dank im Voraus
Bit-Devil


############################################################################################
Hier meine smb.conf:

[global]
workgroup = DOMAIN
domain logons = Yes
domain master = Yes
local master = Yes
netbios name = SMBserver
os level = 255
preferred master = Yes
security = user
server string = Linux Test Center
usershare max shares = 100
log file = /var/log/samba/%m.log
syslog = 3
passdb backend = ldapsam:ldap://master.domain.corp
ldap suffix = dc=domain,dc=corp
ldap admin dn = cn=master,dc=domain,dc=corp
ldap delete dn = no
[share]
comment = test share
path = /tmp
valid users = %U
writeable = yes
create mask = 0600
directory mask = 0700
############################################################################################
slapd.conf:
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/samba.schema
include /usr/local/etc/openldap/schema/collective.schema
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/duaconf.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/java.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/ppolicy.schema

referral ldap://master.domain.corp

pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args

access to *
by write
by read

database bdb
suffix dc=domain,dc=corp
rootdn cn=master,dc=domain,dc=corp
rootpw PassWort

directory /usr/local/var/openldap-data

index cn,sn,uid pres,eq,approx,sub
index objectclass pres,eq

index ou,mail,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub

index displayName pres,sub,eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub

loglevel 256
############################################################################################
 
Gucke mal in dein Samba log File wenn sich ein LDAP User einloggt.
/var/log/samba/
Notfalls probiers mit Webmin.
Mach mal security = server
 
Zuletzt bearbeitet:
Gucke mal in dein Samba log File wenn sich ein LDAP User einloggt.
Die Meldungen hat er bereits gepostet

Mach mal security = server
Was soll das bringen, ausser dass es am Ziel vorbei geht?

Ähnlich wie beim Parameter security = domain authentisiert bei security = server ein anderer SMB/CIFS-Server die Benutzer.

Ist ja echt lobenswert, dass du helfen willst, aber wenn man keine Ahnung hat, sollte man nicht um des Beitrags willen antworten. *find*

'security = user' ist jedenfalls absolut korrekt, da damit Samba gezwungen ist das passdb-Backend zu nutzen.

Die hier relevante Meldung dürfte sein:

Code:
User test1 in passdb, but getpwnam() fails!

Der User wird also im angegebenen passdb-Backend gefunden, aber sein Passwort nicht. Die Logs des LDAP-Servers könnten evtl. Aufschluss darüber geben, was hier falsch läuft. Evtl. ist kein Passwort-Eintrag im LDAP vorhanden, es wird das falsche Feld abgefragt o.ä.
 
Die Meldungen hat er bereits gepostet
Was soll das bringen, ausser dass es am Ziel vorbei geht?
Ist ja echt lobenswert, dass du helfen willst, aber wenn man keine Ahnung hat, sollte man nicht um des Beitrags willen antworten. *find*

'security = user' ist jedenfalls absolut korrekt, da damit Samba gezwungen ist das passdb-Backend zu nutzen.

Stimme dir voll zu auch wenn dein Beitrag ebenfalls nicht die richtige Antwort ist :-)

Die hier relevante Meldung dürfte sein:

Code:
User test1 in passdb, but getpwnam() fails!

Der User wird also im angegebenen passdb-Backend gefunden, aber sein Passwort nicht. Die Logs des LDAP-Servers könnten evtl. Aufschluss darüber geben, was hier falsch läuft. Evtl. ist kein Passwort-Eintrag im LDAP vorhanden, es wird das falsche Feld abgefragt o.ä.
Das ist zwar der Fehler, aber getpwnam hat nichts (i.d.R.) mit dem Kennwort zu tun, wenn du mal man getpwnam eingibst, dann sagt er dir, dass das dazu dient den Eintrag aus der /etc/passwd zu lesen, er meckert also darüber, dass der User nicht in der passwd zu finden ist. Wie du im ersten Post ricvhtig diagnostiziert hast, brauchst du einen lokalen User, Samba wüsste sonst auch gar nicht, mit was für Rechten er den Zugriff regeln soll. Alternativen sind nun entweder winbind (schlecht) oder nsswitch so einzurichten, dass es LDAP verwendet (bsp.: http://imaginator.com/~simon/ldap/ ) damit werden dann deine User ausm LDAP auch lokal sichtbar.
 
Das ist zwar der Fehler, aber getpwnam hat nichts (i.d.R.) mit dem Kennwort zu tun, wenn du mal man getpwnam eingibst, dann sagt er dir, dass das dazu dient den Eintrag aus der /etc/passwd zu lesen, er meckert also darüber, dass der User nicht in der passwd zu finden ist.

Ich code eindeutig zu wenig C in letzter Zeit. :(
 
Zuletzt bearbeitet:
es gibt nicht zuwenig c nur zuviel :-) ich code gar keins :-) Daher muss ich ja nachschauen ;)
 
Wenn ich nachschauen muss, kann der TE das auch und dann spar ich mir meine Antwort lieber. :D
 
nsswitch

Hallo Zusammen !

Die "getpwnam()" dient ja dazu um den Namen aus der "/etc/passwd" zu bekommen.
Da der Name aber in der "/etc/passwd" nicht existiert sondern nur im LDAP Server, kann
Samba gar nicht den richtigen User zuweisen. Dafür gibt es aber ein nettes
Progrämmchen das dieses Problem löst "nss_ldap" "http://www.padl.com/OSS/nss_ldap.html" .
In der Datei "/etc/nsswitch.conf" muss angegeben werden, das getpwnam() quasi nicht die Datei "/etc/passwd"
durchsucht, sondern den LDAP Server (PosixAccount).
Leider ist die Theorie immer ander als die Praxis. Es funktioniert natürlich nicht.
Wenn ich z.B. mit dem Befehl "getent passwd" überprüfen möchte ob der NSSwitch funktioniert,
kommt eine Fehlermeldung: "getent: nss_ldap: could not determine LDAP server from ldap.conf or DNS"
Aber in der ldap.conf ist der Server richtig angegeben.

Hat jemand eine Idee oder Lösung ?

Vielen Dank im Voraus
Bit-Devil

################################################################
Hier die "/etc/nsswitch.conf" Datei:

passwd: ldap
group: ldap
shadow: ldap

hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files dns

services: files db
protocols: files db
rpc: files db
ethers: files db
netmasks: files
netgroup: files nis
publickey: files

bootparams: files
automount: files nis
aliases: files

################################################################
Hier die "/etc/ldap.conf"

host localhost (mit dem "normaler Name" oder "127.0.0.1" oder "IP" oder "FQDN" funktionierts auch nicht)

uri ldap://localhost (mit "master" oder "127.0.0.1" oder "192.168.0.1" oder "master.domain.corp" funktionierts auch nicht)

base dc=domain,dc=corp

nss_base_passwd ou=People,dc=domain,dc=corp
nss_base_shadow ou=People,dc=domain,dc=corp
nss_base_group ou=Group,dc=domain,dc=corp
 
Probier mal einen / hinter dem Servernamen
 
ldap.conf

Leider ohne Erfolge. Die Fehlermeldung kommt trotz "uri ldap://localhost/".
 
Was hast du denn für eine Distribution?

Ich nutz SuSE 10.3 allerding sind die Programme Teile wie Samba, pam (inkl. nss_ldap und pam_ldap), Berkeley DB und LDAP selbst kompiliert worden bzw. installiert.

Kernel Version:
"Linux master 2.6.25.2-default #3 SMP Thu May 8 16:05:36 CEST 2008 i686 i686 i386 GNU/Linux"
 
Warum? Du solltest einmal prüfen, ob nss_ldap die ldap.conf evtl. woanders sucht, sollte bei den Sourcen oder im Configure Befehl stehen, Evtl. kopieren nach /etc/openldap
oder die Pakete der Distribution nehmen
 
Fehler gefunden

Tatsache, ich hatte beim kompilieren von nss_ldap den falschen Pfad "--with-ldap-conf-file=/usr/local/etc/openldap/ldap.conf" angegeben. Richtig wäre gewesen "--with-ldap-conf-file=/etc/ldap.conf". Naja so ein kleine Fehler kosten sehr viel Kraft/Nerven, Zigaretten und unmengen an Kaffee. Aber egal jetzt geht ja alles.
Also wenn jemand einen solchen Fehler wieder irgendwo sieht/hat/feststellt , weiß er ja wo er zuerst suchen muss.

Danke an alle die mir geholfen haben :D:D:D:D:):):):):)


Gruss
Bit-Devil
 

Ähnliche Themen

Samba 3.6.25 - OpenLDAP Setup

Dovecot: Geteilte Postfächer (Shared Mailboxes) funktionieren nicht

Samba 4.9.5-Debian - Kennwort von unix übernehmen

Samba-Server mit Univention Corporate Server

Samba 4 Schema erweitern per LDIF - Server is unwilling to perform (53)

Zurück
Oben