我正在尝试向我的主文件夹中的文件授予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)
感谢阅读!
答案 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不同的用户......