最近在用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命令吧

linux -- Apache执行权限的更多相关文章

  1. Linux读写执行权限

    Linux 将访问文件的用户分为 3 类,分别是文件的所有者,所属组(也就是文件所属的群组)以及其他人. 最常见的文件权限有 3 种,即对文件的读(用 r 表示). 写(用 w 表示). 执行(用 x ...

  2. Linux读写执行权限对目录和文件的影响

    提示:这里的用户指的是普通用户 读写执行权限对root无效 对于目录来说 1)只拥有读权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件 [support@node1 opt]$ ...

  3. apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法

      <Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> ErrorDocument 404 /404/404.h ...

  4. linux中执行命令权限不够怎样处理

    在linux中执行命令权限不够就要增加权限,先看遇到的情况 查看权限情况 那就赋予权限 执行命令

  5. Linux文件夹执行权限

    在Linux中,文件有三种权限--可读,可写,可执行.目录也有三种权限--可读,可写,可执行.但是实际上他们有着不同的意义. 对于文件: 可读 :表示可以读取文件里的数据: 可写 :表示可以改变和删除 ...

  6. 【转】Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法

    chmod是更改文件的权限 chown是改改文件的属主与属组 chgrp只是更改文件的属组. 一.文件权限解读 如上图所示,开头的-rwxrw-r--这一字符串标识文件权限. 这个字符串有10位,可以 ...

  7. linux下有的目录有可执行权限

    在linux里面,目录也是一个文件.权限设置方法与普通文件一样.目录的可执行权限:目录无所谓执行不执行,目录只能否被开启(也称作“遍历”或“搜索”)对目录的执行权限不仅意味着查看目录下文件名还允许查看 ...

  8. apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

    apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法   首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...

  9. 关于linux 执行权限的理解

    关于linux 执行权限的理解他这个执行权限不是 执行什么命令的 是这个文件 是否能被执行的权限 比方说<pre>shell_exec('/home/crontabtest12.sh'); ...

随机推荐

  1. eclipse软件与git配合使用创建git仓库

    一.在eclipse上安装git,和安装其他插件一样 help->Install new software->add... 在弹出框中输入name:git,location:http:// ...

  2. WCF使用net.tcp绑定时的注意事项

    IIS Express没有net.tcp绑定功能,本地测试的话只能使用本机的IIS进行承载,并且需要相应的配置(参见上一篇文章). 算了,直接举一个配置例子吧,懒得写了... <system.s ...

  3. [sql]MySQL数据备份小结

    一 MySQL备份恢复总结: 1,备份所有库 2,分库备份 3,备份某库中的某表 4,备份某库中的多个表 5,分表备份 6,只备份表结构 7,只备份数据 二 MySQL备份恢复参数总结: -A 备份所 ...

  4. 【Android】17.4 Activity与IntentService的绑定

    分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 本示例通过AlarmManager类以固定的时间间隔调用服务(每隔2秒更新一次随机生成的股票数据).如果将此示例的 ...

  5. 利用U盘进行软件加密的方法

    利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...

  6. angular学习笔记(一)-入门案例

    入门实例: 一个购物车产品清单,可以自行改变数量,总价自动计算的小例子: 代码如下: <!DOCTYPE html> <html ng-app> <head> &l ...

  7. vue2.0的学习

    vue-router 除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现. 1)router.push(loc ...

  8. Tomcat: 8080端口被占用

    用eclipse重启tomcat的时候可能出现这样的错误提示,说明tomcat没有成功地关闭掉. 解决办法:尝试直接用tomcat的shutdown.bat关闭即可,一般都可以解决问题

  9. Mybatis generator 自动生成代码

    开发项目的时候,表很多,是不可能一点点的自己去写xml ,dao文件的,这里就需要用到代码的自动生成工具了. 第一步:导入jar包,当然,这之前,基本环境,像mybatis,数据库之类的都得搭建好. ...

  10. 【Unity笔记】鼠标射线由指定层接收

    LayerMask mask = << LayerMask.NameToLayer("UI"); Ray ray = Camera.main.ScreenPointTo ...