我创建了一个新帐户 svchk 并通过 visudo 授予其运行以下命令 /sbin/service postfix status 的权限:
Cmnd_Alias POSTFIXCMDS = /sbin/service postfix status
svchk ALL = NOPASSWD: POSTFIXCMDS
但是当我 su svchk 并运行 /bin/service postfix status 时,出现以下错误:
su svchk
/sbin/service postfix status
master status unknown due to insufficient privileges.
为什么我会收到此消息以及如何正确授予 svchk 权限来检查 postfix 服务的状态?
答案1
要通过运行命令,sudo
您必须在其前面加上sudo
这样的前缀:
sudo /sbin/service postfix status
答案2
我无法找出放置在 visudo 中的正确命令组合,以允许非特权用户检查后缀状态。
检查 /etc/init.d/postfix 脚本,状态命令似乎可能调用一堆其他命令。除此之外,该服务似乎是使用 chroot 启动的,这可能会导致授予我的帐户权限检查服务状态的问题。
相反,我选择以不同的方式检查服务。我在 visudo 中设置了以下内容:
# Allow the unprivileged account svchk run wc, ps, grp so that we can check if postfix is running
Cmnd_Alias POSTFIXCMDS = /usr/bin/wc,/bin/ps,/bin/grep
svchk ALL = NOPASSWD: POSTFIXCMDS
然后从我的健康检查脚本中运行以下命令: ps aux | grep /usr/libexec/postfix/master | grep /usr/libexec/postfix/master | grep /usr/libexec/postfix/master |厕所-l
如果上述命令的结果返回 2(两个进程带有“/usr/libexec/postfix/master”一词,则 postfix 正在运行。如果返回 1,则 postfix 命令未运行。
我对这个解决方案并不太满意,所以如果其他人有更好的方法让实际的服务后缀状态命令作为非特权用户工作,我很乐意听到,我很乐意将您的回复标记为回答。
谢谢布拉德