我需要我的 Web 应用程序重新启动 dansguardian 服务(在 CentOS 上),因此它需要运行“/sbin/service dansguardian restart”我在 /home/topological 中有一个名为 apacherestart.sh 的 shell 脚本,它执行以下操作:
#!/bin/sh
id=`id`
/sbin/service dansguardian restart
r=$?
return $r
运行正常(脚本中的 logger 语句用于测试输出到 syslog,所以我知道它正在运行)为了使其运行,我将其放入 /etc/sudoers 中:
User_Alias APACHE=www
# Cmnd alias specification
Cmnd_Alias HTTPRESTART=/home/topological/apacherestart.sh,/sbin/e-smith/db,/etc/rc7.d/S91dansguardian
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
APACHE ALL=(ALL) NOPASSWD: HTTPRESTART
到目前为止一切顺利。但服务没有重新启动。为了测试这一点,我创建了一个用户 david,并将 /etc/passwd 中的 uid/gid 伪造为与 www 相同:
www:x:102:102:e-smith web server:/home/e-smith:/bin/false
david:x:102:102:David:/home/e-smith/files/users/david:/bin/bash
然后以 david 身份登录并尝试运行 apacherestart.sh。我遇到的问题是:
/etc/rc7.d/S91dansguardian: line 51: /sbin/e-smith/db: Permission denied
即使 S91dansguardian 和 db 在 sudoers 命令列表中。
有任何想法吗?
答案1
对我来说,这看起来不像是 sudo 错误消息——它看起来像是标准权限消息。
/sbin/e-smith/db
如果它是一个脚本,那么它的权限是什么?它的 shebang 行(以及该程序的权限)是什么?
另外,您如何调用该脚本?仅仅因为它在 sudoers 列表中被提及并不意味着它会神奇地变得特别——您实际上需要通过 来调用它sudo
。
答案2
e-smith 脚本是什么?另外,为什么您要用 Cmnd_Alias 来运行这一切,而不是将它们放在 apacherestart.sh 脚本中?
答案3
根据 Joe H. 的回答:
chmod a+rx /sbin/e-smith
chmod o+x /sbin/e-smith/db