[Postfixbuch-users] SASL/auxprop mag nicht mit /etc/postfix/sasl_passwd.db

Olaf Lautenschlaeger postfix_users_ol_nospam at anova.de
Di Jun 17 23:40:04 CEST 2008


Postfix 2.4.5, Cyrus IMAP 2.3.8, Cyrus SASL 2.1.22
auf openSuSE 10.3-x86_64

Liebe Liste,

ich bin hier langsam ratlos.

Mein neuer Mailserver lief bisher im Testmodus
mit leerer "local_recipient_maps"-Direktive (und
einem "catchall"-Account).

Dann habe ich einige Accounts in "/etc/sasldb2"
nach diesem Schema eingepflegt:

cyradmin at FQDN: userPassword

Der cyradmin-User steht nicht in der "/etc/passwd",
d.h. es ist Login per SASL-auxprop/sasldb in der
"imapd.conf" eingestellt.

Zugriff mit Thunderbird als remote-Client auf die
Postfächer, sowie cyradm lokal - alles lief zur
Zufriedenheit (aber nur mit dem FQDN als Realm,
dazu am Ende noch eine Nebenfrage).

Dann wollte ich Postfix und Cyrus IMAP so um-
konfigurieren, dass "/etc/postfix/sasl_passwd.db"
verwendet wird:


main.cf:
---
alias_maps = hash:/etc/postfix/aliases
# Symlinks in /etc zu "postfix/aliases" und
# "postfix/aliases.db" sind auch vorhanden
alias_database = $alias_maps
local_recipient_maps = hash:/etc/postfix/sasl_passwd,
  $alias_maps
---
(postconf -n sowie master.cf ganz am Ende)


/etc/imapd.conf:
---
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_sasldb_path: /etc/postfix/sasl_passwd.db

# hiermit geht wenigstens cyradm:
# sasl_sasldb_path: /etc/sasldb2.SAV

sasl_mech_list: plain login
sasl_log_level: 7

syslog_prefix: Cyrus
admin: cyradmin
reject8bit: no
munge8bit: no
username_tolower: yes
---

(in "/etc/sasl2/smtpd.conf" analog:)
---
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /etc/postfix/sasl_passwd.db
mech_list: plain login
log_level: 7
---
(aber das ist IMHO hierfür noch irrelevant)

Die Rechte von "/etc/postfix/sasl_passwd" sind
auf root:mail/640 gesetzt. In der Gruppe mail
sind die User postfix, cyrus sowie mail.

Ohne diese Rechte hat sich der imapd beschwert,
dass er nicht auf die "sasl_passwd.db" zugreifen kann.
Ergo hat er begriffen, dass er nicht mehr mit
der "/etc/sasldb2" rummachen soll.

Und in "/etc/postfix/sasl_passwd" sind jeweils
die Accounts als

user     user:passwd
user at hostname user:passwd
user at hostname.domain.tld user:passwd
user at mail.domain.tld user:passwd

usw. eingepflegt, d. h. alle möglicherweise in
Frage kommenden Realms.

Mit dieser Konfiguration hat Local Delivery noch
prima hingehauen (SMTP per telnet von localhost).

Nur klappt jetzt das Login vom IMAP-Client (Thun-
derbird mit und ohne SSL) beim Cyrus nicht mehr.

Im Log steht:
---
Cyrus/imaps: starttls: TLSv1 with cipher .. no authentication
Cyrus/imaps: badlogin: clienthost.domain.tld [IP] login
   [SASL(-13): user not found: checkpass failed]
Cyrus/imaps: badlogin: clienthost.domain.tld [IP] plaintext
   <user> SASL(-13): user not found: checkpass failed
---

Ausserdem fällt auf, dass ein Aufruf von

$ sasldblistusers2 -f /etc/postfix/sasl_passwd.db

folgenden Fehler ins Syslog schreibt:
---
sasldblistusers2: Bad key in _sasldb_parse_key
syslog-ng: last message repeated 159906 times
---

Sobald ich in "/etc/imapd.conf" wieder auf

sasl_sasldb_path: /etc/sasldb2.SAV

zurückschalte, geht wenigstens das Login
von cyradm, und mit einem passenden Usereintrag
per saslpasswd2 auch das Remote-Login per SSL
in die entsprechende Mailbox.

Sieht so aus, als wenn saslauthd/auxprop nicht mit der
von Postfix/postmap generierten .db zusammen mag.
Eigentlich sollte die doch ein zur "/etc/sasldb2" äqui-
valentes .db-File darstellen?!

Muss ich diese Map irgendwie anders aufbauen?

Wie man Postfix überredet, "/etc/sasldb2" zu verwenden,
ist mir leider im Moment nicht klar (Symlink geht auch
nicht) und zwei physisch getrennte Tabellen zu haben, ist
ja wohl indiskutabel.

Interessehalber habe ich noch mal

$ file /etc/sasldb2.SAV

und

$ file /etc/postfix/sasl_passwd.db

verglichen. Beides liefert

Berkeley DB (Hash, version 8, native byte-order)

und

$/etc/postfix # postmap -s sasl_passwd

liest auch brav alle Einträge aus.

Nebenfrage: weil mir dabei nicht ganz klar ist,
ob sich die Realms nur nach der Vorgabe in der
.db oder auch nach dem tatsächlichen Hostnamen
oder anderen Fakten (IMAP-Client) richten, oder ob
und wie man ggf. auch einen leeren Realm verwenden
könnte, und weil der Server bei Umstellung auf Pro-
duktionsbetrieb einen anderen Namen bekommt, habe
ich jeweils mehrere User/Realms nach diesem Schema
eingepflegt:

cyradmin at hostname
cyradmin at hostname.domain.tld
cyradmin at domain.tld
cyradmin at mail.domain.tld

usw. - was muss man tun, damit man ggf. nur einen
Eintrag pro Account braucht, auch wenn der Hostname
sich mal ändert? Gibt es eine Direktive für Postfix
analog zu "loginrealm" in "imapd.conf"?

Für jede Hilfe dankbar

Olaf Lautenschläger

Anhang:

$ postconf -n:
---
2bounce_notice_recipient = postmaster
alias_database = $alias_maps
alias_maps = hash:/etc/postfix/aliases
biff = no
bounce_notice_recipient = mail-errors
bounce_size_limit = 4095
canonical_maps = hash:/etc/postfix/canonical
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
delay_notice_recipient = mail-errors
delay_warning_time = 4h
disable_dns_lookups = no
disable_mime_output_conversion = no
error_notice_recipient = mail-errors
header_checks = regexp:/etc/postfix/header_checks
html_directory = /usr/share/doc/packages/postfix/html
in_flow_delay = 1s
inet_interfaces = 192.168.xxx.yyy, 127.0.0.1
inet_protocols = ipv4
local_recipient_maps = hash:/etc/postfix/sasl_passwd, $alias_maps
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
masquerade_classes = envelope_sender, envelope_recipient, header_recipient
masquerade_domains = !somehost.domain.tld  !anotherhost.domain.tld
   !newmail.intranet.domain.tld  !mail.intranet.domain.tld  domain.tld
masquerade_exceptions = root, mailer-daemon, postmaster, mail-errors
message_size_limit = 20480000
mydestination = hash:/etc/postfix/mydestinations, $myhostname, $mydomain,
   localhost
mydomain = intranet.domain.tld
myhostname = newmail.intranet.domain.tld
mynetworks = 127.0.0.0/8, 192.168.xxx.0/24, noch.ein.netz.werk/26
mynetworks_style = subnet
newaliases_path = /usr/bin/newaliases
notify_classes = resource, software, 2bounce, delay
propagate_unmatched_extensions = canonical, virtual, alias
proxy_interfaces = mail.domain.tld
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/packages/postfix/README_FILES
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
recipient_delimiter = +
relayhost = mail.intranet.domain.tld
relocated_maps = hash:/etc/postfix/relocated
sample_directory = /usr/share/doc/packages/postfix/samples
sender_canonical_maps = hash:/etc/postfix/sender_canonical
sendmail_path = /usr/sbin/sendmail
setgid_group = maildrop
show_user_unknown_table_name = yes
smtp_sasl_auth_enable = no
smtp_use_tls = no
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

smtpd_client_restrictions = permit_mynetworks, check_client_access
   hash:/etc/postfix/access,
   reject_rbl_client ix.dnsbl.manitu.net,
   reject_rbl_client sbl-xbl.spamhaus.org,
   reject_unauth_pipelining

smtpd_delay_reject = yes
smtpd_etrn_restrictions = permit_mynetworks, reject
smtpd_hard_error_limit = 3
smtpd_helo_required = yes

smtpd_helo_restrictions = permit_mynetworks,
   check_helo_access hash:/etc/postfix/helo_access,
   reject_invalid_helo_hostname,
   reject_unauth_pipelining

smtpd_recipient_restrictions = permit_mynetworks,
   reject_unauth_destination,
   reject_non_fqdn_recipient,
   reject_unknown_recipient_domain,
   check_recipient_access hash:/etc/postfix/rcpt_access,
   reject_unauth_pipelining

smtpd_sasl_auth_enable = no
smtpd_sasl_local_domain =
smtpd_sasl_path = smtpd

smtpd_sender_restrictions = permit_mynetworks,
   check_sender_access hash:/etc/postfix/sender_access,
   reject_non_fqdn_sender,
   reject_unknown_sender_domain,
   reject_unauth_pipelining

smtpd_tls_CAfile = .ssl/cacert.pem
smtpd_tls_cert_file = .ssl/newmail.intranet.domain.tld.pem
smtpd_use_tls = no
soft_bounce = yes
strict_8bitmime = no
strict_rfc821_envelopes = yes
transport_maps = hash:/etc/postfix/transport
unknown_address_reject_code = 554
unknown_client_reject_code = 450
unknown_hostname_reject_code = 450
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
---

###
###


"/etc/postfix/master.cf":
---
smtp      inet  n       -       n       -       -       smtpd
 -o content_filter=amavisfeed:[127.0.0.1]:10024

pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap

smtp      unix  -       -       n       -       -       smtp
 -o content_filter=amavisfeed:[127.0.0.1]:10024
 -o smtp_generic_maps=pcre:/etc/postfix/rewrite_outgoing.pcre

# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
 -o fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache   unix - - n - 1 scache

# an smtp daemon for re-injection from amavisd:
localhost:10025
   inet n - n - - smtpd
    -o content_filter=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o smtpd_restriction_classes=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,
        no_unknown_recipient_checks, no_milters
    -o local_header_rewrite_cients=

# Interfaces to non-Postfix software. Be sure to examine the manual
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus   unix - n n - - pipe
  user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension}
  ${user}
uucp   unix - n n - - pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail
  ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop
  $recipient
procmail  unix  -       n       n       -       -       pipe
  flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender}
  ${recipient}
retry     unix  -       -       n       -       -       error

# for delivery to amavisd (content_filter)
# (see <doc>/packages/amavisd-new/README_FILES/README.postfix.html):
amavisfeed unix - - n - 2 lmtp
    -o lmtp_data_done_timeout=1200
    -o lmtp_send_xforward_command=yes
    -o disable_dns_lookups=no
    -o max_use=20
---

(ggf. sorry für's zweimalige Senden dieser Mail an die Liste,
aber beim ersten Mal hatte ich einen falschen Absender -
aber der sollte ja eigentlich gar nicht zur Liste durchgelassen
werden)

--
ANOVA Multimedia Studios GmbH

fon: (+49) (0) 381 / 40 59 - 550
fax: (+49) (0) 381 / 40 59 - 551
web: www.anova.de
corporate e-mail: info at anova.de
_______________________________________

ANOVA Multimedia Studios GmbH

Geschaeftsfuehrer:
Prof. Dr. Hansgeorg Meissner,
Michael Kaeding,
Dr. Volker Gries

Firmensitz:
Joachim-Jungius-Strasse 10,
D-18059 Rostock / Germany

Registergericht:
Amtsgericht Rostock

Handelsregisternummer:
HRB 2788

UST-IdNummer:
DE 811577650

(footer size due to legal demands applying under german law)




Mehr Informationen über die Mailingliste Postfixbuch-users