如果我postfix check
在我的 debian squeeze 服务器上运行,我会得到以下信息:
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_nisplus-2.11.3.so and /lib/libnss_nisplus-2.11.3.so differ
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_files-2.11.3.so and /lib/libnss_files-2.11.3.so differ
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_compat-2.11.3.so and /lib/libnss_compat-2.11.3.so differ
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_hesiod-2.11.3.so and /lib/libnss_hesiod-2.11.3.so differ
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_nis-2.11.3.so and /lib/libnss_nis-2.11.3.so differ
postfix/postfix-script: warning: /var/spool/postfix/lib/libnss_dns-2.11.3.so and /lib/libnss_dns-2.11.3.so differ
有人知道解决这个问题的办法吗?
答案1
/var/spool/postfix
是一个 chroot,postfix 可以选择性地在其中运行,其理念是,如果 postfix 以某种方式受到攻击,攻击者唯一可以访问的就是您系统的这个小子集,而不是整个系统。此处的警告是,中的文件/var/spool/postfix
不再与它们从中复制的常规系统中的文件相匹配。您可以验证中的文件是否/lib
预计会发生变化(例如,libnss 最近是否升级?),然后考虑将这些版本复制到 chroot 中/var/spool/postfix/
,以便 chroot 也能获得此升级。
答案2
现在(至少在 Ubuntu 服务器上),你可以通过运行以下命令重启 Postfix 服务来解决此问题:
sudo systemctl restart postfix
或者
sudo service postfix restart
(两者在现代 Linux 系统上执行的操作完全相同 - 我更喜欢该service
命令,因为它在 systemd 时代之前就已经起作用了,但我很确定 systemd 变体systemctl
是官方推荐的。)
这是因为 Postfixchroot
在服务启动时创建了环境,但在应用安全更新时不会跟踪已修改的文件。因此,当您运行 Postfix 足够长的时间并安装了安全更新而无需重新启动整个系统(这通常不是必需的)时,这些文件可能会有所不同。
中的文件/var/spool/...
是上次启动 Postfix 时安装在系统中的历史版本,启动脚本会将这些文件复制到chroot
Postfix 启动期间构建的版本中。运行 时postfix
,它会检查 中的文件是否/var/spool/...
与系统中的文件匹配。如果在 Postfix 运行时更新了包含这些库的软件包,则此检查会失败。如果库包含针对 Postfix 所用功能的安全补丁,则您应该已经重新启动 Postfix,否则安装安全补丁无效。如果更改的库版本没有针对 Postfix 实际使用的功能进行修复,则可以放心地忽略该警告。
如果您在安装安全更新后总是重新启动所有受影响的服务,那么您很少会遇到这种情况。
答案3
根据 stew 的回答,为了节省大家的打字时间,以 root 身份运行:
cd /lib; cp libnss_files-2.11.3.so libnss_nis-2.11.3.so libnss_dns-2.11.3.so libnss_compat-2.11.3.so libnss_nisplus-2.11.3.so libnss_hesiod-2.11.3.so /var/spool/postfix/lib/
答案4
我的评论不是对这个问题的回答,但我认为它仍然相关,主要是因为我认为这是最初发布的问题的另一个症状。我花了几个小时在网上搜索为什么会出现这个错误:
收件人地址被拒绝:本地收件人表中的用户未知
每当我尝试向我的新用户帐户发送电子邮件时,都会出现这种情况。事实证明,根本问题是 Postfix 使用了 chroot。我所要做的就是在创建新用户帐户后重新启动 Postfix 服务,然后 chroot 的 passwd 副本就会更新,错误就会停止。在找到这篇文章之前,我发现的一切都是关于域设置(在 DNS 或邮件服务器主机中)、mail.cf 设置问题或需要执行设置虚拟邮箱之类的操作。但是,当我找到这篇文章时,我发现 Postfix 有一个 chroot,当我检查它时,果然,我的 /etc/passwd 文件有新帐户,而 chroot passwd 文件没有。
因此,我只想在这里添加这条说明,以便其他邮件被拒绝并且不知道 Postfix 使用 chroot 的人能够理解。