Installation SquirrelMail · 14 min read · Jan 14, 2026

Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 12.04 LTS) - 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, nous exécutons :

apt-get install squirrelmail squirrelmail-compatibility php-pear php-db

Ensuite, nous créons un lien symbolique de la configuration Apache fournie avec le paquet SquirrelMail vers le répertoire /etc/apache2/conf.d et redémarrons Apache :

ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
/etc/init.d/apache2 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 y a le plugin Change SQL Password que nous pouvons installer manuellement :

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/plugins/change_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 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 retourne une valeur positive si un utilisateur // et un mot de passe sont trouvés dans la base de données. // // Cette requête devrait retourner 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 = ''; // TERRIBLE SÉCURITÉ : $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. // // Un nombre quelconque 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 // devrait retourner 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 devrait ê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 le 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 retourner 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 et activer les plugins Change SQL Password et Compatibility :

/usr/sbin/squirrelmail-configure

Vous verrez le menu suivant. Naviguez à travers lui 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. Paramètres 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 Activer la couleur
S Enregistrer les données
Q Quitter

Commande >> <– D

Configuration de SquirrelMail : Lire : config.php

Alors que nous avons 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
fixera 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
gmail = Accès IMAP aux comptes de messagerie Google (Gmail)

quit = 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 entrée pour continuer… <– appuyez sur ENTRÉE

Configuration de SquirrelMail : Lire : config.php (1.4.0)

Menu Principal –

  1. Préférences d’organisation
  2. Paramètres du serveur
  3. Paramètres 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 Activer 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. view_as_html

Plugins disponibles :

  1. administrateur
  2. rapport de bogue
  3. calendrier
  4. change_sqlpass
  5. compatibilité
  6. delete_move_next
  7. démo
  8. filtres
  9. fortune
  10. info
  11. listcommands
  12. mail_fetch
  13. message_details
  14. newmail
  15. sent_subfolders
  16. spamcop
  17. squirrelspell
  18. test
  19. translate

R Retour au menu principal
C Activer la couleur
S Enregistrer les données
Q Quitter

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

Configuration de SquirrelMail : Lire : config.php (1.4.0)

Plugins
Plugins installés

  1. view_as_html
  2. compatibilité

Plugins disponibles :

  1. administrateur
  2. rapport de bogue
  3. calendrier
  4. change_sqlpass
  5. delete_move_next
  6. démo
  7. filtres
  8. fortune
  9. info
  10. listcommands
  11. mail_fetch
  12. message_details
  13. newmail
  14. sent_subfolders
  15. spamcop
  16. squirrelspell
  17. test
  18. translate

R Retour au menu principal
C Activer la couleur
S Enregistrer les données
Q Quitter

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

Configuration de SquirrelMail : Lire : config.php (1.4.0)

Plugins
Plugins installés

  1. view_as_html
  2. compatibilité
  3. change_sqlpass

Plugins disponibles :

  1. administrateur
  2. rapport de bogue
  3. calendrier
  4. delete_move_next
  5. démo
  6. filtres
  7. fortune
  8. info
  9. listcommands
  10. mail_fetch
  11. message_details
  12. newmail
  13. sent_subfolders
  14. spamcop
  15. squirrelspell
  16. test
  17. translate

R Retour au menu principal
C Activer 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. view_as_html
  2. compatibilité
  3. change_sqlpass

Plugins disponibles :

  1. administrateur
  2. rapport de bogue
  3. calendrier
  4. delete_move_next
  5. démo
  6. filtres
  7. fortune
  8. info
  9. listcommands
  10. mail_fetch
  11. message_details
  12. newmail
  13. sent_subfolders
  14. spamcop
  15. squirrelspell
  16. test
  17. translate

R Retour au menu principal
C Activer 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 de mot de passe :

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

Si le mot de passe a été changé avec succès, vous verrez le message d’erreur suivant, ce qui signifie que vous devez vous reconnecter avec votre nouveau mot de passe (car l’ancien n’est plus actif) :

16 VMA (Interface d’administration de messagerie virtuelle)

L’Interface d’administration de messagerie virtuelle (VMA) est une petite application web basée sur PHP écrite pour gérer le système de messagerie mis en place dans ce guide. Je ne l’ai pas testée, mais je pensais que je devrais partager.

Voici ce que le développeur (Charl Loubser) m’a écrit dans un e-mail :

*”Bonjour,

Je ne sais pas si cela vous plaira, ou si cela vous sera utile, mais je pensais que je devrais partager :

J’ai écrit une petite application web pour la configuration que vous avez faite dans le Howto : https://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu-10.04

Si vous approuvez et pensez que cela vaut la peine d’être partagé dans votre tutoriel, vous êtes plus que bienvenu, et vous pouvez le faire sans hésitation.

Comme mentionné dans le readme, ce n’est pas une application parfaite, mais elle fait le travail pour l’instant, et je pense qu’elle est relativement sûre dans un environnement fermé (configuration LAN entre serveurs).

Le fichier rar avec l’application est joint, mais peut également être téléchargé à : http://code.google.com/p/vma/ “*

17 Références

18 Liens

Share: X/Twitter LinkedIn

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

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