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

 

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, 而是一个自己的账号

I am $output
";

运行上面的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

apache php 执行 shell_exec时,怎样获得root权限_第1张图片

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

$output = shell_exec('sudo sh /usr/local/coreseek/bin/refresh_sphinx.sh');
  echo "
$output
";
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).

可以刷新索引了

你可能感兴趣的:(php,apache)