澄清:web root 的 apache 进程的权限和所有权

澄清:web root 的 apache 进程的权限和所有权

我读过很多关于 apache 提供的 Web 可访问目录中的目录和文件的正确/安全 (1) 所有权和 (2) 访问权限的文章(例如/var/www/)。要么我很容易感到困惑,要么周围有很多令人困惑/矛盾的建议。

常见的 CMS(例如 drupal、wordpress 等)通常建议755用于目录、644文件。然而,还建议将 Web 根目录(即 )中所有内容的 apache 进程授予组所有权chown -R :www-data /var/www/

(1) 第一个问题:假设目录和文件的组所有权/var/www/*属于www-data,并且像往常一样,apache 进程用户www-data是该组的唯一成员。同时目录和文件的用户所有权/var/www/*属于Linux系统上属于该sudo组的普通用户(例如somesudouser)。这给了我们类似的东西:

    ----------  1 somesudouser www-data   3012 Jan 10 13:46 some-file.php
    d--------- 16 somesudouser www-data  12288 Jan 10 13:25 some-directory/

考虑到上述所有权结构,“其他”的访问权限当然可以设置为0;例如,750对于目录、740文件,这不会阻止 apache 正确地服务这些文件以响应浏览器请求:

    -rwxr-----  1 somesudouser www-data   3012 Jan 10 13:46 some-file.php
    drwxr-x--- 16 somesudouser www-data  12288 Jan 10 13:25 some-directory/

这有什么问题吗?我认为将“其他”权限设置为除0(而不是经常推荐的5目录和4文件)之外的任何内容都没有意义,并且我认为没有理由为什么文件不应该将用户所有权设置为7(而不是经常推荐的6)。我缺少什么?

(2) 第二个问题:当 Web 根目录中的目录和文件的组所有权属于不包括 apache 进程的组(例如somesudouser:somesudouser)时,apache 进程只有在“其他”访问权限允许的情况下才能与 Web 根目录中的目录和文件进行交互。在安全性方面,以下任何一种方式是否有任何实际优势/劣势:

    -rwx---r--  1 somesudouser somesudouser   3012 Jan 10 13:46 some-file.php
    drwx---r-x 16 somesudouser somesudouser  12288 Jan 10 13:25 some-directory/

或者:

    -rwxr-----  1 somesudouser www-data   3012 Jan 10 13:46 some-file.php
    drwxr-x--- 16 somesudouser www-data  12288 Jan 10 13:25 some-directory/

甚至:

    -r--------  1 www-data www-data   3012 Jan 10 13:46 some-file.php
    dr-x------ 16 www-data www-data  12288 Jan 10 13:25 some-directory/

(3)最后一个关于w权限的问题。假设 apache 进程具有文件的组所有权,并且该组具有以下访问权限7

    ----rwx---  1 somesudouser www-data   3012 Jan 10 13:46 some-file.php

为什么这是个问题?恶意者是否可以劫持apache用户,编辑some-file.php,从而在linux系统上运行恶意php?这将如何完成?

如果目录具有相同的权限怎么办:

    d---rwx--- 16 somesudouser www-data  12288 Jan 10 13:25 some-directory/

恶意者是否可以导致 apache 进程向此目录写入新文件?再说一遍,这将如何完成?

谢谢。

答案1

(1)第一个问题:...像往常一样,apache进程用户www-data是该组的唯一成员...这有什么问题?我认为将“其他”权限设置为 0 之外的任何内容都没有意义(而不是通常推荐的目录 5 和文件 4)

首先将自己添加为系统管理员/开发人员作为该组的成员www-data是一个非常好的和有效的想法,因为它允许您使用网络服务器创建的文件和文件夹。
如果您的网络服务器文档根权限是这样设置的,则在目录上设置 setgid 位,您可以使用网络服务器创建的文件和文件夹,并且由于您具有共享组所有权(并假设 umask 为 002),因此网络服务器可以在完全访问的情况下正常运行到由您创建、通过 ftp 传输、创建等的文件和文件夹。
在这种情况下,您是对的,将其他位设置为 0 是明智的,因为其他 UNIX 帐户不应具有对文档根目录的任何访问权限。
我怀疑您的 CMS 文档建议允许其他人至少阅读是因为大多数非专业管理员都没有足够的知识来设置 setgid 等,因此在 www-data 拥有的文件的情况下,您将是其他人 - 这将在至少允许您读取文件,反之亦然,与服务器有关您的文件。

(2)第二个问题:当web根目录和文件的组所有权属于不包括apache进程的组时

它可能取决于目录的用途,以及网络服务器是否需要对其进行写访问才能运行。通常,您应该仅向网络服务器授予其运行所需的足够权限,但如果网络服务器确实需要权限,则理想情况下应通过所有权或组角色进行分配。如果您授予全世界读/写访问权限,以便您的网络服务器可以读/写,那么您就允许其他 UNIX 用户帐户拥有相同的自由。例如,共享系统上的其他“邻居”不应该能够访问您的文件,但偶尔可以在系统管理员出现失误时访问您的文件,是的,我见过这种情况发生。

(3)最后一个关于w权限的问题。假设 apache 进程具有文件的组所有权,并且该组的访问权限为 7:

是的,这几乎将成为你问题的主要根源,你有一个连接到互联网的网络服务器 - 它将不断受到滥用,坏人试图劫持网络​​服务器来做他们想做的事 - 这可能涉及文件文档根目录和网站内的操作,例如

  • 索引/探索目录
  • 写入/损坏文件 - 当网络服务器只需要读取这些文件即可运行时

请注意,作为一般安全问题,通过网络服务器滥用文件系统可能会传播到操作系统的其余部分,例如读取密码等。因此,此外,您还存在有关网络服务器查看敏感系统信息、密码、日志等的权限问题外部文档根目录。
关于文档根权限,配置良好的权限是什么样的?我会推荐

还有读书

相关内容