postfix 查找密码信息时出错(catch-all)

postfix 查找密码信息时出错(catch-all)

在 postfix 中,我尝试为未知的本地帐户设置一个万能地址。任何可以发送给本地用户的邮件都应发送到他们的本地邮箱(并尊重 中的任何别名/etc/aliases,包括本地别名以及将邮件转发到外部的别名)。任何不存在/etc/aliases/etc/passwd应该重定向到 的用户的邮件root。对于 ,root我已经设置了一个别名以/etc/aliases重定向到单独的邮件地址[email protected](不在本地服务器上)。

为了实现这一目标我已经设定main.cf

luser_relay = root
local_recipient_maps =

我尝试过的其他设置luser_relay包括:

[email protected]
root@localhost
[email protected]
root@--server hostname--
root@$local
--other user with no alias--
--other user with no alias--@localhost
--other user with no [email protected]
--other user with no alias--@--server hostname--
--other user with no alias--@$local

但是我一直收到用户查找错误(当向不存在的测试用户发送邮件时mail -s test test):

Jan  4 14:08:03 test postfix/pickup[28595]: A4E3382454: uid=--uid-- from=<--local user-->
Jan  4 14:08:03 test postfix/cleanup[29192]: A4E3382454: message-id=<20150104140803.A4E3382454@--server hostname-->
Jan  4 14:08:03 test postfix/qmgr[28596]: A4E3382454: from=<--local user--@--server hostname-->, size=456, nrcpt=1 (queue active)
Jan  4 14:08:03 test postfix/local[29194]: warning: error looking up passwd info for test: No such file or directory
Jan  4 14:08:03 test postfix/local[29194]: A4E3382454: to=<test@--server hostname-->, orig_to=<test>, relay=local, delay=0.02, delays=0.01/0/0/0, dsn=4.0.0, status=deferred (user lookup error)

如果有一个解决方案,其中设置了 catch-all 地址,[email protected]那很好,但我希望它被重定向到root并遵守,/etc/aliaseses以便当我需要更改时,[email protected]我只需要在里面进行更改/etc/aliases,而不必在另一个 postfix 配置文件中执行此操作。

我的 postfix 版本是 2.10.1(CentOS 7),除了上面的之外luser_relaylocal_recipient_maps我还添加了recipient_bcc_mapstransport_maps

也许我的交通地图会干扰luser_relay

/.*@localhost(\.localdomain)?$/  local:
/.*@--the server's hostname--/   local:
/.*@--company domain--           relay:
/.*/                             discard:

传输映射的目的是传递任何本地邮件,允许将邮件发送到公司域,但丢弃任何其他邮件。设置recipient_bcc_maps为将传输映射中丢弃的所有邮件密件抄送到调试地址。此外,rootin的别名/etc/aliases属于--other domain to not discard--。由于这涉及开发服务器,我希望任何本地邮件都以此方式传递,并传递任何发往公司域的邮件,但阻止任何其他邮件发送到外界。

输出postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
local_recipient_maps =
luser_relay = root
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
recipient_bcc_maps = pcre:/etc/postfix/recipient_bcc
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
transport_maps = pcre:/etc/postfix/transport
unknown_local_recipient_reject_code = 550

谁能发现我的配置中的错误?

谢谢你!

答案1

花了很长时间,但我终于能够找出问题所在。问题出在 NSS 配置中。我的 Rackspace Cloud Server默认安装了/etc/nsswitch.confyum 包,并且有默认条目和其他要使用的文件。sssd-client/etc/nsswitch.confpasswdsss

基本上,如果您使用默认设置/etc/nsswitch.conf并安装sssd-client软件包,No such file or directory问题将出现在 CentOS 7 上。这是因为它试图寻找/var/lib/sss/mc/passwd(最终在的帮助下解决了这个问题,strace这也是一个很大的麻烦,无法正常工作)。但是,当您没有设置时,该文件不存在sssd。我通过从 CentOS 网站下载 CentOS 7 DVD 并在 VM 中安装最小安装来测试这一点。接下来,我将其添加luser_relay到 Postfix 配置中,它运行良好,然后我所做的就是安装sssd-client,它“神奇地”停止工作。

修复1:sss从......中去除/etc/nsswitch.conf

你会看到如下一行:

passwd: files sss

将其更改为:

passwd: files

默认情况下,sss也为、和启用shadow,您也应该将其删除,以防止在尝试访问它们时出现问题。groupservicesnetgrouplibnss

修复2:移除sssd-client包装。

我猜想删除sssd-client软件包也能解决问题,因为没有客户端libnss会忽略sss中的指令/etc/nsswitch.conf。如果你不需要它,你也可以用 将其删除yum remove sssd-client

相关内容