【发布时间】:2012-01-21 20:52:38
【问题描述】:
我有一个 CentOS 5.7 linux 服务器并使用 php5.3.x。
在 pfSense 系统上,您可以使用 php 网页重新启动需要 root 权限的服务。
我正在尝试做类似的事情,我已经编写了一些 php 代码来执行 shell 命令。比如重启sshd服务:
<?php
exec('/sbin/service sshd restart');
?>
我尝试通过 exec 函数执行该命令,但它需要 root 权限,但我们有 apache 用户权限。
我遇到了一些解决方案:
- “以 root 用户运行 apache” 真的不安全。我不想那样做。
- “apache ALL=NOPASSWD:/sbin/service 到 /etc/sudoers” 我试过了,但还是有问题。
还有其他解决方案吗? 感谢您的回答。
现在.. 这很有趣。我尝试了@refp post,它在我的本地ubuntu服务器上工作。但是当我在我的 cenOS vps 服务器上尝试相同时。它不起作用。那是 apache 的错误日志“rm: cannot remove `/var/lock/subsys/vsftpd': Permission denied”
【问题讨论】:
-
还有,您尝试过
sudoers解决方案吗?你有什么问题?您是否在exec()命令中添加了sudo?或者error.log、syslog 或/var/log/auth.log中的任何有价值的东西? -
tail /var/log/httpd/error.log "sudo: 抱歉,你必须有一个 tty 才能运行 sudo"
-
Run a linux system command as a superuser, using a python script 的可能重复项(查看最后一个答案)
-
感谢 mario 的回答,但仍有问题。
"ALL = NOPASSWD: /etc/init.d/postfix" 我已经测试了类似 "apache ALL=NOPASSWD: /sbin/service" 的方法。 . .我不明白为什么 sudoers 文件不使用该行向 apache 用户授予权限。 -
您可以限制 sudo 执行(为什么
ALL作为主机规范?localhost应该足够了!)。此外,如果您的sudoers有它,请删除Defaults require_tty,因为 Apache 不会在附加 tty 的情况下运行。
标签: php apache permissions root