Installation SquirrelMail · 16 min read · Jan 12, 2026

Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Mandriva 2010.0 x86_64) - Page 5

15 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, il suffit de taper :

urpmi squirrelmail

SquirrelMail est livré avec quelques plugins pré-installés, malheureusement aucun d’entre 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 /var/www/squirrelmail/plugins/  
wget http://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 à cela à 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 supportée par Pear devrait être supportée // ici. Le DSN (nom de 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 supportés, // 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. // // C'est 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 aucun // 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 aucun // 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 drapeau qui indique si un utilisateur // doit être forcé 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 forcé 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 password() de MySQL // MYSQLENCRYPT Les mots de passe sont stockés en utilisant la fonction encrypt() de MySQL // PHPCRYPT Les mots de passe sont stockés en utilisant la fonction crypt() de PHP // 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 nécessitent 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 n'est pas 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). Mettez à 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. Mettez à 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 qu'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 portion utilisateur et domaine, // spécifiez ce caractère ici // //$csp_delimiter = '|'; $csp_delimiter = '@'; // mode débogage // $csp_debug = 0; ?> |

Maintenant, nous devons aller dans la configuration de SquirrelMail et dire à SquirrelMail que nous utilisons Courier comme notre serveur POP3 et IMAP (si vous ne faites pas cela, vous verrez probablement des erreurs telles que

ERROR: Could not complete request.  
Query: CREATE "Sent"  
Reason Given: Invalid mailbox name.

lorsque vous vous connectez à SquirrelMail) et activer le plugin Change SQL Password et désactiver les autres plugins de mot de passe :

/var/www/squirrelmail/conf/conf.pl

Vous verrez le menu suivant. Tapez D pour changer le serveur IMAP/POP3 :

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Menu principal --  
1. Préférences d'organisation  
2. Paramètres du serveur  
3. Paramètres 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

SquirrelMail Configuration : Read: config.php  
---------------------------------------------------------  
Alors que nous construisions 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 définira  
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 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

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 n’importe quelle touche

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Menu principal --  
1. Préférences d'organisation  
2. Paramètres du serveur  
3. Paramètres 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

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Plugins installés  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. change_pass  
7. quota_usage  
8. change_ldappass  
9. avelsieve  
10. windows  
11. folder_sizes  
12. archive_mail  
13. empty_folders
Plugins disponibles :  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_sqlpass  
21. compatibility  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Retour au menu principal  
C Désactiver la couleur  
S Enregistrer les données  
Q Quitter

Commande >> <– 21 (ou quel que soit le numéro du plugin de compatibilité - il est nécessaire pour le plugin change_sqlpass)

SquirrelMail Configuration : Read: config.php (1.4.0)

Plugins
Plugins installés

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. change_pass
  7. quota_usage
  8. change_ldappass
  9. avelsieve
  10. windows
  11. folder_sizes
  12. archive_mail
  13. empty_folders
  14. compatibility
    Plugins disponibles :
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_sqlpass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Retour au menu principal
    C Désactiver la couleur
    S Enregistrer les données
    Q Quitter
    
    Commande >> <-- 21 (le numéro du plugin change_sqlpass)
    
    SquirrelMail Configuration : Read: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Plugins installés  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. change_pass  
    7. quota_usage  
    8. change_ldappass  
    9. avelsieve  
    10. windows  
    11. folder_sizes  
    12. archive_mail  
    13. empty_folders  
    14. compatibility  
    15. change_sqlpass
Plugins disponibles :  
16. abook_import_export  
17. administrator  
18. block_sender  
19. bookmarks  
20. bug_report  
21. calendar  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Retour au menu principal  
C Désactiver la couleur  
S Enregistrer les données  
Q Quitter

Commande >> <– 6 (le numéro du plugin change_pass)

SquirrelMail Configuration : Read: config.php (1.4.0)

Plugins
Plugins installés

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. quota_usage
  7. change_ldappass
  8. avelsieve
  9. windows
  10. folder_sizes
  11. archive_mail
  12. empty_folders
  13. compatibility
  14. change_sqlpass
    Plugins disponibles :
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_pass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Retour au menu principal
    C Désactiver la couleur
    S Enregistrer les données
    Q Quitter
    
    Commande >> <-- 7 (le numéro du plugin change_ldappass)
    
    SquirrelMail Configuration : Read: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Plugins installés  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. avelsieve  
    8. windows  
    9. folder_sizes  
    10. archive_mail  
    11. empty_folders  
    12. compatibility  
    13. change_sqlpass
Plugins disponibles :  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_ldappass  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Retour au menu principal  
C Désactiver la couleur  
S Enregistrer les données  
Q Quitter

Commande >> <– S

Données enregistrées dans config.php
Appuyez sur entrée pour continuer… <– ENTRER

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Plugins installés  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. quota_usage  
7. change_ldappass  
8. avelsieve  
9. windows  
10. folder_sizes  
11. archive_mail  
12. empty_folders  
13. compatibility  
14. change_sqlpass
Plugins disponibles :  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_ldappass  
22. change_pass  
23. demo  
24. fortune  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Retour au menu principal  
C Désactiver la couleur  
S Enregistrer les données  
Q Quitter

Commande >> <– Q

Maintenant, vous pouvez taper http://server1.example.com/squirrelmail ou http://192.168.0.100/squirrelmail 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 :

SquirrelMail vous informera si le mot de passe a été changé avec succès :

16 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

17 Liens

Share: X/Twitter LinkedIn

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

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