`

PHP获取root权限

    博客分类:
  • PHP
 
阅读更多

    在进行项目的时候遇到一个问题,通过网页来重启服务器 。即php需要获取root权限才能执行重启操作。有问题问百度,百度不知问谷歌 。查了很多的资料,最后找到了一个可执行的方案 。即下面的这篇文章 。


这种问题我想大家可能都遇到过,网友提供的解决方法也很多。我也只是结合自己系统的需求并结合网友的解决方案来总结的一种方法
用来作为解决php以root权限执行一些普通用户不能执行的命令或应用的参考。

其实php里的popen()函数是可以解决这个问题的,但是由于某些版本的linux(如我使用的Centos 5)对系统安全的考虑,
使得这个问题解决起来麻烦了好多。先来看一个网友使用popen()函数的例子。

<?php
/* PHP中如何增加一个系统用户
 下面是一段例程,增加一个名字为james的用户,
 root密码是 louis。仅供参考
 */
$sucommand = "su root --command";
$useradd = "/scripts/demo/runscripts.php";
$rootpasswd = "louis";
$user = "james";
$user_add = sprintf("%s %s",$sucommand,$useradd);
$fp = @popen($user_add,"w");
@fputs($fp,$rootpasswd);
@pclose($fp);
?>
 




经过自己的测试,证实此段代码是不能实现(至少在我的系统里是这样的)作者想要获得的结果的。经过自己很长时间的google之后,
问题的关键是su root这个命令需要的密码必须以终端的方式输入,不能通过其它的方式(我也不知道还有没有其它的方式)获得。
又由于项目要求不能使用类似于sudo这种应用,无奈之下,我选择了网友提出的用编写C程序的方法来解决此问题。

首先写个C程序,命名为:run.c 放在目录/scripts/demo/下

	#include <stdio.h>  
	#include <stdlib.h>  
	#include <sys/types.h>  
	#include <unistd.h>  
	int main() 
	{ 
	uid_t uid ,euid; 
	//char cmd[1024]; //变量暂时未使用 
	uid = getuid() ; 
	euid = geteuid(); 
	printf("my uid :%u/n",getuid()); //这里显示的是当前的uid 可以注释掉.  
	printf("my euid :%u/n",geteuid()); //这里显示的是当前的euid  
	if(setreuid(euid, uid)) //交换这两个id  
	perror("setreuid"); 
	printf("after setreuid uid :%u/n",getuid()); 
	printf("afer sertreuid euid :%u/n",geteuid()); 
	system("/scripts/demo/runscripts.php"); //执行脚本  
	return 0; 
	} 
 




编译该文件:

	gcc -o run -Wall run.c 
 




在该路径下生成run文件,这个可执行文件。如果现在用PHP脚本调用 该run的话,即使setreuid了 也是不行的。

接下来要做的是:给run赋予suid权限

	# chmod u+s run  
	# ls  
	# -rwsr-xr-x 1 root root 5382 Jul 2 21:45 run 
 




好了,已经设置上了,再写一个php页面调用它。

	<?php 
	echo '<pre>'; 
	$last_line = system('/scripts/demo/run', $retval); 
	echo ' 
	</pre> 
	<hr />Last line of the output: ' . $last_line . ' 
	<hr />Return value: ' . $retval; 
	?> 
 



在浏览器中浏览。
my uid :48


my euid :0


after setreuid uid :0


afer sertreuid euid :48







Last line of the output: afer sertreuid euid :48

Return value: 0
该命令执行成功。

从显示结果可以看出: apache(daemon)的uid 为48(事实上很多linux系统下daemon的uid为2)。
调用setreuid后将有效用户id和实际用户id互换了。(必须在chmod u+s生效的情况下) 使apache当前的uid为0这样就能执行root命令了。
只需要更改 C文件中的system所要执行的命令就可以实现自己的PHP以root角色执行命令了。

 

分享到:
评论

相关推荐

    Coolpad 7020 root tool

    酷派7020获取roo权限操作方法 1、工具放在c:\根目录下; 2、工具文件夹名称为root; 准备工作: 下载附件,右键,解压,修改名称为root。拷贝root文件夹至c:\ 开始root: 01、开始菜单,运行,输入cmd,回车。输入...

    PHP开发实战1200例源码

    实例048 判断用户是否具有后台管理权限 79 实例049 打印随机组合生日祝福语 80 实例050 打印2000~2020年的所有闰年 81 实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘中华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘中华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名...

    安恒 AWD培训资料

    AWD中多为非root用户,所以没有权限去查看apache的默认日志,也没办法直接抓包 ⚫ 所以我们只能用自己的办法去抓取流量 ⚫ Awd多数的考点都是web站的代码审计,所以其实就是获取到他人访问我们站点请求的参 数是...

    KSWEB3.9安卓手机框架

    ksweb是一个轻便好用的安卓手机框架设计管理软件,它是一个支持开源安卓服务器,支持多种设计程序的移动端操作,让您可以更大程度的优化...获取ROOT权限后可开启80端口访问无任何限制。在“选项”里可以设置更多选项。

    惜笔全局免流包

    ------------------安卓手机要获取root------------------ 如没获取root, 百度一下:刷机大师→连接手机→等待安装驱动→工具→一键root→手机自动重启! /全局流程开始 /------------------R.E文件管理器使用说明---...

    惜笔全局免流

    ------------------安卓手机要获取root------------------ 如没获取root, 百度一下:刷机大师→连接手机→等待安装驱动→工具→一键root→手机自动重启! /全局流程开始 /------------------R.E文件管理器使用说明---...

    搭建一个电影网站程序功能介绍+资源添加.rar

    一、飞飞影视系统PHP版(PPVOD)完美版 飞飞影视系统 安装说明 --------------------------------------- ...飞飞CMS各大视频站资源播放地址获取方法:http://www.feifeicms.cc/forum.php?mod=viewthread&tid=3919

    天猫多店宝(双模式淘点金版) v3.0

    方法请百度(注:linux环境下时,文件所属用户组不能是root)根目录(index.php所在目录)需要读写权限(用虚拟空间的忽略此条,linuxhttp admin 默认密码: admin程序使用环境 php5.2 - php7 最好安装伪静态功能...

    天猫多店宝 v3.0.zip

    采用php采集技术自动获取,可获取99.55%任意天猫店铺内容. 自动生成sitemap地图,可使搜索引擎快速收录 跳转模式,点击跳转、自动跳转、延时跳转、多地址随机跳转 自定义url,让你的网站地址随心所欲,有利于...

    在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)

    很多时候用户需要从网站下载文件,如果文件是可以通过一个固定链接公开获取的,那么我们只需将文件存放到 webroot下的目录里就好。但大多数情况下,我们需要做权限控制,例如下载 PDF 账单,又例如下载网盘里的档案...

    华为C8813D刷机工具

    (3) 自动进入模式,执行解锁,执行获取ROOT,刷入Recovery;; (4) 程序已经过严格测试,但特定情况下,不排除个别不兼容个案; (5) 刷机有风险,操作须谨慎!作者不承担误操作所导致的一切后果。APK版本说明: 集成...

    合体红包游戏程序+助力红包活动源码

    必须是认证服务号(或者有“网页授权获取用户基本信息” 权限)。 7.到您的认证服务号的微信后台开发者中心,见下图处 E站首发-2015最新微信红包源码-合体红包游戏程序-微信红包合体源码-助力红包活动 - 第4张 | ...

    antiflood:保护Apache免受HTTP泛滥

    该脚本有助于防止和抵消Linux上的Apache Floods / DDoS攻击。 不幸的是,它不像以前那样有效,因为许多DDoS攻击不是第7层,但是如果您根本没有任何保护,并继续使用apache服务器... 最好以具有root权限的人身份执行此

    棘轮:异步WebSocket服务器

    要求需要Shell访问权限,并建议root访问权限。 为了避免代理/防火墙阻塞,建议在端口80或443(SSL)上请求WebSocket,这需要root访问权限。 为此,您可以与同步Web堆栈一起使用反向代理或两台单独的计算机。 您可以...

    KODExplorer 芒果云-资源管理器

    - 编辑添加应用权限只能是root用户才可以。 - 保存文件不可写提示! - 解压缩结果提示。(对话框) ####upload - dialog display - root登陆 目录修改为服务器路径 - artdialog 已经打开的窗口 (设了id) 最小...

    php-solusvm-api-react:通过基于React PHP的SolusVM API轻松异步访问VPS盒

    作为用户(客户),您具有对VPS的完全root访问权限(通常通过SSH),并使用SolusVM Web界面来管理您的VPS。 该项目使用因此您可以以编程方式管理VPS,而无需登录Web界面来检查带宽使用情况或重新启动VPS。 注意:...

    Nagios安装部署及监控项配置

    IP 主机名 备注 ...[root@nagios ~]# yum install -y gcc glibc glibc-common wget unzip httpd php gd php-gd gd-devel perl postfix 2.获取Nagios以及相关插件包(这里已下载好,放在/usr/loca

    wppy:Wordpress getter 和安装程序工具

    以 root 权限运行 wppy-installer.py: $ sudo python wppy-installer.py 就这样!用法转到要安装 Wordpress 的目录。 前任: $ cd /var/www/ (PS:你不需要创建目录。wppy会为你做) 只需使用--name参数运行wppy ...

Global site tag (gtag.js) - Google Analytics