我正在使用 CentOS 来提供 PHP 网页。
我在“/svr/www”里面有各种网站...我的问题是我创建了如下文件夹:
/svr/www/website1.com
/svr/www/website2.com
并且此文件夹的所有者为“root”用户,我注意到 apache 无法在此文件夹中创建新文件。
我在 apache error.log 中遇到以下错误:
[Sat Oct 22 17:50:44 2011] [error] [client xx.xxx.xxx.xxx] PHP Warning: fopen(../index.htm): failed to open stream: Permission denied in /srv/www/site1.com/public/gne/gnerate.php on line 228
[Sat Oct 22 17:50:44 2011] [error] [client xx.xxx.xxx.xxx] PHP Warning: fputs() expects parameter 1 to be resource, boolean given in /srv/www/site1.com/public/gne/gnerate.php on line 229
[Sat Oct 22 17:50:44 2011] [error] [client xx.xxx.xxx.xxx] PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /srv/www/site1.com/public/gne/gnerate.php on line 230
我的问题是...在 apache 需要读取、写入和执行的文件夹中设置权限的正确方法是什么?
对此有什么线索吗?
此致,
答案1
通常,您的 Apache 服务器应该有权读取任何需要提供服务的内容,而写入权限应严格限制在 Web 应用程序运行所需的文件和文件夹。您永远不应该拥有所有人都可写入的文件(例如 777)。
您可以进行设置,以便您自己的用户拥有这些文件,但 apache 组拥有组所有权。
然后通过用户授予自己所需的权限,并通过设置组权限严格限制Web服务器。
答案2
1)输入以下命令检查 Apache 在哪个用户下运行
ps -ef | grep httpd
2)更改您希望 apache 能够写入的文件夹的权限(仅更改这些文件夹的权限,以确保更“安全”)3)其他所有内容都可以拥有您喜欢的任何用户/权限,重要的是 apache 用户将能够读取这些目录(因此文件夹的权限至少应为 755,文件的权限至少应为 644)。
答案3
Apache 和 php 以apache
用户身份运行。为了赋予 Apache(和 PHP)读写权限,您应该首先使用 更改文件的所有者chown -R apache: /srv/www/*
。
您还应确保 PHP 安装的安全。以下是一份快速全面的指南:http://www.jamescun.com/2011/10/securing-php/。你也可以看看http://www.phpgenious.com/test/phpsecurity.pdf(PDF 文件)——有点旧,但足以帮助您开始保护 PHP。