AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 841375
Accepted
William Seligman
William Seligman
Asked: 2017-03-30 09:02:52 +0800 CST2017-03-30 09:02:52 +0800 CST 2017-03-30 09:02:52 +0800 CST

安装 NFS 的 /var/spool/mail 用于 dovecot 和 procmail 的权限问题

  • 772

我的邮件服务器设置工作了多年。最近我开始遇到以下问题:

邮件设置:sendmail+dovecot+procmail

主机文件服务器:CentOS 6.8,NFS 将邮件目录导出到...

邮件服务器:CentOS 7.3,通过 libvirtd/qemu 作为来宾 VM 在主机上运行,​​NFS 从主机挂载 /var/spool/mail。

症状:dovecot 和 procmail 都发出了错误(详情如下),似乎表明它们没有写入 /var/spool/mail 的权限。但是,/var/spool/mail 在 NFS 文件服务器和邮件 NFS 客户端上都具有我知道如何授予的最通用权限。

在邮件服务器(NFS 客户端)上:

 $ ls -lhd /var/spool/mail
 drwxrwxrwt 5 root mail 6.8M Mar 29 12:37 /var/spool/mail

在邮件服务器:/etc/fstab 中:

 filehost:/mail/inbox      /var/spool/mail         nfs     defaults        0 0

在 NFS 主机上:

 $ ls -lhd /mail/inbox
 drwxrwxrwt. 5 root mail 6.8M Mar 29 12:41 /mail/inbox

在文件主机:/etc/exports 中:

 /mail/inbox          mailserver(rw,no_root_squash,async,nohide)

两个系统都没有运行 SELinux 或 iptables(我依赖于我们网站的防火墙)。

我看到的东西种类:

  • 名称类似于 BOGUS.normaluser.hex-string 的文件。对应的日志信息是

    3 月 29 日 12:14:34 邮件服务器 procmail[20922]:将伪造的“/var/spool/mail/normaluser.lock”重命名为“/var/spool/mail/BOGUS.normaluser.xGAs”

    这可能非常烦人,因为有时不仅锁定文件被声明为虚假,而且普通用户的收件箱也是如此。从普通用户的角度来看,他们的收件箱在他们阅读邮件时消失了。

  • 名称以下划线开头的文件,例如 _2-E,eu92YB.mailserver.domain。

    没有相应的日志消息。这些文件的内容(总是 1 字节或 31-33 字节)表明这些是锁定文件。我昨天看到的一个网页描述了有人使用 strace 来识别 procmail 正在编写这些文件,但我不知道如何使用 strace 为自己确认这一点(我今天找不到该页面)。

    当我列出文件时,我看到它们是 chmod 400,这可能是它们没有被删除的原因:

-r-------- 1 个普通用户邮件 1 Mar 29 12:30 _uZF%kE-2YB.mailserver.domain
-r-------- 1 个普通用户邮件 1 Mar 29 12:30 _uZF+kE-2YB.mailserver.domain
-r-------- 1 个普通用户邮件 1 Mar 29 12:31 _uZF,kF-2YB.mailserver.domain
-r-------- 1 个普通用户邮件 1 Mar 29 12:31 _uZF.kF-2YB.mailserver.domain
-r-------- 1 个普通用户邮件 1 Mar 29 12:31 _uZF+kF-2YB.mailserver.domain
  • 不会消失的锁文件。典型的邮件日志条目:
3 月 29 日 12:31:01 mailserver dovecot: imap(normaluser): Error: unlink(/var/spool/mail/normaluser.lock) failed: Operation not allowed

3 月 29 日 12:31:01 mailserver dovecot: imap(normaluser): Error: file_dotlock_create() failed with mbox file /var/spool/mail/normaluser: Operation not allowed

对于用户而言,不会消失的锁定文件意味着他们所有的邮件处理都会停止,直到我手动删除锁定文件。权限看起来很正常:

-rw------- 1 normaluser theirgroup 33 Mar 29 12:30 normaluser.lock

我根据 dovecot wiki 使用了 dovecot 选项,希望我在某个地方犯了错误。当前的相关值为:

 mmap_disable = yes
 dotlock_use_excl = yes
 mail_fsync = optimized
 mail_nfs_storage = no
 mail_nfs_index = no
 mail_privileged_group=mail

设置 mail_nfs_storage=yes 似乎没有任何改变,因为该参数(根据 dovecot wiki)与通过 NFS 访问同一目录的多个邮件服务器有关,这里不是这种情况。

我用谷歌搜索和摆弄,我无法找到问题所在。我正在询问我忽略的任何内容,或者关于我可以运行的其他诊断的建议。

之后:

我越来越接近解决方案。在客户端邮件服务器上:

 $ cd /var/spool/mail
 $ sudo -u normaluser touch test
 $ sudo -u normaluser rm test

没问题。

 $ sudo -u dovenull touch test
 $ sudo -u dovenull rm test
 rm: cannot remove ‘test’: Operation not permitted
 $ ls -lh test
 -rw-r--r-- 1 nobody nobody 0 Mar 31 12:03 test

啊哈!不允许 dovenull 帐户在 NFS 导入的目录中执行任何操作。我尝试向 NFS 服务器添加一个 dovenull 帐户(具有相同的 uid/gid),但这并没有解决问题:

 $ sudo -u dovenull rm test
 rm: cannot remove ‘test’: Operation not permitted
 $ ls -lh test
 -rw-r--r-- 1 dovenull dovenull 0 Mar 31 12:03 test

这感觉像是一个 idmap 问题。以下是客户端和服务器上 idmap.conf 中唯一未注释的行:

[General]
Domain = mydomain.com
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
[Translation]
Method = nsswitch

我很近……我能感觉到……

再后来:

我能感觉到我想要的一切,但这并不意味着我有答案。我得到了能够在 /var/spool/mail 中创建和删除的 dovenull 帐户(这与仔细查看 /etc/nssswitch.conf 并意识到我必须重新启动 NIS 有关),但这并没有解决我的问题问题。dovenull 帐户不写入 /var/spool/mail。

我使用了auditctl:

auditctl -w /var/spool/mail -p war -k mail-inbox
ausearch -k mail-inbox > mail-inbox.txt

并验证额外的 .lock 文件和 BOGUS 文件是由 dovecot 创建的,而“_”下划线文件是由 procmail 创建的。除非有人想看,否则我不会费心发布审计日志;他们显示的是正在使用正确的权限(uid、gid、euid 等)创建文件,并且即使使用相同的权限进行删除调用,删除也不成功。

那么什么可能导致文件被创建,但无法被删除呢?

centos6
  • 1 1 个回答
  • 1141 Views

1 个回答

  • Voted
  1. Best Answer
    William Seligman
    2017-04-04T08:25:40+08:002017-04-04T08:25:40+08:00

    我设法解决了这个问题,尽管它揭示了另一个(不太重要的)问题。

    线索是偶尔,当我在 NFSv4 客户端上列出 /var/spool/mail 时,我会看到如下内容:

    -r-------- 1 4294967294    mail 1 Mar 29 12:30 _uZF%kE-2YB.mailserver.domain
    -r-------- 1 4294967294    mail 1 Mar 29 12:30 _uZF+kE-2YB.mailserver.domain
    -rw------- 1 normaluser    mail 1 Mar 29 12:31 normaluser
    

    然后当我之后立即执行“ls -lh”时,我会看到:

    -r-------- 1 normaluser    mail 1 Mar 29 12:30 _uZF%kE-2YB.mailserver.domain
    -r-------- 1 normaluser    mail 1 Mar 29 12:30 _uZF+kE-2YB.mailserver.domain
    -rw------- 1 normaluser    mail 1 Mar 29 12:31 normaluser
    

    该数字 4294967294 在 32 位无符号整数中为 -2,通常是分配给 nfsnobody 帐户的 UID。这向我表明可能存在暂时的 idmapd 问题。这与我观察到的一致:有时邮件服务器会表现得好像它没有通过 NFS 获得 rwx 权限,即使它刚刚创建了该文件。由于只有 NFSv4 使用 idmapd(至少对于 NFS 版本),我通过更改邮件服务器 NFS 客户端上的 /etc/fstab 中的一行来切换到 NFSv3:

    filehost:/mail/inbox      /var/spool/mail         nfs     defaults,vers=3   0 0
    

    然后我重新启动了邮件服务器,瞧!NFS 问题消失了。作为记录,我在诊断问题时多次重启了邮件服务器,所以这不是“通过简单重启修复”的情况。

    当然,这就引出了idmapd为什么有问题的问题。任何好奇的人都可以看看我上面的 idmapd.conf 配置。但这是一个单独的问题,对我来说优先级要低得多。有一天我可能会在 serverfault 上发布这个问题。

    之后:

    一个快速的网络搜索给了我这个:Partially wrong uid mapping with nfs4/idmapd/ldap-auth

    在内核 3.13 中进行了修复,但当前的 CentOS7 是内核 3.10。我不知道 Redhat 是否已将修复程序反向移植到他们当前的 CentOS7 内核中。

    这为我提供了导致问题的线索:我不断地将新的活跃用户添加到我们的集群环境中。在某些时候,我一定是在 /var/spool/mail 中触发了 idmapd 错误的用户数量。

    • 1

相关问题

  • 如何将“memcached”安装到 php 5.6?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve