username @ domain 형식을 사용하면 Dovecot 사용자 조회가 실패합니다


14

FreeBSD 서버에 Dovecot v2.0.11이 설치되어 있으며 수신 이메일 주소에 대한 사용자 조회는 실패하지만 시스템 사용자에 대한 조회는 성공적입니다.

Dovecot은 시스템 사용자를 사용하도록 설정되어 있으므로 dovecot.conf는

 userdb {
  driver = passwd
}

passdb {
  driver = passwd
}

인증 디버그를 사용하도록 설정했습니다.

예를 들어, webmaster라는 사용자가 있으며 "webmaster"에 doveadm user를 사용하면 다음과 같이 작동합니다.

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

그러나 doveadm 사용자를 사용하여 webmaster@myregisteredname.com을 조회하면 다음과 같이 실패합니다.

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

이로 인해 webmaster@myregisteredname.com에 대한 수신 메일이 "알 수없는 사용자"오류와 함께 반송됩니다.

/ var / log / maillog에 로그인 한 오류는 다음과 같습니다.

Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user

/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

사용자와 홈 디렉토리는 다른 서버에서 가져 왔으며 사용자는 vipw 도구를 사용하여 설정되었습니다. 가져 오기에서 시스템 사용자를 도브 코트 검색과 "링크"하지 않는 것을 놓쳤습니다.

무엇인가에 대한 아이디어가 있습니까?

편집 : BillThor의 조언을 사용하여 다음과 같이 dovecot.conf를 업데이트했습니다.

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

그러나 이제 doveadm 사용자는 다른 방식으로 실패합니다.

#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

또한 도메인이없는 사용자에게는 더 이상 작동하지 않습니다.

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

위의 메시지가 표시되면 / 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

답변:


15

passdb를 사용하는 비둘기장의 사용자 ID에는 도메인이 포함되지 않습니다. 사용자가 사용해야하는 사용자 ID는 전체 이메일 주소가 아닌 로컬 부분입니다.

통과 및 실패한 검사가 예상대로 작동합니다. auth_username_format=%n비밀번호 db 정의 이전의 설정 이 작동합니다. 도메인은 확인되지 않습니다.


답장을 보내 주셔서 감사하지만 작동하지 않습니다. 업데이트 된 결과로 질문을 편집했습니다.
cigarman

1
@Coleman : Dovecot 1.2에 적합한 솔루션을 찾았습니다. Dovecot 2에서도 작동합니다. 내 답변 수정을 참조하십시오. 우분투의 기본 구성 파일에서 솔루션을 찾았습니다.
BillThor

13

Ubuntu Server 12.04를 사용하고 있으며 위의 솔루션을 시도했습니다. 그러나 가장 간단하고 쉬운 방법은 10-auth.conf에서 설정하는 것입니다.

auth_username_format = %n

Ubuntu 12.04의 기본값 인 인증에 PAM을 사용합니다.


3

Dovecot 2.1이이 솔루션을 위반했거나 예상되는 동작이 변경되었다고 생각합니다.

userdb에 대해 동일한 인증 오류를 추적했습니다.

userdb {
  driver = passwd
}

로컬 사용자 (비가 상)가 exim-> lmtp를 통해 이메일을 수신하면 도메인을 포함합니다. auth_username_format = % Ln을 정의하면 로컬 배달이 수정되지만 가상 배달이 중단됩니다. 제공된 args = username_format 추가 수정 사항은 무시 된 것으로 보입니다.

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

로그에는 경고가 포함되어 있습니다.

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

흥미롭게도 passwd-file을 사용하면 작동 하지만 auth는 passwd 파일이 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 나에게 이유는 여분의 공간이었다.

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

즉, CRYPT와 uesrname 사이에 두 개의 공백이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.