Wyszukiwanie użytkownika Dovecot kończy się niepowodzeniem, gdy używany jest format nazwa użytkownika @ domena

14

Mam Dovecot v2.0.11 zainstalowany na serwerze FreeBSD i wyszukiwanie użytkowników dla przychodzących adresów e-mail kończy się niepowodzeniem, ale wyszukiwanie użytkowników systemu zakończyło się powodzeniem.

Dovecot jest skonfigurowany do używania użytkowników systemu, więc mój dovecot.conf ma

 userdb {
  driver = passwd
}

i

passdb {
  driver = passwd
}

Mam włączoną funkcję debugowania autoryzacji.

Na przykład mam użytkownika o nazwie webmaster, a używanie doveadm dla „webmaster” działa w następujący sposób:

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

Jednak użycie użytkownika doveadm do wyszukiwania [email protected] kończy się niepowodzeniem w następujący sposób:

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

Powoduje to, że poczta przychodząca na adres [email protected] jest odsyłana z błędem „nieznanego użytkownika”.

Oto błąd zalogowany w / var / log / maillog:

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

Oto błąd zalogowany w /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

Użytkownicy i ich katalogi domowe zostały zaimportowane z innego serwera, a użytkowników skonfigurowano za pomocą narzędzia vipw. Jestem pewien, że w imporcie brakuje czegoś, co nie „łączy” użytkownika systemu z wyszukiwaniem dovecot.

Wszelkie pomysły na temat tego, co to może być?

EDYCJA: Korzystając z porady BillThor, zaktualizowałem plik dovecot.conf w następujący sposób:

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

Jednak teraz użytkownik doveadm nie działa w inny sposób:

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

I nie działa już dla użytkowników bez domeny:

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

Kiedy otrzymuję powyższe komunikaty, w / 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
cygaro
źródło

Odpowiedzi:

15

Identyfikatory użytkownika w dovecot używające passdb nie obejmują domeny. Identyfikator użytkownika, którego powinien użyć użytkownik, to część lokalna, a nie pełny adres e-mail.

Kontrole, które pomyślnie przechodzą i nie działają, działają zgodnie z oczekiwaniami. Ustawienie auth_username_format=%nprzed definicją db hasła działa. Domena nie jest jednak sprawdzona.

BillThor
źródło
Dziękuję za odpowiedź, ale to też nie działa. Zredagowałem swoje pytanie ze zaktualizowanymi wynikami.
cygaro
1
@Coleman: Znaleziono działające rozwiązanie dla Dovecot 1.2. Powinien również działać dla Dovecot 2. Zobacz edytuj moją odpowiedź. Znaleziono rozwiązanie w domyślnym pliku konfiguracyjnym dla Ubuntu.
BillThor
13

Używam Ubuntu Server 12.04 i wypróbowałem powyższe rozwiązania. Odkryłem jednak, że najprostszym i najłatwiejszym sposobem było ustawienie 10-auth.conf

auth_username_format = %n

Używam PAM do uwierzytelnienia, które jest domyślne w Ubuntu 12.04.

Søren Weber
źródło
3

Podejrzewam, że Dovecot 2.1 albo złamał to rozwiązanie, albo zmienił oczekiwane zachowanie.

Znalazłem ten sam błąd autoryzacji dla userdb:

userdb {
  driver = passwd
}

Gdy użytkownik lokalny (niebędący wirtualnym) otrzyma wiadomość e-mail za pośrednictwem exim-> lmtp, obejmuje domenę. Zdefiniowanie auth_username_format =% Ln naprawia dostawę lokalną, ale przerywa dostawy wirtualne. Oferowana poprawka dodawania args = nazwa_użytkownika wydaje się być ignorowana:

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

a dzienniki zawierają ostrzeżenie

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

Co ciekawe, użycie pliku passwd działa , ale auth jest zły, że plik passwd jest własnością 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
źródło
1

passwd-file: Unknown setting: username_format Dla mnie powodem była dodatkowa przestrzeń:

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

tzn. miałem dwie spacje między CRYPT a nazwą użytkownika.

Putnik
źródło