我无法授予写入文件的apache权限,我做错了什么?

时间:2013-11-23 00:54:05

标签: php apache bash permissions centos

我正在尝试向我的主文件夹中的文件授予apache权限,以便php页面可能会将日志数据写入该文件。下面找到我在bash shell中完成此操作所做的工作,我无法弄清楚为什么这不起作用:

[root@myserver logs]# mkdir apachelogs
[root@myserver logs]# touch apachelogs/log.log
[root@myserver logs]# chown -R apache:apache apachelogs
[root@myserver logs]# chown -R apache:apache apachelogs/log.log
[root@myserver logs]# chmod 770 apachelogs
[root@myserver logs]# su apache
bash-4.1$ cd apachelogs
bash: cd: apachelogs: Permission denied

所以我刚刚授予apache所有权,读取,写入,执行权限,但很明显apache仍无法访问该目录,这在我的php脚本运行这行代码时得到验证:

echo exec(whoami)."\n";
file_put_contents("/home/chilinut/logs/apachelog/log.log","test",FILE_APPEND);

输出(毫不奇怪)

apache
E_WARNING: file_put_contents(/home/chilinut/logs/apachelog/log.log): 
failed to open stream: Permission denied

我在这里缺少什么? 我不想给文件夹777.我宁愿它有类似644的东西。我正在使用CentOS release 6.4 (Final)

感谢阅读!

4 个答案:

答案 0 :(得分:3)

哥们,

这是一个明显的例子,即文件 /home/chilinut/logs/apachelog/log.log 的父目录没有用户 apache 的权限。

您还必须为父目录提供用户 apache 的写入,读取权限。在您的情况下尝试以下内容

chown chilinut:apache /home/chilinut/
chown -R chilinut:apache /home/chilinut/*
chmod g+rw /home/chilinut/
chmod -R g+rw /home/chilinut/*

现在切换到apache用户并尝试执行它。没事的。我尝试过使用示例脚本并执行与脚本相同的操作。

enter code# cat test.sh 
echo | exec whoami ;
echo test >> /home/testleo/public_html/apachelogs/log.log;

我的工作很好。

答案 1 :(得分:2)

如果有疑问,请转向宣传良好做法的好消息来源:)。在这种情况下,我将使用symfony设置说明作为指南。

$ APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod +a "$APACHEUSER allow delete,write,append,file_inherit,directory_inherit" apachelogs/
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" apachelogs/

您可以在此处找到参考:http://symfony.com/doc/current/book/installation.html#configuration-and-setup

是的,这些是获取apache的正确权限以写入symfony的app / logs和app / cache文件夹的说明,但同样可以应用于任何文件夹:)。

答案 2 :(得分:1)

您可能没有父目录的权限吗?

答案 3 :(得分:0)

...让echo exec(whoami)."\n";工作做chmod 777 apachelogs -R并从那里开始。我猜这是一个与apache不同的用户......