PHP web应用程序的Chmod

PHP web应用程序的Chmod,php,chmod,Php,Chmod,我正在编写web应用程序。它有: index.php /应用程序-当然,使用.htaccess,但我不是在谈论它 /应用程序/会话-对于会话,必须在我的服务器上使用会话保存路径(/app/session) /app/include-index.php包含来自此目录的文件 /app/config-only.xml文件,该文件从include中的脚本读取类 /图像/样式等 我的问题是: 以上目录的正确chmod设置是什么?我知道什么是chmod(我在Linux上工作),我知道如何更改它,但我找不

我正在编写web应用程序。它有:

  • index.php
  • /应用程序-当然,使用.htaccess,但我不是在谈论它
  • /应用程序/会话-对于会话,必须在我的服务器上使用会话保存路径(/app/session)
  • /app/include-index.php包含来自此目录的文件
  • /app/config-only.xml文件,该文件从include中的脚本读取类
  • /图像/样式等
我的问题是:
以上目录的正确chmod设置是什么?我知道什么是chmod(我在Linux上工作),我知道如何更改它,但我找不到关于它的有用信息。只有像“如何将chmod更改为777

我不知道谁是所有者、组和其他人。我的页面将在共享web服务器上,所以我认为所有者是apache,组是www数据,对吗


请告诉我chmod必须有哪些目录(和文件?我使用-R表示chmod到文件)对于安全的网站。主要涉及到任何脚本入侵的可能性。

我在服务器上使用
640
。文件归我所有,所以我需要读写。组是www数据,所以apache可以读取。PHP脚本不需要执行就可以运行(如果使用默认的apache PHP模块。我认为使用cgi时需要执行),仅读取。其他人不需要访问。我有一个uploads文件夹,提供apache写入功能,但只有这一个文件夹,我通常使用.htaccess拒绝访问。根据项目的需要,禁用php以阻止脚本上载或将其放在webroot之外。

Wordpress有一个解释unix文件权限。阅读它,您将掌握简而言之(理论上不正确):

Unix系统指定了3种不同的“角色”:用户、组和世界。尤其是“世界”似乎让人困惑

每个文件和目录(都是节点,在Linux系统中没有太大区别)都分配给一个用户和一个组。您可以将用户和组视为特定文件/目录的“所有者”(我将进一步讨论“节点”,因为这并不重要).File权限定义谁可以对节点执行操作。示例:

文件index.php被分配给用户“aso”和组“www data”,并具有文件权限modus 644。这意味着用户(6)具有读写权限,组仅具有读权限(4),就像“世界”(三位数字中的最后4位)一样

现在,首先您必须了解*nix系统上的每个用户都是组的一部分。组名有时与用户名相同,但组是另一个实体。因此,您可能有一个名为“aso”的用户和组

文件权限是从“位掩码”生成的,如下所示:读取权限由数字4指定,写入权限由2指定,执行权限由1指定。可以由此进行任何组合。在示例中,写入和执行权限由3指定(写入=2,执行=1),读取和执行权限由5指定(读取=4,执行=1)

让我们看看这意味着什么,我必须公平地说,我在这件事上不可能是完整的。如果你想要一个完整的故事,请使用谷歌

如果我在*nix系统上创建文件,它将自动分配给我(我的用户)和我的用户所属的组。拥有权限644这意味着我(使用我自己的用户登录)可以读取文件并可以更改(写入)文件。但我没有执行权限(x)权限。但这并不重要,因为这仅适用于可执行脚本(shell脚本,大多数情况下扩展名为.sh)。文件所属的组(“www-data”)只有读取权限,因此无法更改文件。“world”也只有读取权限

请注意,一个用户可以是多个组的一部分,因此*nix文件权限的作用域有限:您可能希望将写权限分配给组1,而只将读权限分配给组2。在传统文件系统中,这是不可能的。但是,像reiserFS和Ext3这样的文件系统可能会使用扩展ACL来完成诸如那是另一回事了

这一切意味着什么?只要您理解所分配的权限的含义以及文件节点和目录节点之间的区别,实际上这比预期的要容易

文件

  • 阅读:能够阅读其内容
  • 写入:更改(写入和删除)其内容的能力
  • 执行:执行文件的能力(执行一个脚本,可能产生所有后果)
目录

  • 读取:能够读取其内容。这意味着:列出节点名称,但不列出节点内容、类型等
  • 写入:能够添加/删除文件
  • 执行:能够列出it内容,包括类型、上次修改日期等
回到您的案例。如果您有一个正常的设置(一个Linux服务器作为一个模块运行Apache和PHP),您的文件将被分配给ftp用户和组“www data”(运行Apache的组)。您自己需要读和写权限(有时您需要更改文件),但不需要执行权限(因为PHP或HTML不是可执行文件)。所以对于用户,您需要一个6(读=4,写=2,组合为6)。对于组用户,您只需要读取权限,如Apache(或PHP模块)只需要读取php脚本的内容。系统上的任何其他用户与您的文件无关,因此不需要all(0)权限

因此,对于您的所有脚本,640权限(用户读写,组读,世界无)就足够了

对于目录,您的用户需要所有权限(读取=4,写入=2,执行=1,总共7)。为什么?因为它需要读取其内容(节点名称),所以必须能够确定它是文件还是控制器