我最近安装了一个新的 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
用户所在的组由登录过程授予。当守护程序在启动后切换到某个用户和组时,它通常仅切换到该用户和组(后跟setgid
)setuid
,并且不会采用/etc/passwd
(主要组)和/etc/group
(补充组)隐含的任何其他组。我没有检查过 exim 是否有这种行为,但如果没有,那就很不寻常。
grep '^Groups:' /proc/1234/status
您可以通过运行where 1234
is 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