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-DB

Ensuite, nous redémarrons Apache :

/etc/init.d/httpd restart

SquirrelMail 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.php

Maintenant, 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.gz

Maintenant, 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.pl

Vous 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 >> <-- Q

Une 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

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.