Installation SquirrelMail · 14 min read · Nov 26, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Fedora 13 x86_64) - Page 6
18 Installation de SquirrelMail
SquirrelMail est une interface de webmail qui permettra à vos utilisateurs d’envoyer et de recevoir des e-mails dans un navigateur. Ce chapitre montre comment l’installer et l’ajuster à notre configuration afin que les utilisateurs puissent même changer leur mot de passe de compte e-mail depuis l’interface SquirrelMail.
Pour installer SquirrelMail, nous exécutons :
yum install squirrelmail php-pear-DBEnsuite, nous redémarrons Apache :
/etc/init.d/httpd restartSquirrelMail est livré avec quelques plugins pré-installés, malheureusement aucun d’eux n’est capable de nous permettre de changer notre mot de passe e-mail dans notre base de données MySQL. Mais il existe le plugin Change SQL Password que nous pouvons installer manuellement :
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.phpMaintenant, nous devons éditer config.php et l’ajuster à notre configuration. Veuillez ajuster les variables $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static et $csp_delimiter comme suit et commenter $csp_salt_query :
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 = '@'; [...] |
Le fichier complet ressemble à ceci :
| * 2002-2005 Paul Lesneiwski <[email protected]> * Ce programme est sous licence GPL. Voir COPYING pour les détails * * @package plugins * @subpackage Change SQL Password * */ // Variables globales, ne touchez pas à celles-ci à moins que vous ne vouliez casser le plugin // 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 // // Théoriquement, toute base de données SQL prise en charge par Pear devrait être prise en charge // ici. Le DSN (nom de la source de données) doit contenir les informations nécessaires // pour se connecter à votre backend de base de données. Un exemple MySQL est inclus ci-dessous. // Pour plus de détails sur la syntaxe DSN et la liste des types de bases de données pris en charge, // veuillez consulter : // 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 // // Ce plugin vérifiera toujours l'ancien mot de passe de l'utilisateur // par rapport à leur mot de passe de connexion, mais une vérification supplémentaire peut également // être effectuée contre la base de données pour plus de sécurité si vous // le souhaitez. Si vous n'avez pas besoin de la vérification de mot de passe supplémentaire, // assurez-vous que ce paramètre est vide. // // Il s'agit d'une requête qui renvoie une valeur positive si un utilisateur // et un mot de passe sont trouvés dans la base de données. // // Cette requête doit renvoyer une valeur (une ligne, une colonne), la // valeur étant idéalement un ou un zéro, indiquant simplement que // la paire utilisateur/mot de passe existe effectivement dans la base de données. // // %1 dans cette requête sera remplacé par le nom d'utilisateur complet // (y compris le domaine), tel que "[email protected]" // %2 dans cette requête sera remplacé par le nom d'utilisateur (sans // aucune portion de domaine), tel que "jose" // %3 dans cette requête sera remplacé par le nom de domaine, // tel que "example.com" // %4 dans cette requête sera remplacé par le mot de passe actuel (ancien) // dans le format de cryptage nécessaire selon les autres // paramètres de configuration du plugin (Notez que la syntaxe du // mot de passe sera fournie en fonction de vos choix de cryptage, // donc vous N'AVEZ JAMAIS besoin de fournir des guillemets autour de cette // valeur dans la requête ici.) // %5 dans cette requête sera remplacé par le mot de passe actuel (ancien) // en texte clair non crypté. Si vous n'utilisez pas de // cryptage de mot de passe, %4 et %5 seront les mêmes valeurs, // sauf que %4 aura des guillemets autour et %5 ne le sera pas. // //$lookup_password_query = ''; // SÉCURITÉ TERRIBLE : $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 // // Un tableau de requêtes SQL qui seront toutes exécutées // chaque fois qu'une tentative de changement de mot de passe est faite. // // N'importe quel nombre de requêtes peut être inclus ici. // Les requêtes seront exécutées dans l'ordre donné ici. // // %1 dans toutes les requêtes sera remplacé par le nom d'utilisateur complet // (y compris le domaine), tel que "[email protected]" // %2 dans toutes les requêtes sera remplacé par le nom d'utilisateur (sans // aucune portion de domaine), tel que "jose" // %3 dans toutes les requêtes sera remplacé par le nom de domaine, // tel que "example.com" // %4 dans toutes les requêtes sera remplacé par le nouveau mot de passe // dans le format de cryptage nécessaire selon les autres // paramètres de configuration du plugin (Notez que la syntaxe du // mot de passe sera fournie en fonction de vos // choix de cryptage, donc vous N'AVEZ JAMAIS besoin de fournir des guillemets // autour de cette valeur dans les requêtes ici.) // %5 dans toutes les requêtes sera remplacé par le nouveau mot de passe // en texte clair non crypté - ATTENTION ! Si vous n'utilisez pas de // cryptage de mot de passe, %4 et %5 seront les mêmes // valeurs, sauf que %4 aura des guillemets autour // et %5 ne le sera pas. // // $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 // // Une requête qui vérifie un indicateur qui indique si un utilisateur // doit être contraint de changer son mot de passe. Cette requête // doit renvoyer une valeur (une ligne, une colonne) qui est // zéro si l'utilisateur N'a PAS besoin de changer son mot de passe, // ou un si l'utilisateur doit être contraint de le changer maintenant. // // Ce paramètre doit être une chaîne vide si vous ne souhaitez pas // activer cette fonctionnalité. // // %1 dans cette requête sera remplacé par le nom d'utilisateur complet // (y compris le domaine), tel que "[email protected]" // %2 dans cette requête sera remplacé par le nom d'utilisateur (sans // aucune portion de domaine), tel que "jose" // %3 dans cette requête sera remplacé par le nom de domaine, // tel que "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 // // Quelle méthode de cryptage utilisez-vous pour stocker les mots de passe // dans votre base de données ? Veuillez utiliser l'une des suivantes, // exactement comme vous la voyez : // // AUCUN Les mots de passe sont stockés en texte clair uniquement // MYSQLPWD Les mots de passe sont stockés en utilisant la fonction MySQL password() // MYSQLENCRYPT Les mots de passe sont stockés en utilisant la fonction MySQL encrypt() // PHPCRYPT Les mots de passe sont stockés en utilisant la fonction PHP crypt() // MD5CRYPT Les mots de passe sont stockés en utilisant l'algorithme MD5 crypté // MD5 Les mots de passe sont stockés sous forme de hachage MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Les types de cryptage qui ont besoin d'un sel doivent savoir où obtenir // ce sel. Si vous avez une valeur de sel constante et connue, vous // devez la définir dans $csp_salt_static. Sinon, laissez cette // valeur vide et définissez une valeur pour le $csp_salt_query. // // Laissez les deux valeurs vides si vous n'avez pas besoin (ou n'utilisez pas) de sels // pour crypter vos mots de passe. // // La requête doit renvoyer une valeur (une ligne, une colonne) qui // est la valeur de sel pour le mot de passe de l'utilisateur actuel. Cette // requête est ignorée si $csp_salt_static est autre chose que vide. // // %1 dans cette requête sera remplacé par le nom d'utilisateur complet // (y compris le domaine), tel que "[email protected]" // %2 dans cette requête sera remplacé par le nom d'utilisateur (sans // aucune portion de domaine), tel que "jose" // %3 dans cette requête sera remplacé par le nom de domaine, // tel que "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // utilisez ce format avec MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // utilisez ce format avec 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 // // Vous pouvez vous assurer que le cryptage SSL est utilisé lors du changement de mot de passe // en définissant cela sur le port sur lequel votre HTTPS est servi // (443 est typique). Définissez à zéro si vous ne souhaitez pas forcer // une connexion HTTPS lorsque les utilisateurs changent leurs mots de passe. // // Vous pouvez remplacer cette valeur pour certains domaines, utilisateurs ou // niveaux de service via le plugin Virtual Host Login (vlogin) // en définissant une ou plusieurs valeurs pour $vlogin_csp_secure_port dans la configuration vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Si vous servez des requêtes web HTTP standard sur un port non standard // (tout autre que le port 80), vous devez spécifier ce // numéro de port ici. Définissez à zéro sinon. // // Vous pouvez remplacer cette valeur pour certains domaines, utilisateurs ou // niveaux de service via le plugin Virtual Host Login (vlogin) // en définissant une ou plusieurs valeurs pour $vlogin_csp_non_standard_http_port // dans la configuration vlogin. // //$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 // // Vous pouvez définir les longueurs minimales et maximales des mots de passe que // vous acceptez ou laisser ces paramètres à zéro pour indiquer que // aucune limite ne doit être appliquée. // // Activez l'un des autres paramètres ici pour vérifier que le // nouveau mot de passe contient au moins un chiffre, une lettre majuscule, // une lettre minuscule et/ou un caractère non alphanumérique. // $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 // // si votre système a des noms d'utilisateur avec autre chose que // un signe "@" séparant la partie utilisateur et domaine, // spécifiez ce caractère ici // //$csp_delimiter = '|'; $csp_delimiter = '@'; // mode débogage // $csp_debug = 0; ?> |
Le plugin Change SQL Password dépend également du plugin Compatibility que nous installons comme suit :
cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.16-1.0.tar.gz
tar xvfz compatibility-2.0.16-1.0.tar.gzMaintenant, nous devons entrer dans la configuration de SquirrelMail et dire à SquirrelMail que nous utilisons Courier comme notre serveur POP3 et IMAP et activer les plugins Change SQL Password et Compatibility :
/usr/share/squirrelmail/config/conf.plVous verrez le menu suivant. Naviguez à travers celui-ci comme indiqué :
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Menu Principal --
1. Préférences d'organisation
2. Paramètres du serveur
3. Valeurs par défaut des dossiers
4. Options générales
5. Thèmes
6. Carnets d'adresses
7. Message du jour (MOTD)
8. Plugins
9. Base de données
10. Langues
D. Définir des paramètres prédéfinis pour des serveurs IMAP spécifiques
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- D
Configuration de SquirrelMail : Lire : config.php
---------------------------------------------------------
Bien que nous ayons construit SquirrelMail, nous avons découvert quelques
préférences qui fonctionnent mieux avec certains serveurs qui ne fonctionnent pas si
bien avec d'autres. Si vous sélectionnez votre serveur IMAP, cette option
établira certains paramètres prédéfinis pour ce serveur.
Veuillez noter que vous devrez toujours passer en revue et vous assurer
que tout est correct. Cela ne change pas tout. Il n'y a
évidemment que quelques paramètres que cela changera.
Veuillez sélectionner votre serveur IMAP :
bincimap = Serveur IMAP Binc
courier = Serveur IMAP Courier
cyrus = Serveur IMAP Cyrus
dovecot = Serveur IMAP sécurisé Dovecot
exchange = Serveur IMAP Microsoft Exchange
hmailserver = hMailServer
macosx = Serveur de messagerie Mac OS X
mercury32 = Mercury/32
uw = Serveur IMAP de l'Université de Washington
gmail = Accès IMAP aux comptes de messagerie Google (Gmail)
quitter = Ne rien changer
Commande >> <-- courier
imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true
Appuyez sur n'importe quelle touche pour continuer... <-- appuyez sur une touche
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Menu Principal --
1. Préférences d'organisation
2. Paramètres du serveur
3. Valeurs par défaut des dossiers
4. Options générales
5. Thèmes
6. Carnets d'adresses
7. Message du jour (MOTD)
8. Plugins
9. Base de données
10. Langues
D. Définir des paramètres prédéfinis pour des serveurs IMAP spécifiques
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- 8
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Plugins
Plugins installés
1. delete_move_next
2. squirrelspell
3. newmail
Plugins disponibles :
4. administrateur
5. rapport_de_bug
6. calendrier
7. change_sqlpass
8. compatibilité
9. filtres
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. sent_subfolders
16. spamcop
17. test
18. traduire
R Retour au Menu Principal
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- 8 (ou quel que soit le numéro que le plugin de compatibilité a - il est nécessaire pour le plugin change_sqlpass)
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Plugins
Plugins installés
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibilité
Plugins disponibles :
5. administrateur
6. rapport_de_bug
7. calendrier
8. change_sqlpass
9. filtres
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. sent_subfolders
16. spamcop
17. test
18. traduire
R Retour au Menu Principal
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- 8 (le numéro du plugin change_sqlpass)
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Plugins
Plugins installés
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibilité
5. change_sqlpass
Plugins disponibles :
6. administrateur
7. rapport_de_bug
8. calendrier
9. filtres
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. sent_subfolders
16. spamcop
17. test
18. traduire
R Retour au Menu Principal
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- S
Configuration de SquirrelMail : Lire : config.php (1.4.0)
---------------------------------------------------------
Plugins
Plugins installés
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibilité
5. change_sqlpass
Plugins disponibles :
6. administrateur
7. rapport_de_bug
8. calendrier
9. filtres
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. sent_subfolders
16. spamcop
17. test
18. traduire
R Retour au Menu Principal
C Désactiver la couleur
S Enregistrer les données
Q Quitter
Commande >> <-- QUne dernière chose que nous devons faire est de modifier le fichier /etc/squirrelmail/config_local.php et commenter la variable $default_folder_prefix - si vous ne le faites pas, vous verrez le message d’erreur suivant dans SquirrelMail après vous être connecté : Query: CREATE “Sent” Reason Given: Invalid mailbox name.
vi /etc/squirrelmail/config_local.php| |
Maintenant, vous pouvez taper http://server1.example.com/webmail ou http://192.168.0.100/webmail dans votre navigateur pour accéder à SquirrelMail.
Connectez-vous avec votre adresse e-mail (par exemple, [email protected]) et votre mot de passe :

Vous devriez trouver l’e-mail de bienvenue dans votre boîte de réception :


Pour changer votre mot de passe, allez dans Options puis sélectionnez Changer le mot de passe :

Tapez votre mot de passe actuel puis votre nouveau mot de passe deux fois :

Après avoir changé le mot de passe, vous devrez vous reconnecter immédiatement avec le nouveau mot de passe :

19 Références
Tutoriel : Service de messagerie de style ISP avec Debian-Sarge et Postfix 2.1 : http://workaround.org/articles/ispmail-sarge/
Postfix + Quota : http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
Mots de passe de messagerie cryptés utilisant saslauthd : http://www.syscp.de/docs/public/contrib/cryptedmailpws
20 Liens
- Postfix MTA : http://www.postfix.org/
- Patch de quota Postfix : http://web.onda.com.br/nadal/
- phpMyAdmin : http://www.phpmyadmin.net/
- SquirrelMail : http://www.squirrelmail.org/
- Fedora : http://fedoraproject.org/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.