Pencarian pengguna Dovecot gagal saat menggunakan format nama pengguna @ domain

14

Saya telah menginstal Dovecot v2.0.11 pada server FreeBSD dan pencarian pengguna untuk alamat email yang masuk gagal, tetapi pencarian untuk pengguna sistem berhasil.

Dovecot diatur untuk menggunakan pengguna sistem, jadi dovecot.conf saya sudah

 userdb {
  driver = passwd
}

dan

passdb {
  driver = passwd
}

Saya memiliki auth debug diaktifkan.

Misalnya, saya memiliki pengguna yang disebut webmaster, dan menggunakan pengguna doveadm untuk "webmaster" berfungsi sebagai berikut:

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

Namun menggunakan pengguna doveadm untuk mencari [email protected] gagal sebagai berikut:

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

Ini menghasilkan email masuk untuk [email protected] memantul dengan kesalahan "pengguna tak dikenal".

Inilah kegagalan login / var / log / maillog:

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

Inilah kegagalan login /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

Para pengguna dan direktori home mereka diimpor dari server lain dan para pengguna diatur menggunakan alat vipw. Saya yakin ada sesuatu yang saya lewatkan pada impor yang tidak "menghubungkan" pengguna sistem dengan pencarian dovecot.

Adakah ide tentang sesuatu itu?

EDIT: Menggunakan saran BillThor, saya memperbarui dovecot.conf sebagai berikut:

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

Namun, sekarang, pengguna doveadm gagal dengan cara yang berbeda:

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

Dan, itu tidak lagi berfungsi untuk pengguna tanpa domain:

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

Ketika saya mendapatkan pesan di atas, berikut ini ada di / 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
tukang cerutu
sumber

Jawaban:

15

Userids di dovecot menggunakan passdb tidak termasuk domain. Userid yang harus digunakan oleh pengguna adalah bagian lokal, bukan alamat email lengkap.

Cek yang lulus dan gagal berfungsi seperti yang diharapkan. Pengaturan auth_username_format=%nsebelum definisi kata sandi db berhasil. Domainnya tidak divalidasi.

BillThor
sumber
Terima kasih atas jawabannya, tetapi itu juga tidak berhasil. Saya telah mengedit pertanyaan saya dengan hasil yang diperbarui.
Tukang cerutu
1
@ Coleman: Menemukan solusi yang berfungsi untuk Dovecot 1.2. Harus bekerja untuk Dovecot 2 juga. Lihat edit untuk tanggapan saya. Menemukan solusi dalam file konfigurasi default untuk ubuntu.
BillThor
13

Saya menggunakan Ubuntu Server 12.04 dan saya mencoba solusi di atas. Namun, saya menemukan bahwa cara termudah dan termudah adalah di 10-auth.conf untuk ditetapkan

auth_username_format = %n

Saya menggunakan PAM untuk otentikasi yang merupakan default di Ubuntu 12.04.

Søren Weber
sumber
3

Saya menduga bahwa Dovecot 2.1 memecahkan solusi ini atau telah mengubah perilaku yang diharapkan.

Saya telah melacak kesalahan otorisasi yang sama dengan userdb:

userdb {
  driver = passwd
}

Ketika pengguna lokal (non-virtual) menerima email melalui exim-> lmtp itu termasuk domain. Menentukan auth_username_format =% Ln memang memperbaiki pengiriman lokal, tetapi itu merusak pengiriman virtual. Perbaikan yang ditambahkan untuk menambahkan args = username_format tampaknya diabaikan:

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

dan log menyertakan peringatan

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

Menariknya, menggunakan file passwd tidak bekerja , tetapi auth marah bahwa file passwd dimiliki oleh 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
sumber
1

passwd-file: Unknown setting: username_format Bagi saya alasannya adalah ruang ekstra:

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

yaitu saya memiliki dua ruang antara CRYPT dan uesrname.

Putnik
sumber