首页 > 网站 > Apache > 正文

Linux/Apache php执行错误怎么解决?

2024-08-27 18:23:50
字体:
来源:转载
供稿:网友
  用php调用exec方法去执行一个linux终端下的命令,结果每次都不能执行成功,主要原因是因为Apache的执行权限的问题。
  利用php利用root权限执行shell脚本必须进行以下几个步骤:(若有不妥可指出,谢谢!)
  1. 确定一下你的Apache的执行用户是谁。注:不一定就是nobody,我安装的lampp,我的Apache的用户就是${APACHE_RUN_USER}
  2. 利用visudo为你的Apache执行用户赋予root执行权限,当然还有设置无密码。注:为了安全起见,最好不要用root,这里最好是新建一个用户,让他作为Apache的执行用户即可(修改apache2.conf文件,后面我会指出)
  3. 这步就简单了,编写你的脚本,利用php的exec,system...函数来执行。
  接下来就是详细的实现过程:
  1. 查看一下你的Apache的执行用户是谁: lsof -i:80
  运行之后的结果为:
  从图中我们可以清楚的看到,httpd(也就是Apache)的执行用户为:exec_shell(注:这是我本机上改过之后的用户,只是用来说明一下,你的肯定不是这个!)
  lsof 就是 List of file 的缩写,就是列出当前系统打开文件的工具,关于他具体的使用方法可参考:http://club.topsage.com/thread-234763-1-1.html   说的比较不错
  确定了你的Linux上Apache的执行者是谁,下面为了安全起见,新建一个用户将Apache的执行用户修改为我们新建的用户。
  2. 新建Apache的执行用户
  useradd your_exec_user  我们知道创建用户的时候都会默认创建一个用用户名同样的用户组,也就是说现在我们也有一个your_exec_user的用户组
  下面我们修改一下Apache的配置文件,使它的执行用户改为我们刚才新建的这个用户your_exec_user :
  vi  /home/houqingdong/httpd-exe/config/apache2.conf(这个是你的Apache所在的目录位置)
  找到下面的地方,修改为你新建的用户:your_exec_user
  重新启动Apache:   /home/houqingdong/httpd-exe/bin/apachect1  restart      -------------> 重启完之后你可以利用:lsof -i:80 查看一下。
  3. 执行visudo(或者是 vi /etc/sudoers) , 为your_exec_user赋予root权限,并且不需要密码
  visudo    找到这个地方,添加your_exec_user,并且设置无需密码
  我之前的时候,做完这里就去执行php脚本去了,结果一直创建不成功,而且很郁闷的是我切换到your_exec_user用户下直接执行是可以执行成功的。
  4.设置执行sudo不需要一个终端
  后来,查看了一下Apache的日志文件,发现:
  这里明显看出,在执行sudo的时候说必须要有一个tty去运行sudo , 知道问题出在哪里问题就好解决了: vi /etc/sudoers   将下面的这句注释掉:
  这是因为默认的情况下,执行sudo需要一个终端,这里注释掉就可以了。接下来,写你的shell脚本和php命令吧
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表