我在 fedora33 上使用 amavisd,并尝试更改它创建的套接字上的文件权限,以便 nagios 和 nrpe 可以读取 amavis 组中的文件。
当前的文件权限如下:
# ls -l /run/amavisd/amavisd.sock
srwxr-x--- 1 amavis amavis 0 Nov 23 20:29 /run/amavisd/amavisd.sock
我正在执行“systemctl edit amavisd.service”来创建一个包含以下内容的 override.conf 文件:
[Service]
LimitNOFILE=5000
UMask=0007
ExecStartPost=/usr/bin/su - amavis -c \'/usr/bin/chmod 770 /run/amavisd/amavisd.sock\'
amavis 用户的 shell 是 /bin/bash。保存并运行“systemctl daemon-reload”然后重新启动后,它会失败,没有任何原因提示。我也尝试过让它执行一个脚本,但同样失败了。
[Service]
LimitNOFILE=5000
UMask=0007
ExecStartPost=/bin/sh -c /etc/amavisd/chmod-sock.sh
为什么 UMask 参数被完全忽略? amavisd.service 启动时会处理 /etc/bashrc 吗?
以下是脚本的内容。
# cat /etc/amavisd/chmod-sock.sh
#!/bin/bash
sleep 1
/usr/bin/chmod 770 /run/amavisd/amavisd.sock
“systemctl status amavisd.service”和“journalctl -xe”没有提供有用的信息。
更新:我在 /var/log/messages 中发现了一些我之前一定错过的信息。看来 amavis 正在不断重启,因为“su”失败了:
su: (to amavis) root on none
su[73476]: su: cannot open session: Permission denied
systemd[1]: amavisd.service: Control process exited, code=exited, status=1/FAILURE
此链接讨论对 /etc/pam.d/su 进行修改以禁用某种身份验证保护。
https://unix.stackexchange.com/questions/171097/unable-to-su-into-an-account-could-not-open-session
此 systemd 链接表示需要转义单引号,但此处失败。删除反斜杠后,su 可以正常运行,amavisd 最终可以启动。 https://www.freedesktop.org/software/systemd/man/systemd.service.html
su[74032]: 770: -c: line 0: unexpected EOF while looking for matching `''
su[74032]: 770: -c: line 1: syntax error: unexpected end of file
所以我现在的问题是:
- 为什么我的 override.conf 中忽略了“UMask 0007”?
- 在创建 amavisd 套接字后,更改其权限的正确方法是什么,以便同一组中的其他人可以从中读取?
- 修改 PAM 安全性对 su 有何影响?
- 如何从 systemd override.conf 文件运行 shell 脚本?