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

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

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身份执行命令,而不会报错或者执行失败了!

需要。

如果是nginx+php配置,也可以通过查找php执行路径

ps

aux

|

grep

php

如,路径为

/usr/local/nginx/sbin/php-fpm

然后执行以下命令

/usr/local/nginx/sbin/php-fpm

-i

|

grep

“Loaded

Configuration

File”

即可看到php加载的配置文件

为以前没有接触过nginx ,所以查了一天,查处原因有二:

一、网站根目录

默认是在 /usr/local/nginx/html文件

配置在

location / {

root /home/www/wwwroot

index index.html index.htm

}

二、修改文件中对应的php配置部分

location ~ \.php$ {

root /home/www/wwwroot

fastcgi_pass 127.0.0.1:9000

fastcgi_index index.php

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name

includefastcgi_params

}

特别需要注意的是:fastcgi_param这个参数默认的是$fastcgi_script_name最好改为$document_root$fastcgi_script_name我在实际配置中出现了php找不到需要解析文件而返回404或者500错误的问题。所以最好是带上网站根目录的路径变量$document_root


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7235252.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存