我正在编写Web应用程序。它有:
我的问题是:
上述目录的正确chmod设置是什么?我知道什么是chmod(我在Linux上工作),我知道如何改变它,但我找不到有用的信息。只有文章如“如何将chmod改为777 ......
我不知道谁是所有者,团体和其他人。我的页面将在共享的Web服务器上,所以我认为所有者是apache,组是www-data,对吗?
请告诉我chmod的安全网站必须有哪些目录(和文件?我正在使用-R用于chmod到文件)。主要是它可能被任何脚本入侵。
答案 0 :(得分:15)
Wordpress有nice article解释unix文件权限。阅读它,你将掌握它的基础知识。简而言之(而不是理论上的正确):
Unix系统指定3个不同的角色':用户,群组和世界。特别是'世界'似乎让人困惑。
每个文件AND目录(在Linux系统中都是节点,因此在Linux系统中没有那么不同)被分配给用户和组。您可以将用户和群组视为'所有者'特定文件/目录(我将进一步讨论&节点'进一步,因为它并不重要)。文件权限定义谁可以对节点执行哪些操作。给出的例子:
文件index.php已分配给用户' aso'和小组' www-data'并且具有文件权限modus 644.这意味着用户(6)具有读取和写入权限,该组仅具有读取权限(4),并且“世界”具有读取权限。 (三位数的最后4位)。
首先,您必须了解* nix系统上的每个用户都是组的一部分。组名有时与用户名相同,但A GROUP是另一个实体。因此,您可能拥有一个用户以及一个名为' aso'。
的组。文件权限是通过'位掩码构建的。如下:读取权限由数字4指定,由2写入,并由1执行。可以由此进行任何组合。在示例中,写入和执行权限用3指定(write = 2,execute = 1),读取和执行权限用5指定(read = 4,execute = 1)。
让我们看看这意味着什么,我必须公平地说我在这件事上不能完整。如果您想要完整的故事,请使用Google。
如果我在我的* nix系统上创建一个文件,它会自动分配给我(我的用户)和我的用户所属的组。拥有权限644这意味着我(使用我自己的用户登录)可以读取文件并可以更改(写入)它。但我没有执行(x)权限。然而,这并不重要,因为这仅适用于可执行脚本(shell脚本,大多数情况下使用.sh扩展名)。该文件所属的组(' www-data')仅具有读取权限,因此无法更改该文件。世界'也只有读取权限。
请注意,用户可以是多个组的一部分,因此* nix文件权限的范围有限:您可能希望为组1分配写权限,而只读组2的权限。在传统文件系统中这是不可能的。但是,像reiserFS和Ext3这样的文件系统可能会使用扩展ACL来完成这样的事情。那是另一个故事。
这一切意味着什么?只要您了解分配的权限意味着什么以及文件节点和目录节点之间的区别是什么,它实际上更容易实现。
<强>文件强>
<强>目录强>
回到你的案子。如果您有正常的设置(运行Apache和PHP作为模块的Linux服务器),您的文件将被分配给您的ftp用户和组&www; www-data&#39; (Apache正在运行的组)。您自己需要读取和写入权限(有时您想要更改文件),但不要求执行权限(因为PHP - 或HTML就此而言 - 不是可执行文件)。因此对于用户来说,你需要一个6(读= 4,写= 2,组合使得6)。对于组用户,您只需要读取权限,因为Apache(或PHP模块)只需要读取您的php脚本的内容。系统上的任何其他用户都与您的文件无关,因此不需要所有权限(0)。
因此,对于您的所有脚本,640的权限(对用户的读写,对组的读取以及对于&#39;世界&#39;)都是足够的。
对于您的用户需要所有权限的目录(读取= 4,写入= 2,执行= 1,总共7个)。为什么?因为它需要读取它的内容(节点名称),必须能够确定它是否是一个文件或目录节点(和其他属性)并且必须能够添加和删除文件(你想要的)有时添加文件,不是吗?)。因此,我们会为您的用户提供7。
然而,该组(&#39; www-data&#39;,Apache正在运行的组)只需要读取和执行权限。列出内容(节点名称)的读取权限和列出其他属性的执行许可(节点类型,修改时间等)。但它并不需要写入权限,因为通常您不希望PHP(Apache)从应用程序树中添加/删除文件。
最后,这个系统中的每个其他用户(与其最广泛的意义上的世界不一样)并不需要任何其他用户权限。为什么服务器上的其他人需要访问您的文件?
组合将产生750(对用户的所有权限,对组的读取和执行,对其他人没有)。
对你的问题的总结回答,最低限度是:
但总是很好,非常标准和足够安全:
答案 1 :(得分:1)
我在服务器上使用640
。这些文件归我所有,所以我需要读写。组是www-data,所以apache可以阅读。 PHP脚本不需要执行运行(如果使用默认的apache php模块。我认为你需要在使用cgi时执行),只能读取。没有其他人需要访问。我有一个上传文件夹,提供apache写入,但只是一个文件夹,我通常拒绝访问.htaccess,禁用PHP以防止脚本上传或将其放在webroot之外;取决于项目的需求。