Mise en place d’un MasterPassword sur Dovecot et Mac OS X Server

Dans le cadre d’une migration de serveur, il arrive que l’on change tous les systèmes, pour remplacer du Mac OS X Snow Leopard Server par de l’Exchange par exemple.

Dans ce genre de situation, il est impératif de pouvoir migrer les anciens e-mails et donc, d’y accéder.

Lorsqu’il y a peu d’utilisateurs, il est éventuellement acceptable de demander à chacun son mot de passe e-mail. Cependant, c’est quelque chose de peu recommandable en terme de sécurité, et d’absolument pas viable à grande échelle. Certain se dirons « nous n’avons qu’à remettre à zéro les mots de passe utilisateur », ce qui est assez mauvais en terme d’expérience utilisateur.

La bonne solution est bien plus simple : un MasterPassword. Dovecot (le serveur IMAP/POP utilisé par Apple) dispose d’une fonction qui permet de s’authentifier avec un mot de passe unique sur tous les comptes.

Autant le dire, cette fonction ne doit pas être activée en permanence, elle est présente uniquement à des fins de migration et de récupération.

Voyons ensemble comment mettre ce système en place et s’en servir.

L’article porte sur Dovecot 1 utilisé dans Snow Leopard Server, cependant il doit être valable pour Dovecot 2 utilisé de nos jours.

Pour activer le MasterPassword, c’est très simple, il suffit d’ajouter une méthode d’authentification au serveur e-mail via le fichier dovecot.conf

Le contenu par défaut de ce fichier ressemble à cela :

base_dir = /var/run/dovecot
protocols = managesieve pop3 imap
protocol managesieve {
  listen = *:2000
  sieve_storage = /var/spool/imap/dovecot/sieve-scripts/%u
  sieve = /var/spool/imap/dovecot/sieve-scripts/%u/dovecot.sieve
}
disable_plaintext_auth = no
log_path = 
info_log_path = 
syslog_facility = local6
ssl_disable = yes
ssl_cipher_list = ALL:!LOW:!SSLv2:!aNULL:!ADH:!eNULL
login_dir = /var/run/dovecot/login
login_user = _dovecot
login_process_per_connection = no
mail_location = maildir:/var/spool/imap/dovecot/mail/%u
mail_access_groups = mail
mail_debug = yes
verbose_proctitle = yes
first_valid_uid = 6
last_valid_uid = 0
first_valid_gid = 6
last_valid_gid = 0
max_mail_processes = 200
protocol imap {
  mail_process_sharing = full
  mail_max_connections = 5
  mail_max_userip_connections = 20
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_process_sharing = full
  mail_max_connections = 5
  mail_plugins = quota
}
protocol lda {
  postmaster_address = postmaster@example.com
  hostname = snow-srv.lab.office.inig-services.com
  mail_plugins = cmusieve quota
  quota_full_tempfail = yes
  sendmail_path = /usr/sbin/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
  log_path = /var/log/mailaccess.log
  info_log_path = /var/log/mailaccess.log
}
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
    mechanisms = login plain apop cram-md5
  passdb od {
  }
  userdb od {
    args = partition=/etc/dovecot/partition_map.conf enforce_quotas=no
  }
  user = root
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = _dovecot
      group = mail
    }
  }
}
dict {
}
plugin {
  quota_warning = storage=100%% /usr/libexec/dovecot/quota-exceeded.sh
  quota = maildir:User quota
  sieve = /var/spool/imap/dovecot/sieve-scripts/%u/dovecot.sieve
}

Soit une belle liste d’option dont une petite partie nous intéressant sur la fin : le groupe auth default.

C’est dans cette partie que nous allons simplement rajouter une nouvelle source d’authentification au côté de la base d’utilisateur Open Directory.

Vous pouvez ajouter la configuration suivante après la ligne passdb od :

  auth_master_user_separator = *
  passdb passwd-file {
     args = /etc/dovecot/passwd.masterusers
     master = yes
  }

Cette configuration indique à Dovecot que le caractère spécial utilisé pour séparer l’identifiant de l’utilisateur cible de l’identifiant de l’utilisateur maitre sera * et que la base d’utilisateur maitre se trouvera dans /etc/dovecot/passwd.masterusers.

Lors de l’authentification avec un compte maitre, l’identifiant à utiliser sera donc de la forme user_id*master_id et le mot de passe sera celui du compte maitre master_id.

Pour définir les comptes maitres et leur mot de passe, il suffit d’utiliser la commande htpasswd avec les options suivantes :

htpasswd -c -s /etc/dovecot/passwd.masterusers master
New password: 
Re-type new password: 
Adding password for user master

Où master est le nom de notre compte maitre.

Attention, l’option -c permet de créer le fichier s’il n’existe pas ou remplace l’actuel. Si vous voulez ajouter plusieurs comptes maitres, retirez l’option après le premier usage.

Maintenant que le fichier de mot de passe est présent et que la configuration de dovecot est faite, il est temps de relancer le serveur e-mail :

bash-3.2# serveradmin stop mail && serveradmin start mail
mail:state = "STOPPED"
mail:state = "RUNNING"

À partir de maintenant, vous pouvez vous connecter via vos clients e-mail (webmail, Mail, imapsync…) avec un identifiant du type alice*master et le mot de passe maitre.

Pensez à désactiver cette fonctionnalité lorsque vous n’en avez plus besoin !

Laisser un commentaire