En attendant que je poste un article sur mon nouveau script de backup FTP prévue pour la release 2 d’OVH basée sur Gentoo je publie ici un petit script permettant de lister les adresses emails d’un nom de domaine sur cette distribution.
C’est un besoin spécifique a seulement certaines entreprises, mais ça peut être pratique pour d’autres aussi, d’où ce billet ![]()
Le besoin est simple : Une dizaine d’utilisateurs ont besoin de connaitre uniquement les adresses emails et les mots de passe associés pour pouvoir répondre aux questions habituelles qu’ils reçoivent par téléphone ou par mail. Par exemple :
J’ai acheté un iphone, je suis chez à la boutique orange et le vendeur n’arrive pas à configurer ma boite mail. C’est quoi le mot de passe ??
Habituellement, la réponse ça serait
Je ne peux pas voir ton mot de passe. Je peux te le changer par contre. Je te met « 123456″ comme ça tu t’en souviendras…
Effectivement, les personnes ayant accès au désormais célèbre qmailadmin ne peuvent pas voir les mots de passe. Il n’y a qu’en SSH qu’on peut afficher le fichier « vpasswd » présent dans les répertoires /home/vpopmail/domains/le-domaine-en-question/vpasswd
Et l’ergonomie de qmailadmin … quand on fait une recherche sur un nom on est pas sur de le trouver. Le plus sur étant de se taper la liste des adresses dans l’ordre et encore ! Ci-dessous, un screen d’une recherche sur le mot « denis ». Alors que je sais que 3 adresses comporte ce mot :
Revenons à notre petit exemple. Une heure plus tard, nouveau coup de téléphone :
Je viens de rentrer au bureau. Merci pour mon téléphone mais maintenant, j’ai mon outlook qui me met un message comme quoi le mot de passe n’est pas bon. Je fais quoi?
Ca parait ridicule je sais, mais si vous saviez combien de fois j’ai vu ce scénario se répéter
Je ne vais pas détailler ici comment je monte une administration et comment je gère les différents droits de lecture / d’écriture sur chaque page. Je ne vais « que » donner le script permettant de lister les adresses emails et les alias de redirections et de les insérer dans deux tables MySQL. Après, ça sera a vous de gérer la sécurité des accès à cette table. Personnellement, j’ai fais une base de données dédiée avec un user ayant le minimum d’accès possible et un mot de passe de 3km de long
Pour faire simple, j’ai juste crée 2 tables. Le script shell tournant toutes les 10 minutes pour actualiser ces tables.
En PHP j’ai ensuite monté un mini moteur de recherche / filtrage pour afficher les résultats et les filtrer suivant les recherches.
Voici donc le schémas de ces tables :
-- -- Structure de la table `emails__alias` -- CREATE TABLE IF NOT EXISTS `emails__alias` ( `alias` varchar(250) NOT NULL, `redirection` varchar(250) NOT NULL, `date_verif` datetime NOT NULL, KEY `alias` (`alias`,`redirection`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Structure de la table `emails__comptes` -- CREATE TABLE IF NOT EXISTS `emails__comptes` ( `adresse` varchar(250) NOT NULL, `pass` varchar(250) NOT NULL, `nom` varchar(100) NOT NULL, `blocage` int(5) NOT NULL, `quota` varchar(20) NOT NULL, `date_verif` datetime NOT NULL, KEY `adresse` (`adresse`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
#!/bin/sh
#
# SCRIPT LISTANT LES COMPTES MAILS ET ALIAS D'UN NOM DE DOMAINE SUR LE SERVEUR
#
# CONFIGURATIONS
DOMAINE="mon-domaine.com"
TMP_REQ="/root/mes_scripts/tmp_req_emails.sql"
SQL_BIN="/usr/bin/mysql"
SQL_HOST="localhost"
SQL_DB="votre_bdd"
SQL_LOGIN="votre_login"
SQL_PASS="votre_pass"
# on cree le fichier temporaire qui contiendra les requetes SQL
>$TMP_REQ
## ON AJOUTE LES REQUETES QUI SUPPRIMERONT LES COMPTES EMAILS ET LES ALIAS DES TABLES
echo "TRUNCATE TABLE emails__comptes;" >> $TMP_REQ;
echo "TRUNCATE TABLE emails__alias;" >> $TMP_REQ;
### LISTER LES COMPTES EMAILS (adresses reelles, pas les alias)
###
# fonction remplacant les quotes par des espaces :
function stripquote(){
echo "$1" | sed "s/'/\\ /g"
}
# on boucle sur le fichier de pass pour generer des requetes SQL
cd /home/vpopmail/domains/$DOMAINE/
while read ligne
do
IFS=":"
set -- $ligne
adresse=$(stripquote $1"@"$DOMAINE)
blocage=$4
nom=$(stripquote $5)
quota=$7
pass=$(stripquote $8)
unset IFS
# construction de la requete SQL
#echo "adresse="$adresse" blocage="$blocage" nom="$nom" quota="$quota" pass="$pass
req="INSERT INTO emails__comptes (adresse, pass, nom, blocage, quota, date_verif) VALUES ('"$adresse"', '"$pass"', '"$nom"', '"$blocage"', '"$quota"', NOW());";
echo $req >> $TMP_REQ;
done < vpasswd
### LISTER LES ALIAS ET REDIRECTIONS
# fonction remplacant les : par des .
function doubletoonepoint(){
echo "$1" | sed "s/:/\\./g"
}
function noqmail(){
echo "$1" | sed '/.qmail-/!d; s///'
}
cd "/home/vpopmail/domains/"$DOMAINE"/"
for ligne in `find .qmail-* ! -name .qmail-default -type f -print`
do
# on split sur le nom du fichier pour concactener l'adresse
adresse=$(doubletoonepoint $(noqmail $ligne))"@"$DOMAINE
fichier=$ligne
#echo "Adresse :"$adresse" FICHIER="$fichier
# on recupere le contenu du fichier d'alias
while read alias
do
# pour ne lister que les emails, on teste si la ligne commence par &
if [ ${alias:0:1} = '&' ];then
redirection=${alias#\&}
req="INSERT INTO emails__alias (alias, redirection, date_verif) VALUES ('"$adresse"','"$redirection"', NOW());"
#echo $adresse" redirige vers "$redirection
echo $req >> $TMP_REQ
fi
done < $fichier
done;
# execution des requetes SQL
$SQL_BIN -u$SQL_LOGIN -p$SQL_PASS -D$SQL_DB -h$SQL_HOST < $TMP_REQ
# suppression du fichier temporaire
rm $TMP_REQ;
Voila, le script est simple. Les tables SQL ne sont pas optimisées mais ça suffit amplement. Ce script peut aussi être utile à toute personne voulant connaitre la liste de toutes les adresses emails qu’il héberge sur une gentoo release 2 sans pour autant connaitre le mot de passe.
Il n’y aura plus qu’a personnaliser les variables de configuration en tete de script puis de le placer dans une tache CRON tournant à la fréquence que vous le voulez.
@ la prochaine
Petite précision sur mon exemple de coups de téléphone. J’ai oublié de parler du classique fichier excel listant les adresses emails et les mots de passe qui normalement devrait servir pour répondre à la question posée.
Fichier excel alimenté manuellement par toutes les personnes pouvant ajouter / éditer ou supprimer une adresse email… enfin quand ils pensent à le mettre à jour.
Avec cette solution, on peut même le générer automatiquement ce tableau excel