Keep on going, never give up.

PHP shell_exec或exec执行权限问题

如果shell_exec没有权限,那么php脚本是不会输出任何内容,不同的系统版本安装apache和php后,默认运行设置可能是不同的,有的可直接使用exec权限,有的则不行,遇此问题要注意首先检查php/apache相关设置,检查步骤如下:

一、查看php的当前运行用户

可通过命令行:

ps -ef | grep php 

或,

lsof -i:80

再或者在php中执行:

echo exec('whoami') 

或,

echo shell_exec("id -a"); 

查看结果可能是nobody,也可能是daemon(下文中的示例),还可能使apache等,系统不同可能不同

二、添加php的root执行权限

方法至少有两种,均可:

  • 一是直接把上文查到的运行用户添加到/etc/sudoers
  • 二是通过添加用户和组,然后再把创建的用户和组添加到/etc/sudoers中

这里只介绍第一种方法,打开/etc/sudoers文件:

vim /etc/sudoers

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
daemon   ALL=(ALL)      NOPASSWD:ALL

这里示例就把上文查到的daemon添加到配置文件中。

然后reboot重启服务器

三、测试exec或shell_exec

php测试脚本:

shell_exec("sudo php -v"); 

注意上文exec中,要添加sudo这个头,否则还是会无输出,当然如果apache当前运行用户本身就有root权限,那么这里默认是不需要sudo的。

另外一个需注意,如果exec默认执行如下:

shell_exec("ls");指令时,默认是会成功的,因为此类指令并不需要root权限,所以,执行ls成功并不代表执行别的指令也会成功。

四、shell_exec还是无法执行?

在Linux命令行下,执行:

tail -n 10 http-2.2.log

查看apache的日志,如出现如下提示:

sudo: sorry, you must have a tty to run sudo

再次到/etc/sudoers下面把下面一句注释掉:

#Defaults requiretty

最后reboot重启服务器

参考资料:

https://unix.stackexchange.com/questions/115054/php-shell-exec-permission-on-linux-ubuntu

https://www.cnblogs.com/awinlei/archive/2013/04/02/2995367.html

如果想创建用户和组,可参考下文:

https://www.cnblogs.com/miaoshiqian/p/4482666.html

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2017 Metsky.com, All rights Reserved.