守护程序文件访问被拒绝,而它不应该被拒绝

守护程序文件访问被拒绝,而它不应该被拒绝

我最近安装了一个新的 SSL 证书,然后还决定通过降低私钥的可读性来加强安全性。

这导致了 exim 的问题。

证书现在为 640,用户root和组为ssl。该用户Debian-exim属于该组。

我可以从 shell 访问私钥文件:

#sudo -u Debian-exim cat key
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

然而,exim 的日志文件却另有说明:

2012-04-21 00:00:00 <Message-id> unable to open private key file for reading: /.../key
2012-04-21 00:00:00 <Message-id> == some@email <some@email> R=dnslookup T=remote_smtp defer (-1): smtp transport process returned non-zero status 0x0100: exit code 1
2012-04-21 00:00:00 <Message-id> Frozen

使用审计我检查了文件系统访问:

time->Sat Apr 21 00:00:00 2012
type=PATH msg=audit(1335027881.290:6): item=0 name="/.../key" inode=1794200 dev=09:01 mode=0100640 ouid=0 ogid=105 rdev=00:00
type=CWD msg=audit(1335027881.290:6):  cwd="/var/spool/exim4"
type=SYSCALL msg=audit(1335027881.290:6): arch=c000003e syscall=2 success=no exit=-13 a0=16184f8 a1=0 a2=0 a3=0 items=1 ppid=11831 pid=11847 auid=4294967295 uid=100 gid=102 euid=100 suid=100 fsuid=100 egid=102 sgid=102 fsgid=102 tty=pts1 ses=4294967295 comm="exim4" exe="/usr/sbin/exim4" key="sslkey"

这表明它确实失败了(尽管我不知道为什么)。相比之下,尽可能相同的成功调用(文件组更改为 ,Debian-exim而不是ssl

time->Sat Apr 21 00:00:00 2012
type=PATH msg=audit(1335028586.882:34): item=0 name="/.../key" inode=1794200 dev=09:01 mode=0100640 ouid=0 ogid=102 rdev=00:00
type=CWD msg=audit(1335028586.882:34):  cwd="/var/spool/exim4"
type=SYSCALL msg=audit(1335028586.882:34): arch=c000003e syscall=2 success=yes exit=11 a0=24f74f8 a1=0 a2=0 a3=0 items=1 ppid=13958 pid=13961 auid=4294967295 uid=100 gid=102 euid=100 suid=100 fsuid=100 egid=102 sgid=102 fsgid=102 tty=(none) ses=4294967295 comm="exim4" exe="/usr/sbin/exim4" key="sslkey"

我不知道出了什么问题。为什么当文件组为Debian-exim(主要Debian-exim用户组)时,exim 守护程序可以访问“密钥”文件,而当文件组为ssl(次要用户组Debian-exim)时则不能访问?

答案1

用户所在的组由登录过程授予。当守护程序在启动后切换到某个用户和组时,它通常仅切换到该用户和组(后跟setgidsetuid,并且不会采用/etc/passwd(主要组)和/etc/group(补充组)隐含的任何其他组。我没有检查过 exim 是否有这种行为,但如果没有,那就很不寻常。

grep '^Groups:' /proc/1234/status您可以通过运行where 1234is the PID of an exim process来检查 exim 进程正在运行的组。

您需要使密钥文件可供Debian-exim用户或Debian-exim组读取。确保 ACL 已打开,然后添加Debian-exim到密钥文件的 ACL 以及通向该文件的任何非公共目录:

setfacl -m group:Debian-exim:r /path/to/key
setfacl -m group:Debian-exim:x /path/to

相关内容