Exim4 崩溃日志:“无法获取 uid 1001 的用户名”

Exim4 崩溃日志:“无法获取 uid 1001 的用户名”

我有一个路由器,它将邮件发送到某些域并放入该域的 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.confservice 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 条目。我建议您的选择是:

  1. 从队列中删除这些条目,或者......
  2. 停止 exim。手动编辑这些文件,更改“uid gid”以匹配您的新 uid 和 gid。启动 exim 并查看它是否正确交付。

传输配置中也可能存在一些硬编码的 uid/gid?Debian 中的实际 exim 配置文件是从配置设置自动生成的,其位置可以用 显示exim -bV。最后一行将是配置文件的位置。进行一些 grepping 并查看该文件以查看是否有任何硬编码的内容。

相关内容