我有一个路由器,它将邮件发送到某些域并放入该域的 MailDir 中,并使用域:用户映射将文件所有权授予正确的用户。
问题在于,自从更新用户的 uid(需要与其他服务器同步)以来,exim 一直在 panic 日志中抛出错误,提示:
无法获取 uid 1001 的用户名
其中 1001 是其中一个相关用户的旧 uid(新 uid 为 1008)。它还会为 1002(我更改的另一个用户)生成这些错误。
这是路由器
domain_catch_all_transport:
debug_print = "T: domain_catch_all_transport for $local_part@$domain"
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
maildir_format
user = ${lookup{$domain}lsearch{/etc/exim4/civicrm-catchalls}}
group = ${lookup{$domain}lsearch{/etc/exim4/civicrm-catchalls}}
查找文件格式如下:
example.com:usernameone
example.org.uk:usernametwo
您会注意到未指定任何 uid。运行id usernameone
将显示新用户和组。
我尝试过
- 我已经扫描了整个文件系统,查找旧 uid 拥有的任何用户或组,并对其进行了更新。
- 我已经跑
update-exim4.conf
了service restart exim4
- 我已递归地搜索
/etc/exim4
有问题的 uid,1001,但一无所获。 - 我已经检查过 exim 是否能够向相关域传送(以及正确设置用户、组)——一切正常。
我仍然收到这些警告/错误。查看主日志,我发现错误是随机发生的,而不是在处理邮件时发生的(!)例如
2014-03-03 09:00:01 Failed to get user name for uid 1001
2014-03-03 09:00:01 Failed to get user name for uid 1003
2014-03-03 09:10:01 Failed to get user name for uid 1001
2014-03-03 09:11:38 Start queue run: pid=3457
2014-03-03 09:11:38 End queue run: pid=3457
2014-03-03 09:15:01 Failed to get user name for uid 1003
2014-03-03 09:20:01 Failed to get user name for uid 1001
2014-03-03 09:30:01 Failed to get user name for uid 1003
2014-03-03 09:30:01 Failed to get user name for uid 1001
语境
我正在运行带有 Exim4 4.80.7 的 Debian 7 (稳定版/Wheezy)。
答案1
当 exim 将消息排队时,它会将大量额外信息与消息一起存储在队列中。与消息一起存储的内容之一是进程应以之运行的 uid 和 gid。我敢打赌,如果您 grep 邮件队列标头(可能在 /var/spool/exim4/input/*-H 中),您会在某些 *-H 文件的第二行中找到那些残留的 1001 和 1003 条目。我建议您的选择是:
- 从队列中删除这些条目,或者......
- 停止 exim。手动编辑这些文件,更改“uid gid”以匹配您的新 uid 和 gid。启动 exim 并查看它是否正确交付。
传输配置中也可能存在一些硬编码的 uid/gid?Debian 中的实际 exim 配置文件是从配置设置自动生成的,其位置可以用 显示exim -bV
。最后一行将是配置文件的位置。进行一些 grepping 并查看该文件以查看是否有任何硬编码的内容。