E-Mail Konfiguration · 10 min read · Sep 28, 2025
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Lenny) - Seite 5
15 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, sodass Benutzer sogar ihr E-Mail-Konto-Passwort über die SquirrelMail-Oberfläche ändern können.
Um SquirrelMail zu installieren, führen wir aus:
apt-get install squirrelmail php-pearAls nächstes kopieren wir die Apache-Konfiguration, die mit dem SquirrelMail-Paket geliefert wird, in das Verzeichnis /etc/apache2/conf.d und starten Apache neu:
cp /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
/etc/init.d/apache2 restartSquirrelMail wird mit einigen vorinstallierten Plugins geliefert, leider ist keines von ihnen in der Lage, uns zu erlauben, unser E-Mail-Passwort in unserer MySQL-Datenbank zu ändern. Aber es gibt das Change SQL Password-Plugin, das wir manuell installieren können:
Das Plugin hängt vom Pear-DB-Paket ab, also installieren wir es:
pear install DBDann installieren wir das Change SQL Password-Plugin selbst:
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 (bitte stellen Sie sicher, dass Sie beim Bearbeiten der Datei keine Syntaxfehler machen - wenn Sie dies tun, erhalten Sie nach dem SquirrelMail-Login eine leere Seite!):
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, berühren Sie diese nicht, 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 // mit ihrem 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 werden. // // 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-/Passwortpaar 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 z.B. "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie z.B. "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 NIE // 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. // // Hier können beliebig viele Abfragen enthalten sein. // Die Abfragen werden in der 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 z.B. "jose" // %3 in allen Abfragen wird durch den Domainnamen ersetzt, // wie z.B. "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 NIE 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 prü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 z.B. "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie z.B. "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 // zur Verschlüsselung Ihrer Passwörter. // // 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 z.B. "jose" // %3 in dieser Abfrage wird durch den Domainnamen ersetzt, // wie z.B. "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 des Passworts // Wechsels verwendet wird, indem Sie dies auf den Port setzen, auf dem Ihr HTTPS bereitgestellt wird // (443 ist typisch). Setzen Sie es 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 außer 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 minimalen und maximalen Passwortlängen 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.gzJetzt 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/sbin/squirrelmail-configureSie sehen das folgende Menü. Navigieren Sie durch es, wie angegeben:
SquirrelMail Konfiguration : Gelesen: 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 einschalten
S Daten speichern
Q Beenden
Befehl >> <– D
SquirrelMail Konfiguration : Gelesen: config.php
Während wir SquirrelMail aufgebaut haben, haben wir einige Präferenzen entdeckt, die mit einigen Servern besser funktionieren, die mit anderen nicht so gut 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 : Gelesen: config.php
Während wir SquirrelMail aufgebaut haben, haben wir einige Präferenzen entdeckt, die mit einigen Servern besser funktionieren, die mit anderen nicht so gut 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 : Gelesen: 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 einschalten
S Daten speichern
Q Beenden
Befehl >> <– 8
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)
Plugins
Installierte Plugins
Verfügbare Plugins:
1. abook_take
2. administrator
3. bug_report
4. calendar
5. change_sqlpass
6. compatibility
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Zurück zum Hauptmenü
C Farbe einschalten
S Daten speichern
Q Beenden
Befehl >> <– 6 (oder welche Nummer das Kompatibilitätsplugin hat - es wird für das change_sqlpass Plugin benötigt)
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. compatibility
Verfügbare Plugins:
2. abook_take
3. administrator
4. bug_report
5. calendar
6. change_sqlpass
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Zurück zum Hauptmenü
C Farbe einschalten
S Daten speichern
Q Beenden
Befehl >> <– 6 (die Nummer des change_sqlpass Plugins)
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. compatibility
2. change_sqlpass
Verfügbare Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Zurück zum Hauptmenü
C Farbe einschalten
S Daten speichern
Q Beenden
Befehl >> <– S
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. compatibility
2. change_sqlpass
Verfügbare Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Zurück zum Hauptmenü
C Farbe einschalten
S Daten speichern
Q Beenden
Befehl >> S
Daten in config.php gespeichert
Drücken Sie Enter, um fortzufahren… <– ENTER
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)
Plugins
Installierte Plugins
1. compatibility
2. change_sqlpass
Verfügbare Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Zurück zum Hauptmenü
C Farbe einschalten
S Daten speichern
Q Beenden
Befehl >> <– Q
Jetzt können Sie http://server1.example.com/squirrelmail oder http://192.168.0.100/squirrelmail 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 ein und dann Ihr neues Passwort zweimal:

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

16 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
17 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/
- Debian: http://www.debian.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.