谷动谷力

标题: Easy | PHP中如何执行系统命令? [打印本页]

作者: 谷谷小师妹    时间: 2023-12-17 23:15
标题: Easy | PHP中如何执行系统命令?
Easy | PHP中如何执行系统命令?



01 常见方法

使用反引号执行
  1. <p> <?php     </p><p> $result = `ipconfig`;</p><p> $result = iconv('GBK', 'utf-8', $result);</p><p> echo $result; </p><p> ?></p>
复制代码

使用 exec
  1. <p> <?php     </p><p> $result = exec("ipconfig");</p><p> echo $result; </p><p> ?></p>
复制代码

使用 system
  1. <p> <?php     </p><p> $result = system("ipconfig");</p><p> echo $result; </p><p> ?></p>
复制代码



02 Windows

读取外部普通文件时
<?php     
echo (file_get_contents('D:/a.csv'));
?>
注意:直接读取即可。

执行系统命令时
  1. <p> <?php     </p><p> echo `net start ToDesk_Service`; </p><p> ?></p>
复制代码

注意:需要管理员权限或者管理员授权才可以执行。

03 Linux

Apache
读取外部普通文件时
读取防火墙文件,文件有 r 权限,每级目录都有 rx 权限即可。
  1. <p> <?php     </p><p> echo (file_get_contents('/etc/firewalld/zones/public.xml')); </p><p> ?></p>
复制代码

执行系统命令时
执行关闭防火墙命令(写一段 PHP 代码,并通过浏览器访问此页面)。

  1. <p> <?php     </p><p> echo `sudo systemctl stop firewalld`;   // 关闭失败 </p><p> ?></p>
复制代码


找到关于此命令的位置。

whereis systemctl       # 发现位置在 /usr/bin/systemctl
查看目录权限,发现每级目录都有 rx 权限,但依然无法执行。

  1. <p> ll /usr/bin/ | grep systemctl</p><p> ll /usr/ | grep bin</p><p> ll / | grep usr</p>
复制代码


解决

使用 root 管理员用户

查看 apache 默认用户(写一段 PHP 代码,并通过浏览器访问此页面)。

  1. <?php

  2. echo 'whoami';      // 显示默认用户为 daemon

  3. ?>
复制代码


尝试改成 root 用户

  1. <p> cd /opt/lampp/etc   # 切换到 /opt/lampp/etc/ 目录</p><p>
  2. </p><p> vi httpd.conf       # 编辑 httpd.conf 文件</p><p>     /User       # 找到 User</p><p>     User root       # 改成 root 用户</p><p>     Group root      # 改成 root 组</p>
复制代码

重启 lampp

  1. /opt/lampp/lampp restart    # 发现启动失败
复制代码

xampp 集成环境为了安全性考虑不能改成 root 用户访问。
将命令的执行权限赋予给 xampp(Apache)对应的用户。最后执行关闭防火墙命令,即可成功。

  1. vi /etc/sudoers 或 visudo  # 编辑 /etc/sudoers
复制代码

按 G  # 将光标移动到最后一行

按 i ,添加 daemon ALL=(ALL) NOPASSWD:ALL 或 daemon ALL=(ALL) NOPASSWD:/usr/bin/systemctl,/usr/bin/firewall-cmd  # 添加授权指令
# 含义:给哪个用户授权 允许哪个主机访问=模拟哪个账号执行命令 不要求输入密码:允许






欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2