我知道这是一个非常古老的问题,但我想通过一些深入的解释添加好的解决方案。 您将不得不在Ubuntu类似系统上执行两个语句,然后它就像一个魅力。
Linux中的权限可以用三位数表示。 第一个数字定义文件所有者的权限。 第二个数字是特定用户组的权限。 第三个数字定义了非所有者或组成员的所有用户的权限。
Web服务器应该使用作为组成员的id执行。 Web服务器永远不应该使用与文件和目录所有者相同的ID运行。 在Ubuntu中运行id为www-data的apache。 该id应该是为其指定权限的组的成员。
要为要在其中更改文件内容的目录提供适当的权限,请执行以下语句:
find %DIR% -type d -exec chmod 770 {} \;
在OP的问题中,这意味着应该相应地更改目录%ROOT%/ database的权限。 因此,重要的是不要让该目录中的文件永远不会被更改或删除。 因此,最佳做法是为必须更改其内容的文件创建单独的目录。
读取目录的权限(4)意味着能够在目录中收集其元数据的所有文件和目录。 写权限(2)授予更改目录内容的权限。 暗示添加和删除文件,更改权限等。执行权限(1)表示您有权进入该目录。 如果没有后者,就无法深入到目录中。 当应该更改文件的内容时,Web服务器需要读取,写入和执行权限。 因此需要组7。
第二个声明是关于OP的问题:
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
能够读取和写入文档是必需的,但不需要执行该文件。 7是给文件的所有者,6给组。 Web服务器无需具有执行文件的权限即可更改其内容。 这些写权限应仅授予该目录中的文件。
不应向所有其他用户授予任何权限。
对于不需要更改其文件的目录,组的权限为5就足够了。有关权限的文档和一些示例:
[https://wiki.debian.org/Permissions]
[https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions]
[http://www.linux.org/threads/file-permissions-chmod.4094/]