php程序root权限,获取root权限 php执行shell

有的时候,通过php做很多系统操作的时候,并不如直接利用bash来的快。php-fpm默认是apache用户,直接改成root账户,是启动不了的。这样的话,apache用户无法执行root才能执行的命令。所以我们要先使php-fpm的启动用户,拥有执行shell的权限,以及shell内部执行命令的权限。

一,获取root权限

1,给具体进程指定无密码访问

# visudo //添加以下内容,文件最下面有例子,照着写

apache ALL=(ALL) NOPASSWD:/etc/init.d/srs

调用的时候

$result = shell_exec("/usr/bin/sudo /etc/init.d/srs start");

2,批定用户无需密码,切换root账号

# visudo

apache ALL=(ALL) NOPASSWD: ALL

直接可以用sudo su切换成root用户,权限远大于上面的方法,权限越大,安全性越低。

3,针对某个shell脚本,开放权限

如果说第一方法,满足不了要求,第二方法权限过大,不安全,那么第三种方法可以试试

# visudo

apache ALL=(ALL) NOPASSWD: UPLOADVIDEO

Cmnd_Alias UPLOADVIDEO = /var/www/srs/upload.sh

调用方法根一般调用方法一样。

还有一点很重要就是visudo时注释掉,#Default requiretty,因为php调用shell时,用不到终端

二,php调用shell怎么调试

不好调试,无log可查,只能看输出,nginx,php的log没有调用shell的相关信息,我有一些以经验,屡试不爽

1,检查php启动用户权限,文件本身能被执行,php启动用户也要能执行该文件的权限。以前遇到过一个情况是,php执行一个shell怎么都执行不了,后来才发面,没有chmod +x操作。

2,php是可以捕获取shell的输出的,但是要知道,不是所有命令执行都是有输出的,也就是说,成功,失败,或者没执行没办法区别,搞不清。这个时候,我们可以shell脚本中输出,用echo就可以。这样我们可以知道,执行到什么地方,可以知道,在什么地方出错了。

3,直接通过su切换到php的启动用户,然后在linux命令行下执行,有人问了,nologin用户无法su,那就直接useradd一个,改一下php的启动用户。如果用php的启动用户测试成功,通过php脚本去执行,基本也是能通过的。

4,在这里要注意一点,路径问题,相对路径和绝对路径,尽量用绝对路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值