E-Mail Konfiguration · 11 min read · Jan 10, 2026
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 4.8 i386) - Seite 5
18 Installation von SquirrelMail
SquirrelMail ist eine Webmail-Oberfläche, die es Ihren Benutzern ermöglicht, E-Mails in einem Browser zu senden und zu empfangen. Dieses Kapitel zeigt, wie man es installiert und an unser Setup anpasst, damit Benutzer sogar ihr E-Mail-Konto-Passwort über die SquirrelMail-Oberfläche ändern können.
Um SquirrelMail zu installieren, führen wir aus:
yum install squirrelmail php-pear-DBAnschließend starten wir Apache neu:
/etc/init.d/httpd restartSquirrelMail wird mit einigen vorinstallierten Plugins geliefert, leider kann keines von ihnen uns ermöglichen, unser E-Mail-Passwort in unserer MySQL-Datenbank zu ändern. Aber es gibt das Change SQL Password-Plugin, das wir manuell installieren können:
cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz
tar xvfz change_sqlpass-3.3-1.2.tar.gz
cd change_sqlpass
cp config.php.sample config.phpJetzt müssen wir config.php bearbeiten und an unser Setup anpassen. Bitte passen Sie die Variablen $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static und $csp_delimiter wie folgt an und kommentieren Sie $csp_salt_query aus:
vi config.php| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] $csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] $csp_delimiter = '@'; [...] |
Die vollständige Datei sieht wie folgt aus:
| * 2002-2005 Paul Lesneiwski <[email protected]> * Dieses Programm ist unter GPL lizenziert. Siehe COPYING für Details * * @package plugins * @subpackage Change SQL Password * */ // Globale Variablen, fassen Sie diese nicht an, es sei denn, Sie möchten das Plugin brechen // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Theoretisch sollte jede von Pear unterstützte SQL-Datenbank hier unterstützt werden. // Der DSN (Data Source Name) muss die Informationen enthalten, // die benötigt werden, um sich mit Ihrem Datenbank-Backend zu verbinden. Ein MySQL-Beispiel ist unten enthalten. // Für weitere Details zur DSN-Syntax und zur Liste der unterstützten Datenbanktypen, // siehe: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Dieses Plugin wird immer das alte Passwort des Benutzers // gegen das Anmeldepasswort überprüfen, aber eine zusätzliche Überprüfung kann auch // gegen die Datenbank für mehr Sicherheit durchgeführt werden, wenn Sie // dies wünschen. Wenn Sie die zusätzliche Passwortüberprüfung nicht benötigen, // stellen Sie sicher, dass diese Einstellung leer ist. // // Dies ist eine Abfrage, die einen positiven Wert zurückgibt, wenn ein Benutzer // und Passwortpaar in der Datenbank gefunden wird. // // Diese Abfrage sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // Wert sollte idealerweise eine Eins oder eine Null sein, die einfach angibt, dass // das Benutzer-/Passwort-Paar tatsächlich in der Datenbank existiert. // // %1 in dieser Abfrage wird durch den vollständigen Benutzernamen ersetzt // (einschließlich Domain), wie z.B. "[email protected]" // %2 in dieser Abfrage wird durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie "example.com" // %4 in dieser Abfrage wird durch das aktuelle (alte) // Passwort in welchem Verschlüsselungsformat auch immer benötigt wird, gemäß den anderen // Plugin-Konfigurationseinstellungen ersetzt (Beachten Sie, dass die Syntax des // Passworts je nach Ihren Verschlüsselungsentscheidungen bereitgestellt wird, // sodass Sie niemals Anführungszeichen um diesen // Wert in der Abfrage hier bereitstellen müssen.) // %5 in dieser Abfrage wird durch das aktuelle (alte) // Passwort im unverschlüsselten Klartext ersetzt. Wenn Sie keine // Passwortverschlüsselung verwenden, sind %4 und %5 die gleichen Werte, // außer dass %4 Anführungszeichen um sich hat und %5 nicht. // //$lookup_password_query = ''; // SCHLECHTE SICHERHEIT: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Ein Array von SQL-Abfragen, die alle ausgeführt werden, // wann immer ein Passwortänderungsversuch unternommen wird. // // Es können beliebig viele Abfragen hier enthalten sein. // Die Abfragen werden in der hier angegebenen Reihenfolge ausgeführt. // // %1 in allen Abfragen wird durch den vollständigen Benutzernamen ersetzt // (einschließlich Domain), wie z.B. "[email protected]" // %2 in allen Abfragen wird durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie "jose" // %3 in allen Abfragen wird durch den Domainnamen ersetzt, // wie "example.com" // %4 in allen Abfragen wird durch das neue Passwort // in welchem Verschlüsselungsformat auch immer benötigt wird, gemäß den anderen // Plugin-Konfigurationseinstellungen ersetzt (Beachten Sie, dass die Syntax des // Passworts je nach Ihren // Verschlüsselungsentscheidungen bereitgestellt wird, sodass Sie niemals Anführungszeichen // um diesen Wert in den Abfragen hier bereitstellen müssen.) // %5 in allen Abfragen wird durch das neue Passwort // im unverschlüsselten Klartext ersetzt - VORSICHT! Wenn Sie keine // Passwortverschlüsselung verwenden, sind %4 und %5 die gleichen // Werte, außer dass %4 Anführungszeichen um sich hat // und %5 nicht. // // $password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"', // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Eine Abfrage, die nach einem Flag überprüft, das angibt, ob ein Benutzer // gezwungen werden sollte, sein Passwort zu ändern. Diese Abfrage // sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // Null ist, wenn der Benutzer sein Passwort NICHT ändern muss, // oder Eins, wenn der Benutzer gezwungen werden sollte, es jetzt zu ändern. // // Diese Einstellung sollte eine leere Zeichenfolge sein, wenn Sie diese Funktionalität // nicht aktivieren möchten. // // %1 in dieser Abfrage wird durch den vollständigen Benutzernamen ersetzt // (einschließlich Domain), wie z.B. "[email protected]" // %2 in dieser Abfrage wird durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // Welche Verschlüsselungsmethode verwenden Sie, um Passwörter // in Ihrer Datenbank zu speichern? Bitte verwenden Sie eine der folgenden, // genau so, wie Sie sie sehen: // // NONE Passwörter werden nur im Klartext gespeichert // MYSQLPWD Passwörter werden mit der MySQL password()-Funktion gespeichert // MYSQLENCRYPT Passwörter werden mit der MySQL encrypt()-Funktion gespeichert // PHPCRYPT Passwörter werden mit der PHP crypt()-Funktion gespeichert // MD5CRYPT Passwörter werden mit dem verschlüsselten MD5-Algorithmus gespeichert // MD5 Passwörter werden als MD5-Hash gespeichert // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Verschlüsselungstypen, die ein Salt benötigen, müssen wissen, wo sie // dieses Salt erhalten. Wenn Sie einen konstanten, bekannten Saltwert haben, // sollten Sie ihn in $csp_salt_static definieren. Andernfalls lassen Sie diesen // Wert leer und definieren Sie einen Wert für die $csp_salt_query. // // Lassen Sie beide Werte leer, wenn Sie keine (oder keine) Salze benötigen // um Ihre Passwörter zu verschlüsseln. // // Die Abfrage sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // der Saltwert für das Passwort des aktuellen Benutzers ist. Diese // Abfrage wird ignoriert, wenn $csp_salt_static etwas anderes als leer ist. // // %1 in dieser Abfrage wird durch den vollständigen Benutzernamen ersetzt // (einschließlich Domain), wie z.B. "[email protected]" // %2 in dieser Abfrage wird durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // verwenden Sie dieses Format mit MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // verwenden Sie dieses Format mit PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Sie können sicherstellen, dass SSL-Verschlüsselung während der Passwort // änderung verwendet wird, indem Sie dies auf den Port setzen, auf dem Ihr HTTPS bereitgestellt wird // (443 ist typisch). Setzen Sie auf Null, wenn Sie keine // HTTPS-Verbindung erzwingen möchten, wenn Benutzer ihre Passwörter ändern. // // Sie können diesen Wert für bestimmte Domains, Benutzer oder // Dienstebenen über das Virtual Host Login (vlogin)-Plugin // überschreiben, indem Sie einen Wert(e) für $vlogin_csp_secure_port in der vlogin // Konfiguration festlegen. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Wenn Sie Standard-HTTP-Webanfragen auf einem nicht-standardmäßigen // Port (alles andere als Port 80) bereitstellen, sollten Sie diese // Portnummer hier angeben. Andernfalls auf Null setzen. // // Sie können diesen Wert für bestimmte Domains, Benutzer oder // Dienstebenen über das Virtual Host Login (vlogin)-Plugin // überschreiben, indem Sie einen Wert(e) für $vlogin_csp_non_standard_http_port // in der vlogin-Konfiguration festlegen. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Sie können die minimale und maximale Passwortlänge festlegen, die // Sie akzeptieren, oder diese Einstellungen auf Null lassen, um anzuzeigen, dass // kein Limit angewendet werden sollte. // // Aktivieren Sie eine der anderen Einstellungen hier, um zu überprüfen, dass das // neue Passwort mindestens eine Ziffer, einen Großbuchstaben, // einen Kleinbuchstaben und/oder ein nicht-alphanumerisches Zeichen enthält. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // wenn Ihr System Benutzernamen mit etwas anderem als // einem "@"-Zeichen hat, das den Benutzer- und Domainanteil trennt, // geben Sie dieses Zeichen hier an // //$csp_delimiter = '|'; $csp_delimiter = '@'; // Debug-Modus // $csp_debug = 0; ?> |
Das Change SQL Password-Plugin hängt auch vom Compatibility-Plugin ab, das wir wie folgt installieren:
cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz
tar xvfz compatibility-2.0.14-1.0.tar.gzcd /usr/share/squirrelmail/plugins/compatibility
patch -p0 < patches/compatibility_patch-1.4.8.diffJetzt müssen wir in die SquirrelMail-Konfiguration gehen und SquirrelMail mitteilen, dass wir Courier als unseren POP3- und IMAP-Server verwenden und die Plugins Change SQL Password und Compatibility aktivieren:
/usr/share/squirrelmail/config/conf.plSie sehen das folgende Menü. Navigieren Sie durch es wie angegeben:
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Hauptmenü –
1. Organisationspräferenzen
2. Servereinstellungen
3. Ordnerstandards
4. Allgemeine Optionen
5. Themen
6. Adressbücher
7. Nachricht des Tages (MOTD)
8. Plugins
9. Datenbank
10. Sprachen
D. Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <–D
SquirrelMail Konfiguration : Lesen: config.php
Während wir SquirrelMail aufgebaut haben, haben wir einige Präferenzen entdeckt, die besser mit einigen Servern funktionieren, die nicht so gut mit anderen funktionieren. Wenn Sie Ihren IMAP-Server auswählen, wird diese Option einige vordefinierte Einstellungen für diesen Server festlegen.
Bitte beachten Sie, dass Sie trotzdem alles überprüfen müssen, um sicherzustellen, dass alles korrekt ist. Dies ändert nicht alles. Es gibt nur einige wenige Einstellungen, die dies ändern wird.
Bitte wählen Sie Ihren IMAP-Server:
bincimap = Binc IMAP-Server
courier = Courier IMAP-Server
cyrus = Cyrus IMAP-Server
dovecot = Dovecot Secure IMAP-Server
exchange = Microsoft Exchange IMAP-Server
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = IMAP-Server der Universität von Washington
quit = Nichts ändern
Befehl >> <– courier
SquirrelMail Konfiguration : Lesen: config.php
Während wir SquirrelMail aufgebaut haben, haben wir einige Präferenzen entdeckt, die besser mit einigen Servern funktionieren, die nicht so gut mit anderen funktionieren. Wenn Sie Ihren IMAP-Server auswählen, wird diese Option einige vordefinierte Einstellungen für diesen Server festlegen.
Bitte beachten Sie, dass Sie trotzdem alles überprüfen müssen, um sicherzustellen, dass alles korrekt ist. Dies ändert nicht alles. Es gibt nur einige wenige Einstellungen, die dies ändern wird.
Bitte wählen Sie Ihren IMAP-Server:
bincimap = Binc IMAP-Server
courier = Courier IMAP-Server
cyrus = Cyrus IMAP-Server
dovecot = Dovecot Secure IMAP-Server
exchange = Microsoft Exchange IMAP-Server
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = IMAP-Server der Universität von Washington
quit = Nichts ändern
Befehl >> courier
imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Papierkorb
sent_folder = Gesendet
draft_folder = Entwürfe
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true
Drücken Sie eine Taste, um fortzufahren… <– drücken Sie eine Taste
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Hauptmenü –
1. Organisationspräferenzen
2. Servereinstellungen
3. Ordnerstandards
4. Allgemeine Optionen
5. Themen
6. Adressbücher
7. Nachricht des Tages (MOTD)
8. Plugins
9. Datenbank
10. Sprachen
D. Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <– 8
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. delete_move_next
2. squirrelspell
3. newmail
Verfügbare Plugins:
4. message_details
5. fortune
6. compatibility
7. filters
8. info
9. administrator
10. spamcop
11. change_sqlpass
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate
R Zurück zum Hauptmenü
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <– 6 (oder welche Nummer das Compatibility-Plugin hat)
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
Verfügbare Plugins:
5. message_details
6. fortune
7. filters
8. info
9. administrator
10. spamcop
11. change_sqlpass
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate
R Zurück zum Hauptmenü
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <– 11 (oder welche Nummer das change_sqlpass-Plugin hat)
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass
Verfügbare Plugins:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate
R Zurück zum Hauptmenü
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <–S
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass
Verfügbare Plugins:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate
R Zurück zum Hauptmenü
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> S
Daten in config.php gespeichert
Drücken Sie Enter, um fortzufahren… <– ENTER
SquirrelMail Konfiguration : Lesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass
Verfügbare Plugins:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate
R Zurück zum Hauptmenü
C Farbe ausschalten
S Daten speichern
Q Beenden
Befehl >> <– Q
Eine letzte Sache, die wir tun müssen, ist die Datei /etc/squirrelmail/config_local.php zu ändern und die Variable $default_folder_prefix auszukommentieren - wenn Sie dies nicht tun, sehen Sie die folgende Fehlermeldung in SquirrelMail, nachdem Sie sich angemeldet haben: Abfrage: CREATE “Sent” Grund: Ungültiger Mailbox-Name.
vi /etc/squirrelmail/config_local.php| |
Jetzt können Sie http://server1.example.com/webmail oder http://192.168.0.100/webmail in Ihrem Browser eingeben, um auf SquirrelMail zuzugreifen.
Melden Sie sich mit Ihrer E-Mail-Adresse (z.B. [email protected]) und Ihrem Passwort an:

Sie sollten die Willkommens-E-Mail in Ihrem Posteingang finden:


Um Ihr Passwort zu ändern, gehen Sie zu Optionen und wählen Sie dann Passwort ändern:

Geben Sie Ihr aktuelles Passwort und dann Ihr neues Passwort zweimal ein:

SquirrelMail wird Ihnen mitteilen, ob das Passwort erfolgreich geändert wurde:

19 Referenzen
Tutorial: ISP-ähnlicher E-Mail-Dienst mit Debian-Sarge und Postfix 2.1: http://workaround.org/articles/ispmail-sarge/
Postfix + Quota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
Mail-Passwörter, die mit saslauthd verschlüsselt sind: http://www.syscp.de/docs/public/contrib/cryptedmailpws
20 Links
- Postfix MTA: http://www.postfix.org/
- Postfix Quota Patch: http://web.onda.com.br/nadal/
- phpMyAdmin: http://www.phpmyadmin.net/
- SquirrelMail: http://www.squirrelmail.org/
- CentOS: http://www.centos.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.