use*_*730 12 security linux permissions web-applications
对于编写的 Web 应用程序中的以下内容,八进制格式的完美最小权限是什么?
以下是我的建议和理由
现在我对两件事感兴趣:
cyb*_*x86 20
假设“Web 应用程序”在服务器(如 apache、nginx 等)上运行并用某种动态脚本语言(如 PHP、Ruby 等)编写,那么您对“用户”是谁有误解。
用户不是登录到您的应用程序的人——也就是说,他们在应用程序中的角色(管理员等)与场景完全无关。用户是进程运行所在的linux系统用户。您网站的代码仅作为一个用户运行 - 它可能是您的网络服务器的用户(这不是一件好事),也可能是您网站的特定用户(更好)。
在 linux 上,用户属于组 - 我们可以将用户添加到另一个组并为该组分配权限。
一个好的设置会让你的服务器作为一个用户运行(我们称这个用户为“网络服务器”),而你的动态脚本语言(例如通过 FastCGI)作为它自己的用户运行(每个站点一个用户 - 让我们称我们的第一个用户为“site1”) .
为了提供您的文件,网络服务器需要访问它们,而脚本语言需要访问它们。这意味着:“site1”和“webserver”需要能够读取您的文件。但是,只有其中一个可以“拥有”这些文件。所有者是“用户”(在用户、组、其他中)。我们还需要我们的脚本语言能够写入目录(并读取它写入的文件)。因此,用户“site1”需要读写权限。由于我们希望组和其他权限尽可能受到限制,因此我们的“所有者”将是“site1”,相应的用户权限将是读写权限。
由于我们无法将我们的网络服务器的权限指定为另一个“用户”,我们将把“网络服务器”添加到“站点 1”组(当然,您可以创建一个包含“站点 1”和“网络服务器”的不同组。所有该组的成员将被授予相同的权限。最宽松的权限(用户、组、其他集合)将应用于任何给定用户以确定他们的权限。
值得注意的是,一个好的设置不应该要求文件具有动态语言的执行权限。这些文件不是直接运行的,而是被读入解释器 - 运行典型脚本(不写入任何内容的脚本)只需要读取权限。
目录的“执行”权限有不同的含义——它允许遍历但不能读取内容。为了能够读取目录中的文件,用户必须对其上方的每个目录具有“执行”权限。
对于 Web 应用程序,每个文件都必须由其所有者拥有读取权限 - 否则,它就是一个毫无意义的文件。无论是用户还是管理员(通过您的 Web 应用程序)上传文件,“所有者”(即动态语言)都需要写入权限。一个有效的设置将尝试直接通过 Web 服务器提供静态文件,因为动态语言在读取大文件和回显内容时往往很慢。因此,Web 服务器需要对您的静态文件进行读取访问。
因此,最小的文件权限可能是:
同时,最小目录权限可能是:
再一次 - 您的 Web 服务器必须对它需要访问的目录之上的每个目录具有“执行”权限 - 因此即使 Web 服务器不会提供给定目录中的文件,我们也应该授予它执行权限。
授予 Web 服务器对大多数文件的读取权限是很常见的(因此将那些 500 更改为 550)。默认的“有点安全”权限对于目录通常是 755,对于文件是 644——没有执行权限,每个人都可以读取,只有用户可以写入——你会注意到 Linux 系统上的绝大多数文件都有这些权限。
请记住,“其他”权限是指任何不是所有者或组中的系统用户(即所有剩余的系统用户)。限制你的“其他”权限是好的,因为这些用户是未知的——你没有明确地授予他们权限。在受感染的系统上,其他权限通常是最容易利用的(例如,/tmp 是常见目标的原因之一)。
在上述背景下,我认为您的最后两个问题没有那么重要。将您的目录权限设置为 550(并将文件权限设置为 440),然后授予用户对您的应用程序将写入的任何目录的写入权限(即目录:750;文件:640)。
(您显然需要写入权限才能上传文件 - 但如果您愿意,您可以在之后删除这些文件 - 可以说,如果有人正在写入只有所有者可以写入的目录 - 您的帐户已被盗用 - 这是一个保留限制性权限的原因)。
| 归档时间: |
|
| 查看次数: |
24432 次 |
| 最近记录: |