linux -- Apache执行权限

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

时间: 2024-12-05 23:57:42

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

Linux读写执行权限

Linux 将访问文件的用户分为 3 类,分别是文件的所有者,所属组(也就是文件所属的群组)以及其他人. 最常见的文件权限有 3 种,即对文件的读(用 r 表示). 写(用 w 表示). 执行(用 x 表示,针对可执行文件或目录)权限. ower group other r w x r w x r w x 4 2 1 4 2 1 4 2 1 对于目录来说,常用来设定目录的权限其实只有 0(---).5(r-x).7(rwx)这 3 种. 777 三组都有读写执行权限; 755 所有者读写执行权限

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

提示:这里的用户指的是普通用户 读写执行权限对root无效 对于目录来说 1)只拥有读权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件 [[email protected] opt]$ ls log/ls: cannot access log/www: Permission deniedwww[[email protected] opt]$ cd log/-bash: cd: log/: Permission denied[[email protected] opt]$ m

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

<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> ErrorDocument 404 /404/404.html ErrorDocument 403 /404/403.html <FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch &qu

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

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

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

一.文件权限解读 如上图所示,开头的-rwxrw-r--这一字符串标识文件权限. 这个字符串有10位,可以分为4段来解读.注:r--可读,w--可写,x--可执行. 第一段(第1位)表示是目录还是文件,-表示是文件,d表示是目录: 第二段(第2-4位,共3个字符串)表示文件所属用户对它的权限: 第三段(第5-7位,共3个字符串)表示文件所属用户组用户对它的权限: 第四段(第8-10位,共3个字符串)表示其他用户对它的权限: 注:我们用3位8进制来表示文件的权限,r用4标识,w用2标识,x用1标识

linux下目录读权限与执行权限区别

如果你在linux下用过ls,细心的你会发现目录竟然有可执行权限!如: drwxrwxr-x 11 cl cl 4096  9月 25 14:22 ./ drwxr-xr-x 49 cl cl 4096 10月 10 16:00 ../ drwxrwxr-x  5 cl cl 4096  9月 23 10:58 algorithm/ drwxrwxr-x  2 cl cl 4096  9月 23 21:44 temp/ why?? 在网上查了一下才发现是这个意思: 目录的可执行权限是表示你可否在

Linux 系统下文件夹与文件的读写可执行权限问题

linux是一个多用户操作系统,linux对文件系统内的所有文件,实行了严格的权限划分管理.防止没有权限的用户访问某个文件.linux文件或目录的权限分为 读.写.可执行三种权限.文件访问的用户类别分为,文件创建者.与文件创建者同组的用户.其他用户三类.解释说明:drwxr-xr-x一:drwxr  创建者拥有的权限r-x   与拥有者同组的用户拥有的权限r-x     其他用户拥有的权限linux用他们的组合来表示文档或目录的权限!d rwx r-x r-x目录 属主权限 属组权限 其他权限对

Linux目录的读、写、执行权限说明

Linux目录的读.写.执行权限说明: 可读r:表示具有浏览目录下面文件及子目录的权限,即ls dir. 1)如果没有x权限,不能进入到目录里,即无法cd dir). 2)如果没有x权限,ls列表时可以看到所有文件名.但是会提示无权访问目录下文件. 3)如果ls -l列表,所有的属性会带有问号,也会提示无权访问目录下文件.但是可以看到所有文件名. 可写w:表示具有增加.删除或修改目录内文件名(一般指文件名)的权限(需要x权限配合). 可执行x:表示具有进入目录的权限.例如:cd dir.但是没有

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

? 首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执行权限的目录路径,如/upload"> ErrorDocument 404 /404/404.html ErrorDocument 403 /404/403.html <FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<