如何让PHP通过一键root权限获取来执行LINUX命令

通过php执行linux命令apache没有root权限怎么解决
[问题点数:40分]
本版专家分:0
CSDN今日推荐
本版专家分:545
匿名用户不能发表回复!|
其他相关推荐linux下php以root权限执行shell脚本或系统命令linux下php以root权限执行shell脚本或系统命令嗑瓜莉人百家号有时候需要用php去调用系统命令(如用来更新代码svn up之类的),或者执行某些脚本,就需要配置下系统的sudoers。首先修改 /etc/sudoers:#Defaults requiretty #这行前面加注释符号,不需要提供终端apache ALL=(root) NOPASSWD:ALL用户 主机 = 映射为谁的权限 不需要密码:所有操作web服务以哪个用户运行,就改掉apache。只允许哪几个脚本运行就改为:apache ALL=(root) NOPASSWD:/home/a.sh,/home/b.sh #每个脚本逗号隔开上面参数解释:apache这个用户以root权限,不需要密码去运行/home/a.sh和/home/b.sh两个脚本在php中调用:<?phpif (!function_exists('exec')){echo 'exec函数被禁用';}exec("/usr/bin/sudo /home/a.sh", $result, $status);?>一般情况下,exec这个函数,包括shell_exec 、system 等做为危险函数会被禁用,如果禁用了,去php.ini配置文件取消禁用。当提供了脚本执行功能,最好限制下可访问的来源。毕竟通过web程序提供系统命令功能,权限很大,增加了被恶意利用的几率。本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。嗑瓜莉人百家号最近更新:简介:最美的你,献给最好的世界作者最新文章相关文章linux下php以root权限执行命令
作者:用户
本文讲的是linux下php以root权限执行命令,
最近由于要做一个php的接口,但是因为权限问题,不能执行一些特定命令,原因是php以nobody来运行。
网上搜索了些解决方案,一种是使用su的方法,一种是以c程序来实现,还有一种是用super程序实现。
比较了下,觉得supe
最近由于要做一个php的接口,但是因为权限问题,不能执行一些特定命令,原因是php以nobody来运行。
网上搜索了些解决方案,一种是使用su的方法,一种是以c程序来实现,还有一种是用super程序实现。
比较了下,觉得super命令php调用起来更为方便一些,因此本篇主要介绍super的简单实现方法。
一、首先下载安装super,过程如下:
[ ~]#wget ftp://ftp.ucolick.org/pub/users/will/super-3.30.0-tar.gz
[ ~]#tar zxvf super-3.30.0-tar.gz
[ ~]#cd super-3.30.0
[ super-3.30.0]#./configure
[ super-3.30.0]#make && make install
[ ~]#super
super version 3.30 patchlevel 0
Commands available to user root (use option `-H’ for a long-winded listing):
Command Name Comments
or Pattern
———— ——–
安装完成后,执行super,显示如上,则证明已安装完毕。
二、接下来配置super(需要配置super可认的别名命令)
[ ~]#vi /usr/local/etc/super.tab
例,如果你想以root权限调用adduser,在最后一行加入一行,
auser /user/sbin/adduser nobody,root
*第一列为命令别名,第二列为调用命令所在路径,第三列为php启动用户名(可执行此操作的账户),最后一列可以为系统中任意的一个普通用户*
如果你还想调用其他的命令,可以安装上边的方法再构造,当然,第一列的别名不能相同,如
cpass /user/bin/passwd nobody,root
至此,配置完毕。
3.1、super的使用方法为:
super+别名+其他参数(可选)
[ ~]#super auser test
[ ~]#super cpass test
更改用户 test 的密码 。
新的 密码:
无效的密码: 它基于字典单词
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
3.2、php调用super命令:
&?php system(‘super auser test1′); ?&
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索权限
root权限执行命令、linux root权限命令、linux 以root执行命令、linux root权限执行、linux 命令执行权限,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!跟随你的内心前行,不急不躁!!
php利用root权限执行shell脚本(二)
今天晚上:19:30分,这个困扰了我好久的问题终于解决,其中的原理也终于弄清楚了,总之是利用sudo来赋予Apache的用户root的执行权限,下面记录一下:
利用php利用root权限执行shell脚本必须进行以下几个步骤:(所有步骤都是我亲自实验,若有不妥可指出,谢谢!)
1. 确定一下你的Apache的执行用户是谁。注:不一定就是nobody,我自行安装的httpd,我的Apache的用户就是daemon
2. 利用visudo为你的Apache执行用户赋予root执行权限,当然还有设置无密码。注:为了安全起见,这里最好是新建一个用户,让他作为Apache的执行用户即可(修改httpd.conf文件,后面我会指出)
3. 这步就简单了,编写你的脚本,利用php的exec,system...函数来执行。
接下来就是详细的实现过程:
1. 查看一下你的Apache的执行用户是谁: lsof -i:80
运行之后的结果为:
从图中我们可以清楚的看到,httpd(也就是Apache)的执行用户为:exec_shell(注:这是我本机上改过之后的用户,只是用来说明一下,你的肯定不是这个!)
lsof 就是 List of file 的缩写,就是列出当前系统打开文件的工具,关于他具体的使用方法可参考:
说的比较不错
确定了你的Linux上Apache的执行者是谁,下面为了安全起见,新建一个用户将Apache的执行用户修改为我们新建的用户。
2. 新建Apache的执行用户
useradd your_exec_user
我们知道创建用户的时候都会默认创建一个用用户名同样的用户组,也就是说现在我们也有一个your_exec_user的用户组
下面我们修改一下Apache的配置文件,使它的执行用户改为我们刚才新建的这个用户your_exec_user :
/home/houqingdong/httpd-exe/config/httpd.conf(这个是你的Apache所在的目录位置)
找到下面的地方,修改为你新建的用户:your_exec_user
重新启动Apache:
/home/houqingdong/httpd-exe/bin/apachect1
-------------& 重启完之后你可以利用:lsof -i:80 查看一下。
3. 执行visudo(或者是 vi /etc/sudoers) , 为your_exec_user赋予root权限,并且不需要密码,还有一步重要的修改(我被困扰的就是这个地方)
找到这个地方,添加your_exec_user,并且设置无需密码
我之前的时候,做完这里就去执行php脚本去了,结果一直创建不成功,而且很郁闷的是我切换到your_exec_user用户下直接执行是可以执行成功的。
后来,查看了一下Apache的日志文件,发现:
这里明显看出,在执行sudo的时候说必须要有一个tty去运行sudo , 知道问题出在哪里问题就好解决了: vi /etc/sudoers
将下面的这句注释掉:
这是因为默认的情况下,执行sudo需要一个终端,这里注释掉就可以了。接下来,写你的shell脚本和php命令吧
4. 这里贴一下我写的很简单的一个脚本,就是利用在php端传来的$directory和$name,在该目录下创建一个$name的目录
#!/bin/bash
This program will execute mkdir: cd $ mkdir $name
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
if [ ! -d $2 ]; then
echo "Already exist..."
功能很简单,就是进入到$directory
判断要创建的目录名是否存在,
然后创建该目录 。
构造的php执行函数:(部分)
if($type=="dir"){
$make_dir_command="/usr/bin/sudo /home/houqingdong/myshell/mkdir.sh /$directory/ $name" ;
echo $make_dir_
exec($make_dir_command,$output,$return);
if($return == 0){
echo "&script&alert('Build directory seccuss!');location.href='right.php?id=\"$directory\"';&/script&";
echo "&script&alert('Build directory err!');history.go(-1);&/script&";
这里顺带提一句:构造的命令里面最好都使用绝对路径。
5. 在网页端的执行结果:
提交之后,要过几秒中才会弹出执行结果的提示信息:
执行成功,在我们的/home/目录下:
哈哈。。。大功告成!(谢谢存哥的帮助指点!)
没有更多推荐了,Linux系统中关闭root登录的方法
Linux系统中关闭root登录的方法
关闭root用户的直接访问,而使用sudo或su来执行管理员任务。首先需要添加一个有root权限的新用户,所以编辑这个路径下的sudoers文件:
&&&代码如下:/etc/sudoers/
推荐使用如visudo这样的命令编辑该文件,因为它会在关闭文件之前检查任何可能出现的语法错误。当你在编辑文件时出错了,这就很有用了。
接下来赋予某个用户root权限。在本文中,使用用户sysadmin。确保在编辑后这个文件时使用的用户是系统已有的用户。找到下面这行:
&&&代码如下: root ALL=(ALL) ALL
拷贝这行,然后粘贴在下一行,然后把root更改为&sysadmin&,如下所示:
&&&代码如下:root ALL=(ALL) ALL
sysadmin ALL=(ALL) ALL
现在解释一下这行的每一个选项的含义:
&&& (1) root& (2)ALL=(3)(ALL) (4)ALL
(1) 指定用户
(2) 指定用户使用sudo的终端
(3) 指定用户可以担任的用户角色
(4) 这个用户可以使用的命令
( 注:所以上面的配置是意思是:root 用户可以在任何终端担任任何用户,执行任何命令。)
使用这个配置可以给用户访问一些系统工具的权限。
这时,可以放心保存文件了。
为了关闭通过SSH直接访问root,需要再次打开sshd_config,找到下面这行:
&&&代码如下:#PermitRootLogin yes
&&&代码如下:PermitRootLogin no
然后保存文件,重启sshd守护进程使改动生效。执行下面命令即可:
&&&代码如下:sudo /etc/init.d/sshd restart
Copyright & 2016 phpStudy}

我要回帖

更多关于 一键root权限获取 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信