La recherche d'utilisateur Dovecot échoue lors de l'utilisation du format nom d'utilisateur @ domaine

14

J'ai Dovecot v2.0.11 installé sur un serveur FreeBSD et les recherches d'utilisateurs pour les adresses e-mail entrantes échouent, mais les recherches pour les utilisateurs du système sont réussies.

Dovecot est configuré pour utiliser les utilisateurs du système, donc mon dovecot.conf a

 userdb {
  driver = passwd
}

et

passdb {
  driver = passwd
}

J'ai le débogage d'authentification activé.

Par exemple, j'ai un utilisateur appelé webmaster, et l'utilisation de doveadm user pour "webmaster" fonctionne comme suit:

#doveadm user webmaster
userdb: webmaster
  system_groups_user: webmaster
  uid       : 1020
  gid       : 1020
  home      : /home/webmaster

Cependant, l'utilisation de doveadm user pour rechercher [email protected] échoue comme suit:

# doveadm user [email protected]
userdb lookup: user [email protected] doesn't exist

Cela se traduit par le courrier entrant pour [email protected] à rebondir avec une erreur "utilisateur inconnu".

Voici l'échec enregistré dans / var / log / maillog:

Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): unknown user

Voici l'échec enregistré dans /var/log/debug.log:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       [email protected]  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd([email protected]): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND  1

Les utilisateurs et leurs répertoires personnels ont été importés d'un autre serveur et les utilisateurs ont été configurés à l'aide de l'outil vipw. Je suis sûr qu'il y a quelque chose que j'ai manqué lors de l'importation qui ne "relie" pas l'utilisateur du système à la recherche de pigeonnier.

Des idées sur ce que peut être ce quelque chose?

EDIT: En utilisant les conseils de BillThor, j'ai mis à jour dovecot.conf comme suit:

#doveconf -n passdb userdb
passdb {
  args = username_format=%n
  driver = passwd
}
userdb {
  args = username_format=%n
  driver = passwd
}

Cependant, maintenant, l'utilisateur doveadm échoue d'une manière différente:

#doveadm user [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]

Et, cela ne fonctionne plus pour les utilisateurs sans domaine:

#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster

Lorsque je reçois les messages ci-dessus, ce qui suit se trouve dans / var / log / maillog:

Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling
cigarman
la source

Réponses:

15

Les ID utilisateur dans dovecot utilisant passdb n'incluent pas le domaine. L'ID utilisateur que l'utilisateur doit utiliser est la partie locale, pas l'adresse e-mail complète.

Les vérifications réussies et échouées fonctionnent comme prévu. La définition auth_username_format=%navant la définition de la base de données du mot de passe fonctionne. Le domaine n'est cependant pas validé.

BillThor
la source
Merci pour la réponse, mais cela ne fonctionne pas non plus. J'ai modifié ma question avec les résultats mis à jour.
cigarman
1
@Coleman: a trouvé une solution de travail pour Dovecot 1.2. Devrait également fonctionner pour Dovecot 2. Voir modifier ma réponse. Trouvé la solution dans le fichier de configuration par défaut pour ubuntu.
BillThor
13

J'utilise Ubuntu Server 12.04 et j'ai essayé les solutions ci-dessus. Cependant, j'ai trouvé que le moyen le plus simple et le plus simple était dans 10-auth.conf pour définir

auth_username_format = %n

J'utilise PAM pour l'authentification qui est la valeur par défaut dans Ubuntu 12.04.

Søren Weber
la source
3

Je soupçonne que Dovecot 2.1 a cassé cette solution ou a changé le comportement attendu.

J'ai retracé la même erreur d'autorisation à userdb:

userdb {
  driver = passwd
}

Lorsqu'un utilisateur local (non virtuel) reçoit un e-mail via exim-> lmtp, il inclut le domaine. La définition de auth_username_format =% Ln corrige la livraison locale, mais elle rompt les livraisons virtuelles. Le correctif proposé d'ajouter args = username_format semble être ignoré:

userdb {
  driver = passwd
  args = username_format=%n
}

et les journaux incluent un avertissement

Apr  4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting

Fait intéressant, l'utilisation du fichier passwd fonctionne , mais auth est fou que le fichier passwd soit la propriété de root.

userdb {
  driver = passwd-file
  args = username_format=%n /etc/passwd
}

Apr  4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr  4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'
beewoolie
la source
1

passwd-file: Unknown setting: username_format Pour moi, la raison était un espace supplémentaire:

passdb {
  driver = passwd-file
  args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users
}

c'est-à-dire que j'avais deux espaces entre CRYPT et uesrname.

Putnik
la source