apache php 执行 shell_exec时,怎样获得root权限

6 篇文章 0 订阅

 

apache php 执行 shell_exec或exec等linux命令时,一般是可以执行的,

但是碰到需要root权限的命令就执行不了了,

例如更新sphinx的索引:

 using config file '/usr/local/coreseek/etc/csft.conf'...
indexing index 'xxxx'...
FATAL: failed to open /usr/local/coreseek/var/data/xxxx.tmp.spl: Permission denied, will not index. Try --rotate option.

因为apache执行命令时账号不是root, 而是一个自己的账号

<?php
$output = shell_exec('whoami');
  echo "<pre>I am $output</pre>";

运行上面的php脚本,就可以看到账号,

或者进入/etc/apache2,打开apache2.conf(你的不一定是这个路径)

可以看到下面的内容:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

那APACHE_RUN_USER是什么呢?

打开同一个目录下的envvars, 

可以看到

export APACHE_RUN_USER=xxxxx 

 这个就是apache的账号了。

 

那现在我们有2种方法来解决更新sphinx索引的问题:

1.把apache账号提升到root权限

2.把索引分为全量索引和增量索引,通过计划任务去频繁地刷新增量索引

 

先采用把apache账号提升到root权限的方式,

vi /etc/sudoers

然后再执行之前的命令,注意加上sudo

$output = shell_exec('sudo sh /usr/local/coreseek/bin/refresh_sphinx.sh');
  echo "<pre>$output</pre>";
indexing index 'xxxxx'...
collected 219167 docs, 27.6 MB
sorted 73.1 Mhits, 100.0% done
total 219167 docs, 27646228 bytes
total 29.438 sec, 939128 bytes/sec, 7444.99 docs/sec
total 8 reads, 0.237 sec, 52769.0 kb/call avg, 29.6 msec/call avg
total 998 writes, 0.616 sec, 889.3 kb/call avg, 0.6 msec/call avg
rotating indices: succesfully sent SIGHUP to searchd (pid=18165).

可以刷新索引了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值