Postfix: keine Verbindung zum MySQL Socket

Mr.AndersoN

Member
Hallo,

ich halte mich möglichst kurz:

System:
- VServer
- Debian 3.1 (Sarge)
- MySQL 5
- Postfix 2.1.5

Nachdem ich den Mailserver eingerichtet habe und diese Konfiguration bisweilen über Systembenutzer einwandfrei läuft, möchte ich nun auf eine virtuelle Verwaltung mit Hilfe von MySQL umsatteln.

Habe dazu einige Tutorials bereits studiert:
de:howtos:sarge:postfix2_antispam_virenschutz [Debianhowto.de]
Virtueller E-Mail Server unter Debian Etch mit Postfix [Freakempire Wiki]
Virtual Users and Domains with Courier-IMAP and MySQL - postfix

Letztendlich habe ich eine Postfixadmin freundliche Tabellenstruktur gewählt.
Kurz, was alles gemacht wurde:
  • /etc/postfix/sasl/smtpd.conf entsprechend angepasst
  • /etc/postfix/main.cf entsprechend angepasst
  • MySQL-Maps erstellt
  • /etc/courier/authdaemonrc angepasst (authmodulelist="authmysql")
  • /etc/courier/authmysqlrc erstellt und mit entsprechendem Inhalt versehen

Postfix läuft nach der master.cf nicht chrooted:
Code:
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd

Das Problem:
Noch vor der Mapsauflösung scheitert mein Versuch daran, dass Postfix keine Verbindung zum MySQL Socket herstellen kann.

Der Socket liegt bei mir in
/var/run/mysqld/mysqld.sock
Der Socket, sowie alle ihm übergeordneten Ordner erlauben jedem Benutzer Lese- und Ausführungsrechte.
Der Socket ist auch der richtige, laut netstat:
Code:
# netstat -a | grep mysql
unix  2      [ ACC ]     STREAM     HÖRT         30561658 /var/run/mysqld/mysqld.sock

Getestet hatte ich mit:
Code:
# telnet localhost 25
Trying 127.0.0.1...
Connected to <hostname>.
Escape character is '^]'.
220 <domain> ESMTP Postfix (Debian/GNU)
ehlo tach
250-klausinge.de
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
mail from:test@<domain>

Danach passiert nichts mehr und im Log steht folgendes:
Code:
Aug 16 23:03:56 <host> postfix/trivial-rewrite[32523]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Alle weiteren Meldungen im Log gehen aus diesem Problem hervor (maps können nicht aufgelöst werden)

Im Anhang findet ihr noch die wichtigsten Konfigurationsdateien bzw. Auszüge aus diesen.

Ich hoffe mir kann jemand weiter helfen :)
 

Attachments

Last edited by a moderator:
Ja, natürlich.
Danke für den Hinweis.

Leider bringt das auch keinen Erfolg.
Wäre mein einzigster Ansatz gewesen, dass Postfix auf Grund des chroots nicht auf den Socket zugreifen kann.
Hab es in:
Code:
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
geändert.
Dennoch kann Postfix nicht über den Socket verbinden :(
 
Postfix hast du danach neugestartet? Hänge zwei- bis dreimal "-v" hinter "smtpd" in deiner master.cf und schau deine Logs danach durch.
 
Verbose Loggin hab ich eingestellt - zwei mal das v angehangen.
Der Log spuckt mir trotzdem nichts relevantes zum MySQL Socket Problem aus.

Postix hatte ich nach allen Änderungen in der master.cf mit "restart" richtig neugestartet.

Hatte noch vergessen die Version meines Postfix anzugeben: 2.1.5
 
Wenn der Fehler immer noch
Code:
'..../var/run/mysqld/mysqld.sock' (2)
ist, scheint Postfix noch im chroot zu laufen, denn der Fehlercode (2) bedeutet eindeutig "No such file or directory" (s. /usr/include/asm-generic/errno-base.h).

Ziemlich merkwürdig...

Notfalls kannst Du ja nicht über den File-Socket gehen, sondern über einen IP-Socket. In /etc/my.cnf, Abschnitt [mysqld] noch
Code:
bind-address    = 127.0.0.1
hinzufügen. In der mysql_virtual_alias_maps.cf (und auch den anderen maps, die Du in der Datenbank hast, sollte dann
Code:
hosts = 127.0.0.1
stehen.

LinuxAdmin
 
Wollt möglichst über den schnelleren Socket gehen und behalt mir deine Lösung vor, LinuxAdmin - danke dafür!

Gibt es evtl. eine Möglichkeit herauszufinden, ob Postfix noch chrooted läuft?
 
Gibt es evtl. eine Möglichkeit herauszufinden, ob Postfix noch chrooted läuft?

Als erstes mit den 4 Zeilen ein kleines Script erstellen:
Code:
echo '#!/bin/sh' > /tmp/lookuproot
echo 'ls -l /proc/$1/root' >> /tmp/lookuproot
echo '#' >> /tmp/lookuproot
chmod +x /tmp/lookuproot
und testen:
Code:
# /tmp/lookuproot $$
lrwxrwxrwx    1 root  users           0 2007-08-17 14:12 /proc/32601/root -> /
(die Variable $$ enthält die Prozess-ID der aktuellen shell).

Danach kannst Du das Ganze auf alle betroffenen Postfix-Prozesse anwenden. Dazu zunächst wieder mit telnet eine Verbindung auf Deinen SMTP-Port herstellen (genau wie im ersten Posting) und dann in einem anderen Fenster folgendes starten:
Code:
ps -ef | grep postfix | awk '{print $2}' | xargs -n 1 /tmp/lookuproot
(unter der Annahme, dass Postfix unter der UserID postfix läuft, ansonsten eben entsprechend anpassen)
Das sollte Dir die /-Verzeichnisse aller Postfix-Prozesse verraten.

LinuxAdmin
 
Danke!
Lasse Postfix aber nun doch über IP/TCP verbinden, ehe ich mir noch mehr Stress mache.

Evtl. nützlich zu wissen ist folgendes:
E-Mails wurden nun ordentlich versendet und in das Maildir weitergeleitet.
Nun wollte ich natürlich die Mails abrufen - aber Pustekuchen: LOGIN FAILED in den Logs.
Nach viel Googlen habe ich letztendlich die Lösung gefunden:

in der /etc/courier/authdaemonrc
Folgendes suchen:
Code:
##NAME: version:0
#
# When you have multiple versions of authdaemond.* installed, authdaemond
# just picks the first one it finds.  Set "version" to override that.
# For example:  version=authdaemond.plain

version=""
und ändern in:
Code:
##NAME: version:0
#
# When you have multiple versions of authdaemond.* installed, authdaemond
# just picks the first one it finds.  Set "version" to override that.
# For example:  version=authdaemond.plain

version="authdaemond.mysql"

Quelle dafür ist folgendes:
[Postfixbuch-users] Courier/MySql Anbindung klappt nicht

Nun klappt auch endlich der Mailserver mit MySQL-Anbindung!
Ich danke!
 
Alternativ wäre es auch möglich gewesen, den Dienst, der sich beschwert (trivial-rewrite) aus der chroot-Umgebung zu holen...
 
Nunja, hab es jetzt über IP/TCP am laufen.

Eine Frage hätte ich noch:
Wie habt ihr die SMTP Auth realisiert?
Es gibt, meines Wissens nach, nur zwei Möglichkeiten:
Über einen Systembenutzer und saslauthd
oder
über die MySQL Datenbank, wobei aber ein Patch installiert werden muss.

Was meint ihr?
Reicht es sicherheitstechnisch einen Systembenutzer anzulegen, der für die SMTP Authentifizierung zuständig ist und dessen Daten ich meinen "Untermietern" zur Authentifizierung mitteile?
 
Back
Top