这两天用 PHP 做了一个后台,想调用 shell 命令来实现自动代码打包,遇到了 shell 命令执行没反应的问题。
后来在命令行下用 php 来执行,居然能正常工作,故而判断是权限配置的问题。
一、查看当前是哪个用户在运行 PHP
两种办法:
1、PHP 代码
<pre>
<?php
echo shell_exec("id -a");
</pre>
2、shell 命令 lsof -:80
<pre>
[root@localhost dev_host]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 27556 root 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
nginx 27558 apache 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
</pre>
这俩的结果都能看出来当前用户是 apache
二、添加用户 apache,并赋予 sudo 权限
vi /etc/sudoers
,添加
<pre>root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD:ALL</pre>
并将如下这行注释掉,表示不需要控制终端:
<pre># Defaults requiretty</pre>
增加行 Defaults visiblepw,否则会出现 sudo: no tty present and no askpass program specified
最后使用 :w!
保存
三、执行命令的时候,一定要在命令最前面加上 sudo
不然会遇到调用命令,返回错误码 127 的情况。正确的姿势是:
<pre>sudo sh testshell</pre>
参考资料: