将文件/目录权限设置为 0777 有哪些风险?

将文件/目录权限设置为 0777 有哪些风险?

目前,我无法将文件上传到 Web 文件夹。无论我做什么,即使将文件夹权限设置为 0777,我也无法将文件上传到该文件夹​​。出于好奇,我搜索了将文件权限设置为 0777 时相关的风险。

找到一个问题 这里,但并没有找到我所寻找的答案。

我完全不了解这个。有什么风险?

答案1

在(我这里谈论的是文件夹,而不是文件)上设置 0777folder并不像某些人所说的那样涉及任何执行安全风险。

Execute is needed on a directory to access the inode information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.

http://content.hccfl.edu/pollock/aunix1/filepermissions.htm

风险在于:

  • 任何人都可以读取此文件夹中的文件(前提是该文件本身具有r尝试读取它的用户/组的权限,或者others
  • 任何人都可以在此文件夹中创建文件(并可选择执行它们,但仅限于由该特定用户创建的文件)
  • 任何人都可以删除此文件夹中其他人拥有的文件(无论他们的所有者/权限如何,您的文件都不安全)

如果您想要保护某些文件的安全,您必须创建另一个具有“正常”权限的文件夹(仅您有 rw 权限,或者您和您的组有 rw 权限)并将文件放入其中。

另一方面,没有人可以将不可执行文件转变为可执行文件(如果您不拥有该文件,则不允许使用 chmod)。

不存在什么风险?

有些人认为 0777 会被文件夹内的每个文件继承。这是错误的。由于文件的父文件夹是 0777,所以如果没有权限,则无法编辑文件。w如果没有权限,则无法读取文件r

如何确保其安全?

如果您有权访问某些 shell,或者您的 FTP 客户端允许您更改文件的所有者,并且您知道需要哪个所有者,那么您可以创建文件夹并将其所有者设置为 apache 进程(通常是或nobody),然后只需设置 0700 权限。问题是,其他用户(例如使用 FTP 客户端浏览时的用户)将无法读取 PHP 稍后创建的文件,但这不一定是个问题。daemonapache

好的,但是文件怎么办?

我并不是在谈论files执行所固有的风险,因为没有理由强制执行x一个不应该执行的文件的权限。

如果某些 Web 应用程序需要在现有文件中写入内容,则将其设置为 0666(如果所有者是 apache 用户,则设置为 0600)就足够了。

答案2

有权访问该文件夹的每个人(即x路径中每个文件夹的权限)都可以读取、修改和执行该文件。

bash如果它实际上是可执行的,那么恶意用户添加恶意代码,然后等待您执行它以使您执行一些邪恶代码(例如创建设置为 setuid 并可由攻击者执行的副本)的风险很高。

如果您使用的是共享主机,请检查 0770 是否不够用 - 如果您的 FTP 用户与 Web 服务器位于同一组,则足够了。在这种情况下,上述风险通常不适用,因为您永远不会执行上传目标文件夹中的内容,并且 PHP 必须open_basedir限制其他用户访问您的文件。但是,如果主机还支持 CGI 脚本(例如使用 Perl),则可以轻松规避。

答案3

我可能没有回答你关于风险的问题,但我可以猜到你为什么不能写。

父文件夹可能没有该用户的写权限......

以递归方式使用父文件夹中的某些内容,chmod ugo+w whateverfile直到可以在其中创建文件:)

答案4

假设您已经排除了一些基本的 PHP 安全设置(open_basedir 限制等) - 调试和error_reporting(E_ALL);(确保记录错误而不是在生产系统上显示它们)对于检查这一点非常有用:p。

如果您将文件夹权限设置为 777(全球可写),而某个进程仍然无法写入该文件夹,那么可能正在运行 MAC 实现来阻止此类事情发生(如果您使用的是 Linux,SELinux 或 AppArmor 可能是候选者)。如果是这种情况,那么更改它们实施的策略将有助于解决此问题。将文件夹设置为全球可写可能是一个安全问题(尤其是当相关文件夹暴露给外界时),而且也很可能可以避免。

相关内容