【问题标题】:File permissions; Should my www-folder content be owned by www-data?文件权限;我的 www 文件夹内容应该归 www 数据所有吗?
【发布时间】:2011-03-29 21:21:20
【问题描述】:

这可能是一个菜鸟问题,但在任何地方都找不到答案。

我有一个问题,Another file permissions problem 帮助我几乎解决了。

我在 linux (danny) 中创建了一个具有 sudo 访问权限的用户。 我还创建了一个名为 ALSO 的新组 danny,并将用户 danny 添加到该组。 此组具有 sudo(root)访问权限。

我的 www 文件夹中的所有文件和文件夹都归 danny/danny 组所有。

我有一个图像上传代码,它是 php。此代码无法将图像上传到 www 文件夹下名为“images”的文件夹,除非我授予图像文件夹 777 权限。

所以,我已经按照链接问题的答案,并发现上传脚本运行的用户是“www-data”。

根据我发布的另一个问题的链接上的答案,我需要将 www-data 添加到一个组中......但我被困在这里......

我应该添加到哪个组?我应该从这里做什么?

感谢任何提示。

顺便说一句,这里有一些关于 www-data 和 danny 的信息

  id www-data:
  uid=33(www-data) gid=33(www-data) groups=33(www-data)
  id danny
  uid=1000(danny) gid=33(www-data) groups=33(www-data)

谢谢,如果您需要更多信息,请告诉我...

【问题讨论】:

  • 您选择了迄今为止最糟糕的答案,因为如果您使用此建议,您将被黑客入侵。你应该改变它。

标签: php security permissions webserver


【解决方案1】:

实际上,您的问题是您需要用户 www-dataimages 文件夹具有写入权限。

您可能还希望用户 danny 拥有对该文件夹的完全访问权限。

编辑:附加警告词: 让您的网络服务器可写入文件总是存在安全风险。请务必检查编写的文件,并确保人们无法上传或更改代码。 概括: * 不要让您的网络服务器运行可写或可写文件夹中的脚本。 因此,请确保只有 images/ 文件夹是可写的,并仔细检查所写入的所有内容实际上都是图像!

要么:

  1. 将 www-data 设置为文件夹的所有者, 和 chmod u+rwx www。
  2. 设置 www 数据 作为 X 组的一部分,并更改 文件夹的所有者到 X 和 chmod g+rwx 万维网。
  3. 设置文件夹 世界可写在您的服务器上(在 在某些情况下,可接受的解决方案 也,但不太安全)。

【讨论】:

  • 终于让它工作了,我按照你上面提出的解决方案1。最后一件事,image_folder 的权限现在是 765。我希望这是好的和安全的吗?但是,如何限制人们在浏览器中查看我的文件? (我的意思是,例如,您输入 www.domain.com/images,然后显示所有文件夹)
  • @Camran:要防止 apache 显示目录列表,请使用 .htaccess 关闭“索引”选项。 (Options -Indexes)
  • -1 Web 应用程序不应拥有对其自己的 Web 根目录的写入权限,并且在任何情况下该文件夹都不应是全局可写或可读的。这是一个巨大的错误,真的很困扰我。
  • 世界可读性很少成为问题,除了包含数据库密码之类的文件。可执行文件同上。 (您已经让互联网上的随机用户通过他们的浏览器执行代码......)对于网络可访问/网络可执行文件,写访问是通常需要限制的唯一内容。 644 或 755 通常是要走的路。
  • @The Rook:你不同意我没有说的话。引用我自己的话:“世界可读性很少成为问题,除了包含数据库密码之类的文件。”你提到的 php/.htaccess 文件显然是这样的文件,因此,根据我之前的评论,应该不是世界可读的。
【解决方案2】:

我会将 www-data 用户添加到组 danny。

usermod -a -G danny www-data

这样 www-data 可以进入 danny 的位置,但不能相反。

为了允许 www-data 用户写入 danny 组文件夹权限掩码必须是这样的(其中通配符表示任何值都可以):

d???rwx???

【讨论】:

  • 对我在 Koneraks 问题上发表的评论有什么想法吗?
  • 这是否意味着如果网络服务器被入侵,所有 danny 的文件都可能被 Internet 访问?这对我来说似乎是个坏主意。
【解决方案3】:

一般来说,,您的内容应该归 www-data 所有。 only 应该由 www-data 拥有的内容是您需要 Web 应用程序能够修改的特定文件以及它们需要能够在其中创建或删除文件的特​​定目录。其余的不应由 www-data 拥有(或可写),因为 www-data 可以写入的每个文件都是破坏您的 Web 服务器(包括它正在运行的任何脚本或 Web 应用程序)的攻击者能够替换的文件与他可能选择的任何恶意数据。

特别重要的是 www-data 拥有或能够写入任何可执行文件(例如,脚本、flash 文件、Word 或其他格式的文档宏功能等),因为将它们替换为恶意可执行文件将提供一种简单的方法来攻击用户的计算机或 Web 服务器本身。

【讨论】:

  • 那么,askubuntu.com/a/9411/12938 的建议实际上是一个糟糕的建议,我是否理解正确?
  • @texnic - 您链接的答案很好。它说将您的用户帐户设置为所有者,将 www-data 设置为 Web 目录上的组,并将其权限设置为 0755,这将授予 www-data 读取和执行权限,但不授予写入权限。这些设置与我在此处的回答中所说的一致。
  • 确实如此。谢谢。我正在慢慢掌握整个想法。
【解决方案4】:

我认为 www-data 使用的文件归 www-data 所有是有道理的。我的意思是还有谁应该拥有它?最重要的部分是 Web 应用程序不应拥有对其自己的 Web 根目录的写入权限。原因是因为copy()file_put_contents() 等PHP 函数中的directory traversal 漏洞可能允许攻击者在您的Web 根目录中放置一个.php 后门。

另一个需要注意的重要攻击是系统上的另一个进程或用户可能想要读取或写入您的 Web 根目录,因此最后一个数字为零很重要。中间的数字是组,你没有使用它,所以它也应该是零。以下 2 个命令使您的 web 根目录可由 apache 读取和执行,并且只有 apache。有时会使用不同的用户帐户,因此请运行<?php system('whoami')?> 以找出正确的用户帐户。

chown www-data -R /path/to/webroot

chmod 500 -R /path/to/webroot

当攻击者远程执行代码以更改 Web 根的权限时,其游戏就结束了。重点是试图阻止漏洞利用成功。

【讨论】:

  • 请注意,如果 www-data 拥有文件/目录,则使其不可写是一个小减速带,它可能会阻止一些固定攻击,但仅此而已。为什么?因为文件的所有者可以改变它的权限,所以,如果 www-data 拥有文件,攻击者可以很容易地给自己写权限。如果不是这样,攻击者必须先从“web 漏洞利用”转到“root 漏洞利用”,否则攻击者将无法获得写入权限(此时游戏就真的结束了,无论 web 根目录的权限如何)。
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 2016-10-15
  • 2014-02-23
  • 2013-07-29
  • 2021-10-21
  • 1970-01-01
  • 2014-09-17
  • 2012-01-18
相关资源
最近更新 更多