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 webmaster@myregisteredname.com kończy się niepowodzeniem w następujący sposób:

# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist

Powoduje to, że poczta przychodząca na adres webmaster@myregisteredname.com 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(webmaster@myregisteredname.com): unknown user

Oto błąd zalogowany w /var/log/debug.log:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       webmaster@myregisteredname.com  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): 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 webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com

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

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.


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.


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'

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.