php 获取root 权限运用shell 关闭nginx

这篇博客讲述了在尝试通过PHP执行shell脚本来手动关闭Nginx网站时遇到的权限问题。作者首先展示了尝试用PHP调用shell命令的代码,然后给出了一个用于查找并杀死Nginx进程的shell脚本。当发现PHP无法执行kill命令时,博主提出了通过编写C程序来提升权限的解决方案,并详细说明了C程序的编写、编译及权限设置过程,最终成功让PHP能够执行关闭操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户提出需要手动关闭网站  想了下通过php执行脚本关闭nginx完成

<?php
   $shell = "ls -l";
    echo "<pre>";
    system($shell, $status);
    echo "</pre>";
    //注意shell命令的执行结果和执行返回的状态值的对应关系
    $shell = "<font color='red'>$shell</font>";
    if( $status ){
        echo "shell命令{$shell}执行失败";
    } else {
        echo "shell命令{$shell}成功执行";
    }
?>

在网上在到改方法和脚本

#!/bin/sh
#根据进程名杀死进程

pgrep nginx

killall nginx


if [ $# -lt 1 ]
then
echo "缺少参数:procedure_name"
exit 1
fi

PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
echo "Kill the $1 process [ $i ]"
kill -9 $i
done

运行执行过程中,php无法执行kill。找了半天发现是没有权限。

网上用编写C程序的方法来解决此问题,创建一个c的文件 ,然后编译

cat > wrapper.c <<CONTENT  int
  main (int argc, char *argv[])
  {
      setuid (0);
      /* WARNING: Only use an absolute path to the script to execute,
       *          a malicious user might fool the binary and execute
       *          arbitary commands if not.
       * */
      system ("/bin/sh /usr/local/nginx/html/nginx.sh");
      return 0;
  }
CONTENT

赋权编译

chmod -R 777 wrapper.c 
gcc wrapper.c -o php_root
chmod -R 777 php_root 
chmod u=rwx,go=xr,+s php_root

修改执行PHP,完成关闭

<?php
    $shell = "/usr/local/nginx/html/php_root";
    system($shell, $status);
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值