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

phpinfo()

功能描述:输出

PHP

环境信息以及相关的模块、WEB

环境等信息。

危险等级:中

passthru()

功能描述:允许执行一个外部程序并回显输出,类似于

exec()。

危险等级:高

exec()

功能描述:允许执行一个外部程序(如

UNIX

Shell

CMD

命令等)。

危险等级:高

system()

功能描述:允许执行一个外部程序并回显输出,类似于

passthru()。

危险等级:高

chroot()

功能描述:可改变当前

PHP

进程的工作根目录,仅当系统支持

CLI

模式

PHP

时才能工作,且该函数不适用于

Windows

系统。

危险等级:高

scandir()

功能描述:列出指定路径中的文件和目录。

危险等级:中

chgrp()

功能描述:改变文件或目录所属的用户组。

危险等级:高

chown()

功能描述:改变文件或目录的所有者。

危险等级:高

shell_exec()

功能描述:通过

Shell

执行命令,并将执行结果作为字符串返回。

危险等级:高

proc_open()

功能描述:执行一个命令并打开文件指针用于读取以及写入。

危险等级:高

proc_get_status()

功能描述:获取使用

proc_open()

所打开进程的信息。

危险等级:高

error_log()

功能描述:将错误信息发送到指定位置(文件)。

安全备注:在某些版本的

PHP

中,可使用

error_log()

绕过

PHP

safe

mode,

执行任意命令。

危险等级:低

ini_alter()

功能描述:是

ini_set()

函数的一个别名函数,功能

ini_set()

相同。

具体参见

ini_set()。

危险等级:高

ini_set()

功能描述:可用于修改、设置

PHP

环境配置参数。

危险等级:高

ini_restore()

功能描述:可用于恢复

PHP

环境配置参数到其初始值。

危险等级:高

dl()

功能描述:在

PHP

进行运行过程当中(而非启动时)加载一个

PHP

外部模块。

危险等级:高

pfsockopen()

功能描述:建立一个

Internet

UNIX

域的

socket

持久连接。

危险等级:高

syslog()

功能描述:可调用

UNIX

系统的系统层

syslog()

函数。

危险等级:中

readlink()

功能描述:返回符号连接指向的目标文件内容。

危险等级:中

symlink()

功能描述:在

UNIX

系统中建立一个符号链接。

危险等级:高

popen()

功能描述:可通过

popen()

的参数传递一条命令,并对

popen()

所打开的文件进行执行。

危险等级:高

stream_socket_server()

功能描述:建立一个

Internet

UNIX

服务器连接。

危险等级:中

putenv()

功能描述:用于在

PHP

运行时改变系统字符集环境。在低于

5.2.6

版本的

PHP

中,可利用该函数

修改系统字符集环境后,利用

sendmail

指令发送特殊参数执行系统

SHELL

命令。

危险等级:高

禁用方法如下:

打开/etc/php.ini文件,

查找到

disable_functions

,添加需禁用的函数名,如下:

phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

这个涉及到有点广泛,在安全性方面,Linux内核提供了经典的Unix自主访问控制(root用户、用户ID安全机制), 以及部分支持了POSIX.1e标准草案中的Capabilities安全机制。自主访问控制(Discretionary Access Control,DAC)是指主体对客体的访问权限是由客体的属主或超级用户决定的,而且此权限一旦确定,将作为以后判断主体对客体是否有及有什么权限的惟一依据。只有客体的属主或超级用户才有权更改这些权限。传统Linux系统提供DAC支持,客体在Linux系统当中主要是指文件、目录等系统资源,主体是指访问这些资源的用户或进程。控制粒度为客体的拥有者、属组和其他人。简单说,1.文件系统及访问权限 2.用户和账号管理。3.系统审计


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

原文地址: http://outofmemory.cn/yw/8384368.html

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

发表评论

登录后才能评论

评论列表(0条)

保存