LINUX+NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX+NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08相关的知识,希望对你有一定的参考价值。

参考技术A LINUX+NGINX下的PHP shell_exec()函数执行linux命令

环境说明

手头有一台linux的测试服务器,最近因为业务需要,需要通过php访问另一台服务器去执行某些命令。

由于另一台服务器已经对这台服务器开了私钥,所以在终端上是可以直接执行命令而不需要输入密码的。

问题

PHP无法使用exec命令,没有任何返回值。

解决途径

1.php.ini的配置有问题。

由于php是7.0以上的版本,取消了安全模式,所以考虑PHP.ini文件配置。

打开php配置文件,里面有一行disabel_function的值,此处记录了禁止运行的函数,在里面讲exec和shell_exec,system等函数删除。

2.权限问题

修改以后PHP可以运行部分命令了,但是部分外部程序和命令仍然不能运行。使用sudo返回失败。

于是运行“whoami”查看,环境下php-frm的运行角色是www。

于是修改sudoers文件。

vi /etc/sudoers

将www添加到

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

下面:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

www ALL=(ALL) NOPASSWD:ALL

然后找到Default requiretty这一行,把他注释掉

# Default requiretty

ps:意思就是sudo默认需要tty终端,注释掉就可以在后台执行了.

重启nginx和php-fpm

service nginx restart

service php-fpm restart

这样,PHP就可以在需要执行外部命令的时候使用sudo利用root身份执行命令,而不会报错或者执行失败了!

linux/centos 6.5下的nginx配置文件怎么修改怎么退出,

一进入insert后就不知道怎么办了,还有那里面#开头的代码是不是代表不启用呢,我貌似删除了很多,又不知道该怎么搞,可以还原初始的样子吗,我是想修改nginx配置文件让PHP的请求转发到php-fpm所绑定的ip和端口上,然后操作成这样样子,网上说输入:q!就是不保存退出,那要怎么操作,直接在文档界面输入吗,

求解?

就和windows操作记事本一样了
要退出 先 按下 esc 退回到命令模式,在 输入 :q上面显示了 --- insert ----
这是插入模式
要修改内容,先进入 insert 模式,修改要改的内容,然后按 esc 退回到 命令模式,按 :wq 写入退出即可
参考技术A 上面显示了 --- insert ----
这是插入模式,就和windows操作记事本一样了

要退出 先 按下 esc 退回到命令模式,在 输入 :q! 就强退了

#是注释追问

yes!就是这样回事的,多谢高人指点,那我大概要怎么操作呢?

追答

要修改内容,先进入 insert 模式,修改要改的内容,然后按 esc 退回到 命令模式,按 :wq 写入退出即可

本回答被提问者和网友采纳
参考技术B 你现在是vim的insert模式,先ESC退出这个模式,直接输入:q! 表示强制退出不保存修改。
另外,输入:wq或者:x 表示保存修改并且退出vim编辑。

以上是关于LINUX+NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08的主要内容,如果未能解决你的问题,请参考以下文章

LINUX+NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08

CentOS下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)

Linux nginx环境编译安装PHP

linux/centos 6.5下的nginx配置文件怎么修改怎么退出,

linux下的LNMP环境搭建

CentOS7 安装LNMP(Linux+Nginx+MySQL+PHP)