[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