【问题标题】:run killall command in php shell_exec function在 php shell_exec 函数中运行 killall 命令
【发布时间】:2013-12-14 07:39:40
【问题描述】:

我有一个可用的 shell 脚本,它使用 killall 来杀死程序的所有实例,如下所示:

杀死所有ABC

现在,我编写了一个 php 网页来使用 shell_exec 函数执行这个脚本:

shell_exec('sh ./myscript.sh');

问题是我的 php 代码在命令行中使用“php myscript.php”可以正常工作,但不能在浏览器中工作!但是,我知道命令行中的用户是“root”,而 php 中的用户是“apache”(我用 'whoami' 得到这个)。 linux 发行版是使用 SElinux 的 Centos 6。我把selinux的状态改成permissive了。

我检查过的内容:

  • PHP 安全模式已关闭
  • shell_exec() 不存在于 php.ini 的 disable_functions 中

有没有办法使用 php 使用 kill 命令运行脚本?

感谢您的帮助。

【问题讨论】:

  • 任何 PHP 错误(检查 error_reportingdisplay_errors)?执行命令的退出代码是什么(使用exec() 查找)?你有kill目标进程的权限吗?
  • 无退出码,无报错! exec() 也有类似的输出,是的,我有杀死的权限,但是“apache”没有!
  • 总有一个退出代码!成功时它是 0,非零是错误代码!当你没有权限时,你不能!当你从 apache 运行它时,你就是 apache!
  • 是的,但问题是如何使用 apache 完成这项工作?!

标签: php centos shell-exec


【解决方案1】:

您要么必须以 root 身份运行 apache(不安全),或者更安全的是,您必须以 'apache' 身份运行您尝试杀死的命令,或者配置您的 sudoers 文件以授予 apache 对 killall 命令的权限:

# vim /etc/sudoers
apache localhost=(ALL) NOPASSWD:/usr/bin/killall

然后将 myscript.sh 更改为 sudo killall abc

【讨论】:

  • 感谢回复,我在/etc/sudoers文件中添加了这一行,但是问题没有解决...
  • 好的,试试#su apache,然后输入$ sudo killall abc
  • 在 sudoers 中应该是 /usr/bin/killall
  • 当我在命令行中输入# su apache 时,输出为“此帐户当前不可用”!
  • 你确定 apache 是以 apache 用户身份运行的吗?请检查 /etc/passwd 文件中的内容以及其中列出的哪个用户运行 apache,例如在我的机器上该用户是“www-data”,或者您可以执行 ps -ef | grep apache,然后粘贴结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2011-06-29
  • 1970-01-01
  • 2013-01-01
  • 2018-05-26
  • 2015-05-15
相关资源
最近更新 更多