这几天弄的东西涉及到php利用shell脚本与Linux的交互,我们知道利用php运行脚本来访问Linux是以Apach的身份来执行的,因此它自己能够所做的事情很少的,因为没有足够的权限,这里就涉及到要将为php执行的时候赋予root权限。

接下来介绍的这种方法,我自己是亲自做了的,可以实现,但是毕竟有它的缺点,这里跟大家分享一下,希望大家有什么好的做法可以提示一下:

这是利用C来实现互换权限的,如果你想彻底明白到底为什么接下来的程序可以运行成功,请彻底弄清楚SUID与SGID到底起什么作用。

#include

#include

#include

#include

int main()

{

uid_t uid , euid ;

uid = getuid();

euid= geteuid();

// printf("my uid:%u\n",getuid());

// printf("my euid:%u\n",geteuid());

if(setreuid(euid,uid))

perror("setreuid");

// printf("after setreuid uid:%u\n",getuid());

// printf("after setreuid euid:%u\n",geteuid());

system("/home/houqingdong/myshell/mkdir.sh /home/ hou_test");

return 0;

}

其中的主要函数说明:

1.getuid()所需要的头文件为:

#include

#include

函数原型:uid_t getuid(void);

函数说明:uid_t是定义在sys/types.h中的,其实就是unsigned int类型,函数返回一个调用程序的真

实用户的ID。

2. geteuid()

函数原型:uid_t geteuid(void);

函数说明:geteuid()用来取得执行目前进程有效的用户识别码。有效的用户识别码用来决定进程执行

的权限,借由此改变此值进程可以获得额外的权限。倘若执行文件的setID位已被设置,该文件执行时,

其进程的euid值便会设成该文件的所有者的uid。例如,执行文件/usr/bin/myshell.sh的权限为:-r-s-

-x--x,其s位即为setID(SUID)位,而当任何用户在执行myshell.sh时其有效的用户识别码会被设成为

myshell.sh所有者的uid,即root的uid值为0.

3. setreuid();  可以理解为交换ID

编译该文件:     gcc -o run -Wall run.c    生成可执行文件run

接下来做的是最重要的一步,为run赋予suid的权限:chmod u+s run   它的作用是设置uid,当普通用户执行的时候是以root的权限来执行的,在run.c里面会交换进程的ID,从而利用root的ID为0,来执行,权限就可想而知了。

但是利用这个方法有一个很不好的地方,在run.c中,我执行的命令是:system("/home/houqingdong/myshell/mkdir.sh /home/ hou_test");   mkdir.sh是我自己写的脚本,而后面的两个参数是写死的,也就是说参数的传递非常不方便,当然如果你执行一些不需要传递参数的程序,这个方法还是很可行的,而我想做的是用户选择Linux下的某个目录,可以在这里面创建文件file或者目录directory,此时的参数就非常不好办了。

关于这个问题还尝试了另一种方法:

就是直接将自己写的shell脚本,执行:  chmod 777 mkdir.sh                chmod u+s mkdir.sh

这样我调用mkdir.sh的时候同样是以root的身份来执行的,但是我在网页端运行的时候,仍然报错,初步认定为我要创建文件的那个目录下Apache的权限不够,我尝试着将权限改为: chmod -R 777 /home/     然后在运行就可以创建成功了,但是这样为Apache添加权限的方法是很不正规的吧,我知道如何为Apache添加主目录和虚拟目录的权限

但是这样的就不知道了,总不能都改权限吧。

我知道我以上的方法肯定有很多地方存在不足的,无论是从可行性,还是从安全性,所以如果您恰好看到这篇文章,恰好知道更好的做法,愿您能够花费一点时间为我提示一下,不胜感激,谢谢!!

php 赋予最高权限,为PHP执行赋予root权限(一)相关推荐

  1. linux无需管理员运行sh,linux下权限问题,如何让无root管理员权限的用户执行需root权限执行的脚本文件...

    匿名用户 1级 2013-07-12 回答 看了前面几位回答者我觉得应当采取一种简单的方法. 看你的意图允许任何人挂载/dev/sda5并且访问它 那么可以如此,任何人都可以挂载硬盘而无需密码,包括其 ...

  2. root权限执行java_执行具有root权限的java代码(一)

    我们知道,当手机被root后,就可以通过su来执行具有root权限的代码了,但这基本只局限在了shell里面的命令. 比如我们可以执行 am.pm以及android支持的一些linux命令. 一但我们 ...

  3. app调用root权限,安卓app获取root权限

    请教如何提升app的权限,root权限 方法如下: 方法一: 1.在手机的应用中心搜索一键ROOT工具. 2.挑选后进行下载. 3.下载安装完毕后运行软件,点击一键获取ROOT. 方法二: 1.数据线 ...

  4. gg怎样获得root权限,gg怎么获得root权限

    gg修改器怎样获得root权限 gg修改器获得root权限的方法如下: 1.打开下载gg修改器. 2.接下来点击设置,选择应用. 3.接着点击权限管理. 4.然后选择gg修改器. 5.接着点击下方的更 ...

  5. ubuntu如何进入超级权限模式,退出超级权限模式,sudo su——root权限

    ubuntu如何进入超级权限模式,退出超级权限模式,sudo su--root权限 进入: sudu su 退出: exit logout ctrl D 或者重新登录

  6. 小米10获取root权限_MIUI11系统开启系统ROOT权限图文教程-支持小米红米全部机型...

    转眼间MIUI11就正式发布了,而昨日,MIUI也推送了首个MIUI11体验版,激动的小 伙伴们应该都已经成功刷入了,是不是很开心,MIUI11在小编1天的使用中感觉还是 很满意的.而小编是一个ROO ...

  7. php root权限执行命令,如何使用PHP执行需要root权限的系统命令

    前面我们说了如何使用编写一段PHP程序代码去执行Linux服务器系统的相关命令还获得一些服务器状态信息的方法,但是由于Web Server以及PHP的实现方式所限,我们在现实环境中很难利用PHP去调用 ...

  8. Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序

    问题描述: 有一个脚本,只能是具有root执行权限的用户来执行.这意味着只有root用户和拥有sudo权限的用户才能执行,但我们的需求是让普通用户在没有取得root权限的情况下也能执行,那么就开发另一 ...

  9. android 执行shell root权限,Android App 获取root权限后,执行shell命令

    背景: 做一个应用,需求是获取root权限后可以停用/启用某些应用,包括系统应用!停用的应用将不在设置-->应用中展示,大部分系统自带的桌面应该也不会再显示! 如果是用menifest.xml中 ...

最新文章

  1. Exchange 2016 先决条件
  2. GetHashCode() 的研究
  3. 代码实现【mini版】——给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
  4. 《MySQL——连接查询》
  5. gradle tool升级到3.0注意事项
  6. 第九十四期:GitHub 发布 2019 年年度报告
  7. 联想将推出全新系列笔记本
  8. c语言双向链表实现航班系统,双向链表C语言实现
  9. Windows Mobile 6 模拟器绿色中文版
  10. WEP无线网络密码破解
  11. 帕累托分布(Pareto distributions)、马太效应
  12. 第六章 用正三和弦为含跳进旋律配和声
  13. 近六成女受访者赞成“中国男配不上中国女”
  14. c语言编程樱花树,分形樱花树(画画)
  15. php orm中关联查询,【整理】Laravel中Eloquent ORM 关联关系的操作
  16. ios下overflow:scoll中卡顿问题
  17. Ubuntu20.04安装vscode打开出现花屏
  18. java常用设计模式应用案例
  19. Java implement意思_详解JAVA中implement和extends的区别
  20. BI系统开发过程中用到的知识总结

热门文章

  1. AXI_01 《AXI总线系列文章》由来
  2. 什么叫返回路径平面上的间隙_苏州平面设计培训:平面设计师工作流程
  3. tp5分布式redis_TP5通过缓存数据到Redis
  4. mysql设计与实现_mysql设计与开发
  5. 三调地类代码_FME实现三调地类变化流量表制作
  6. python中列表实现自加减元素_python初学者知识整合
  7. linux cp源码_为Linux的cp和mv命令添加进度条
  8. 的拼音怎么改正_「我就退出家长群怎么了?」:多少中年父母的崩溃,从家长群开始...
  9. Go语言技术教程:Redis介绍安装和使用
  10. winform 以不规则图形背景显示窗体