[postfix-users] LDAP Lookup
Hallo Liste,
Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen. Die Abfrage postmap -q "ricky@gesotec.local" ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis "ricky".
Die Mails für ricky können dann anschließend aber nicht ins Maildir eingeliefert werden. Folgende Fehlermeldung aus dem Log:
Jun 27 10:01:09 gdasvr55 postfix/smtp[24174]: A216413F03AC: to=ricky@gesotec.local, relay=127.0.0.1[127.0.0.1]:10024, delay=0.16, delays=0.04/0/0/0.12, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as BB56913F03CF) Jun 27 10:01:09 gdasvr55 postfix/qmgr[23838]: A216413F03AC: removed Jun 27 10:01:09 gdasvr55 postfix/local[24183]: BB56913F03CF: to=ricky@gesotec.local, relay=local, delay=0.06, delays=0.02/0/0/0.04, dsn=4.3.0, status=deferred (temporary failure. Command output: Fatal: Couldn't lookup our username (uid=30001) )
Allerdings steht weiter oben im Log Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_connect: Cached connection handle for LDAP source /etc/postfix/ldap/local_recipients.cf Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_lookup: /etc/postfix/ldap/local_recipients.cf: Searching with filter (mail=ricky@gesotec.local) Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_get_values[1]: Search found 1 match(es) Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_get_values[1]: search returned 1 value(s) for requested result attribute uid Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_get_values[1]: Leaving dict_ldap_get_values Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: dict_ldap_lookup: Search returned ricky Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: maps_find: local_recipient_maps: ldap:/etc/postfix/ldap/local_recipients.cf(0,lock|fold_fix): ricky@gesotec.local = ricky Jun 27 10:01:09 gdasvr55 postfix/smtpd[24224]: mail_addr_find: ricky@gesotec.local -> ricky
Die UserID 30001 gehört zu ricky.
Ausgabe postconf -n alias_maps = hash:/etc/aliases biff = no config_directory = /etc/postfix debug_peer_level = 1 defer_transports = disable_dns_lookups = no fallback_transport = home_mailbox = Mail/ inet_interfaces = all local_recipient_maps = ldap:/etc/postfix/ldap/local_recipients.cf mailbox_command = /usr/lib/dovecot/deliver mailbox_size_limit = 512000000 masquerade_classes = envelope_sender, header_sender, header_recipient masquerade_domains = message_size_limit = 254800000 mydestination = $myhostname, $mydomain gdasvr04.gesotec.local, gdasvr55, gdasvr55.local , localhost, localhost.$mydomain mydomain = gesotec.local myhostname = gdasvr55.gesotec.local mynetworks = 127.0.0.0/8 192.168.1.0/24 myorigin = /etc/mailname qmgr_message_active_limit = 254800000 qmgr_message_recipient_limit = 254800000 recipient_delimiter = + relayhost = [mail.arcor.de]:25 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd smtp_sasl_security_options = noanonymous smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache smtpd_banner = $myhostname ESMTP $mail_name smtpd_helo_required = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_non_fqn_recipient, reject_unknown_sender_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, reject_unverified_sender smtpd_restriction_classes = pruefe_ob_absender_existiert smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache smtpd_use_tls = yes strict_rfc821_envelopes = yes
Vielen Dank
Steffen
Hallo Steffen,
* Steffen Krick Steffen.Krick@gmx.de wrote:
Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen. Die Abfrage postmap -q "ricky@gesotec.local" ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis "ricky".
Die Mails für ricky können dann anschließend aber nicht ins Maildir eingeliefert werden. Folgende Fehlermeldung aus dem Log:
[...]
Die UserID 30001 gehört zu ricky.
anscheinend kennt PAM den User mit der ID 30001 nicht. Wenn Du mit getent passwd nach ricky oder 30001 suchst, findet er da das Home-DIrecotry des Users?
Ciao Stefan
Hallo Stefan,
Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen. Die Abfrage postmap -q "ricky@gesotec.local" ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis "ricky".
Die Mails für ricky können dann anschließend aber nicht ins Maildir eingeliefert werden. Folgende Fehlermeldung aus dem Log: [...]
Die UserID 30001 gehört zu ricky.
anscheinend kennt PAM den User mit der ID 30001 nicht. Wenn Du mit getent passwd nach ricky oder 30001 suchst, findet er da das Home-DIrecotry des Users?
gentent liefert folgendes.
skr@gdasvr55:~$ getent passwd ricky ricky:x:30001:513:Richard M,,,,:/home/ricky:/bin/bash
Grüße Steffen
* Steffen Krick Steffen.Krick@gmx.de wrote:
Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen. Die Abfrage postmap -q "ricky@gesotec.local" ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis "ricky".
Die Mails für ricky können dann anschließend aber nicht ins Maildir eingeliefert werden. Folgende Fehlermeldung aus dem Log: [...]
Die UserID 30001 gehört zu ricky.
anscheinend kennt PAM den User mit der ID 30001 nicht. Wenn Du mit getent passwd nach ricky oder 30001 suchst, findet er da das Home-DIrecotry des Users?
gentent liefert folgendes.
skr@gdasvr55:~$ getent passwd ricky ricky:x:30001:513:Richard M,,,,:/home/ricky:/bin/bash
Somit halten wir als wichtigstes Ergebnis dieses sonnigen Freitagmorgens einmal fest: Ich bin ein Trottel.
Danach kann ich Dir dann sagen, daß die Meldung von dovecot, genauer dem deliver-Programm stammt. Dieses wird mit der UID 30001 gestartet und führt folgenden Code aus:
,---- | process_euid = geteuid(); | if (destination != NULL) | user = destination; | else if (process_euid != 0) { | /* we're non-root. get our username and possibly our home. */ | struct passwd *pw; | | pw = getpwuid(process_euid); | if (pw != NULL) { | user = t_strdup(pw->pw_name); | if (getenv("HOME") == NULL) | env_put(t_strconcat("HOME=", pw->pw_dir, NULL)); | } else if (user == NULL) { | i_fatal_status(EX_USAGE, | "Couldn't lookup our username (uid=%s)", | dec2str(process_euid)); | } | } else { | i_fatal_status(EX_USAGE, | "destination user parameter (-d user) not given"); | } `----
Als zweites Ergebnis nehmen wir also mit, daß die 30001 korrekt beim Aufrunf von geteuid(2) zurückgegeben wird, der Aufruf von getpwuid(2) für die 30001 liefert jedoch keinen Usernamen zurück (bzw. aus der pw-strcut lässt sich selbiger nicht extrahieren). Das heißt, daß eigentlich auch ein "getent passwd 30001" kein Ergebnis liefern dürfte. Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in PAM hast.
Ciao Stefan
* Stefan Förster cite+de-postfix-users@incertum.net wrote:
Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in PAM hast.
Schnelles follow-up auf mich selbst: Oder dovecot kommt ohne "-d" irgendwie nicht klar. Kann auch sein. In dem Fall setzst Du mailbox_command am besten mal auf /usr/lib/dovecot/deliver -d "$USER", siehe die Beispiele unter man 5 postconf | less +/^mailbox_command.
Ciao Stefan
Hallo,
Stefan Förster schrieb:
Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in PAM hast.
Ok, hast du einen Tipp wo ich das suchen müsste?
Schnelles follow-up auf mich selbst: Oder dovecot kommt ohne "-d" irgendwie nicht klar. Kann auch sein. In dem Fall setzst Du mailbox_command am besten mal auf /usr/lib/dovecot/deliver -d "$USER", siehe die Beispiele unter man 5 postconf | less +/^mailbox_command.
Seitdem ich mailbox_command auf /usr/lib/dovecot/deliver -d "$USER" umgestellt habe, kommt die folgende Meldung im Log:
Jun 28 14:03:36 gdasvr postfix/local[23129]: 29B7413F044C: to=ricky@gesotec.local, relay=local, delay=81772, delays=81772/0.19/0/0.01, dsn=4.3.0, status=deferred (temporary failure)
Die Authentifizierung mit LDAP gegenüber Dovecot funktioniert allerdings.
Schönes Wochenende
Steffen
* Steffen Krick postfix-users@de.postfix.org:
Hallo,
Stefan Förster schrieb:
Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in PAM hast.
Ok, hast du einen Tipp wo ich das suchen müsste?
Schnelles follow-up auf mich selbst: Oder dovecot kommt ohne "-d" irgendwie nicht klar. Kann auch sein. In dem Fall setzst Du mailbox_command am besten mal auf /usr/lib/dovecot/deliver -d "$USER", siehe die Beispiele unter man 5 postconf | less +/^mailbox_command.
Seitdem ich mailbox_command auf /usr/lib/dovecot/deliver -d "$USER" umgestellt habe, kommt die folgende Meldung im Log:
Jun 28 14:03:36 gdasvr postfix/local[23129]: 29B7413F044C: to=ricky@gesotec.local, relay=local, delay=81772, delays=81772/0.19/0/0.01, dsn=4.3.0, status=deferred (temporary failure)
Die Authentifizierung mit LDAP gegenüber Dovecot funktioniert allerdings.
Ich habe für dovecot folgenden Eintrag:
dovecot unix - n n - - pipe flags=ODRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
HTH,
p@rick
Schönes Wochenende
Steffen _______________________________________________ postfix-users mailing list postfix-users@de.postfix.org http://de.postfix.org/cgi-bin/mailman/listinfo/postfix-users
Am 28.06.2008 um 21:10 schrieb Patrick Ben Koetter:
- Steffen Krick postfix-users@de.postfix.org:
Hallo,
Stefan Förster schrieb:
Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP- Integration in PAM hast.
Ok, hast du einen Tipp wo ich das suchen müsste?
Schnelles follow-up auf mich selbst: Oder dovecot kommt ohne "-d" irgendwie nicht klar. Kann auch sein. In dem Fall setzst Du mailbox_command am besten mal auf /usr/lib/dovecot/deliver -d "$USER", siehe die Beispiele unter man 5 postconf | less +/^mailbox_command.
Seitdem ich mailbox_command auf /usr/lib/dovecot/deliver -d "$USER" umgestellt habe, kommt die folgende Meldung im Log:
Jun 28 14:03:36 gdasvr postfix/local[23129]: 29B7413F044C: to=ricky@gesotec.local, relay=local, delay=81772, delays=81772/0.19/0/0.01, dsn=4.3.0, status=deferred (temporary failure)
Die Authentifizierung mit LDAP gegenüber Dovecot funktioniert allerdings.
Ich habe für dovecot folgenden Eintrag:
dovecot unix - n n - - pipe flags=ODRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -f $ {sender} -d ${recipient}
Was dem OP zar helfen würde, aber nur, wenn er von mailbox_command weg- und zu local_transport=dovecot hin-migriert ;-)
Cheeeeeeeerio Stefan
Am 28.06.2008 um 14:59 schrieb Steffen Krick:
Hallo,
Stefan Förster schrieb:
Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP- Integration in PAM hast.
Ok, hast du einen Tipp wo ich das suchen müsste?
Ich hab genau 0,0 Ahnung von PAM & LDAP - also von der Kombination der beiden nicht. Hast Du den Filter-Ausdruck in der Konfiguration von PAM vielleicht verbummelt? Tut "getent 30001" denn auch als nicht-root? Welche Queries kommen beim slapd an?
Schnelles follow-up auf mich selbst: Oder dovecot kommt ohne "-d" irgendwie nicht klar. Kann auch sein. In dem Fall setzst Du mailbox_command am besten mal auf /usr/lib/dovecot/deliver -d "$USER", siehe die Beispiele unter man 5 postconf | less +/^mailbox_command.
Seitdem ich mailbox_command auf /usr/lib/dovecot/deliver -d "$USER" umgestellt habe, kommt die folgende Meldung im Log:
Jun 28 14:03:36 gdasvr postfix/local[23129]: 29B7413F044C: to=ricky@gesotec.local, relay=local, delay=81772, delays=81772/0.19/0/0.01, dsn=4.3.0, status=deferred (temporary failure)
Ich glaub, Dir ist selber klar, daß wir mit der Meldung nichts anfangen können, oder? Aber in der Konfiguation von dovecot (und damit auch deliver) gibt es mannigfaltige Möglichkeiten, die beiden in separate Logfiles schreiben zu lassen.
Die Authentifizierung mit LDAP gegenüber Dovecot funktioniert allerdings.
Ist ja auch der einfache weg. Ich würde ja, wenn ich Du wäre und wenn Du keine Logmeldungen aus deliver erpressen kannst und auch die Analyse der LDAP-Queries nichts bringt, einfach mal Patricks Vorschlag ausprobieren und dovecot als lokalen Transport einrichten.
Aber wie gesagt, ich bin immer noch der Meinung, daß Du ein LDAP/PAM- Problem hast.
Luftige Grüße Stefan
- Steffen Krick Steffen.Krick@gmx.de wrote:
Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen. Die Abfrage postmap -q "ricky@gesotec.local" ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis "ricky".
Die Mails für ricky können dann anschließend aber nicht ins Maildir eingeliefert werden. Folgende Fehlermeldung aus dem Log: [...]
Die UserID 30001 gehört zu ricky.
anscheinend kennt PAM den User mit der ID 30001 nicht. Wenn Du mit getent passwd nach ricky oder 30001 suchst, findet er da das Home-DIrecotry des Users?
gentent liefert folgendes.
skr@gdasvr55:~$ getent passwd ricky ricky:x:30001:513:Richard M,,,,:/home/ricky:/bin/bash
Somit halten wir als wichtigstes Ergebnis dieses sonnigen Freitagmorgens einmal fest: Ich bin ein Trottel.
Danach kann ich Dir dann sagen, daß die Meldung von dovecot, genauer dem deliver-Programm stammt. Dieses wird mit der UID 30001 gestartet und führt folgenden Code aus:
,---- | process_euid = geteuid(); | if (destination != NULL) | user = destination; | else if (process_euid != 0) { | /* we're non-root. get our username and possibly our home. */ | struct passwd *pw; | | pw = getpwuid(process_euid); | if (pw != NULL) { | user = t_strdup(pw->pw_name); | if (getenv("HOME") == NULL) | env_put(t_strconcat("HOME=", pw->pw_dir, NULL)); | } else if (user == NULL) { | i_fatal_status(EX_USAGE, | "Couldn't lookup our username (uid=%s)", | dec2str(process_euid)); | } | } else { | i_fatal_status(EX_USAGE, | "destination user parameter (-d user) not given"); | } `----
Als zweites Ergebnis nehmen wir also mit, daß die 30001 korrekt beim Aufrunf von geteuid(2) zurückgegeben wird, der Aufruf von getpwuid(2) für die 30001 liefert jedoch keinen Usernamen zurück (bzw. aus der pw-strcut lässt sich selbiger nicht extrahieren). Das heißt, daß eigentlich auch ein "getent passwd 30001" kein Ergebnis liefern dürfte. Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in PAM hast.
Der OP sollte mal den getent Befehl unter seinem Account, nicht als root ausführen. Evtl ein Berechtigungs Problem. Oder local steckt in nem chroot() siehe master.cf.
-- Andreas
participants (5)
-
Andreas Winkelmann
-
Patrick Ben Koetter
-
Stefan Förster
-
Steffen Krick
-
Steffen Krick