我有一个运行 Postfix 2.5.1 的 Ubuntu 8.04LTS 系统。在该系统上,SMTP AUTH 运行美好的。内容为
/etc/postfix/sasl/smtpd.conf
:
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN
SASL 相关的属性有:
smtpd_sasl_type = cyrus
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
当我这样做时,sudo sasldblistusers2
我得到:
[email protected]: userPassword
就像我说的,一切在 8.04LTS 系统上运行良好。
但是,我尝试将其迁移到运行 Postfix 2.9.3 的 Ubuntu 12.04LTS 系统,但无法使其正常工作。我做了所有相同的事情,但 postfix 每次都显示身份验证失败。
这不是/etc/sasldb2
文件的问题。我尝试从旧系统导入文件,但没有成功。我使用以下命令创建了一个新文件:
saslpasswd2 -c -u mail.mydomain.com authusername
但这不管用,尽管将要如果我将其复制到旧系统,它就可以在旧系统上工作,这就是我知道文件没有任何问题的方式。
同样,我知道 postfix 正在查看该smtpd.conf
文件。如果我在文件的行中添加更多机制mech_list
,则当我连接到 smtpd 守护程序时,我会看到这些额外的机制被宣传。而当我删除它们时,它们又消失了。所以/etc/postfix/sasl/smtpd.conf
显然正在被使用。
我正在通过使用实际的邮件客户端和在生成令牌后手动与服务器对话来进行测试:
perl -MMIME::Base64 -e 'print encode_base64("\000authusername\000thePassword");'
然后:
openssl s_client -quiet -starttls smtp -connect the.newsystem.com:587
由此产生的对话是:
250 DSN
EHLO example.com
250-the.newsystem.com
250-PIPELINING
250-SIZE 20971520
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN theBase64EncodedToken
535 5.7.8 Error: authentication failed: authentication failure
但如果我连接the.oldsystem.com:587
并做同样的事情,我会得到:
235 2.7.0 Authentication successful
新机器上 saslfinger 的输出是:
# sudoh saslfinger -s
saslfinger - postfix Cyrus sasl configuration Sat Jul 21 00:24:24 EDT 2012
version: 1.0.4
mode: server-side SMTP AUTH
-- basics --
Postfix: 2.9.3
System: Ubuntu 12.04 LTS \n \l
-- smtpd is linked to --
libsasl2.so.2 => /usr/lib/i386-linux-gnu/libsasl2.so.2 (0xb76c5000)
-- active SMTP AUTH and TLS parameters for smtpd --
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = cyrus
smtpd_tls_CAfile = /etc/ssl/certs/MyCA.pem
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/postfix/ssl/server.crt
smtpd_tls_key_file = /etc/postfix/ssl/server.key
smtpd_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
-- listing of /usr/lib/sasl2 --
total 16
drwxr-xr-x 2 root root 4096 Jul 20 23:00 .
drwxr-xr-x 67 root root 8192 Jul 20 21:25 ..
-rw-r--r-- 1 root root 1 May 4 00:17 berkeley_db.txt
-- listing of /etc/postfix/sasl --
total 20
drwxr-xr-x 2 root root 4096 Jul 20 21:29 .
drwxr-xr-x 5 root root 4096 Jul 20 23:58 ..
-rw-r--r-- 1 root root 64 Jul 20 21:29 smtpd.conf
-- content of /etc/postfix/sasl/smtpd.conf --
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN
-- content of /etc/postfix/sasl/smtpd.conf --
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN
-- active services in /etc/postfix/master.cf --
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
[snipping the rest of the services]
-- mechanisms on localhost --
-- end of saslfinger output --
我可能遗漏了什么或做错了什么?据我所知,所有配置都相同,但它无法在新系统上运行。
答案1
赠品在这里:
-- active services in /etc/postfix/master.cf --
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
smtpd
端口上的进程正在submission
chroot 模式下运行(因为该列中有一个,-
这意味着应用默认值(即yes
),因此看不到/etc/sasldb2
。
当我复制/etc/sasldb2
到/var/spool/postfix/etc
身份验证时,它开始正常工作。
答案2
chroot 肯定是原因,但是就我的情况而言,复制/var/spool/postfix/etc
没有用。
所以我刚刚摆脱了 chroot,这对我来说是可行的。
为了做到这一点,您需要编辑 /etc/postfix/master.cf 并找到以下行:
smtp inet n - - - - smtpd
并修改如下:
smtp inet n - n - - smtpd
答案3
将 sasldb2 文件同步到 postfix 的默认 chroot jail 的另一种方法是向其添加硬链接:
ln /etc/sasldb2 /var/spool/postfix/etc/
请注意,符号链接不起作用,因为无法从监狱内部访问符号链接,但硬链接可以。这比简单地复制文件有优势,因为将来的新用户和密码更改将自动同步,甚至无需重新加载 postfix。