What is the www-data user?

我正在阅读《如何在Ubuntu 16.04上使用uWSGI和Nginx提供Django应用程序》。在文章的“为uWSGI创建systemd单元文件”部分的末尾,他们讨论了www-data用户。这是什么意思,为什么它很重要?
2个回答

关于安全性。

这些文件不是全局可写的。它们仅限于文件所有者进行写入操作。

Web服务器必须在特定用户下运行。该用户必须存在。

如果以root身份运行,则所有文件都必须由root访问,并且用户需要成为root才能访问文件。 如果root是所有者,则受损的Web服务器将可以访问您的整个系统。 通过指定特定的ID,受损的Web服务器只能完全访问其文件,而不是整个服务器。

如果您决定在不同的用户ID下运行它,则该用户需要成为文件的有效所有者以获得适当的权限。将系统范围的文件归属于个人账户可能会令人困惑。

创建一个特定的用户将使识别文件更容易,并且一致地识别要将新文件和文件夹的所有权更改为哪个ID。

所有者的UserID或名称并不重要。无论选择或决定什么,都必须在Web服务器配置文件中进行配置。

默认情况下,在Ubuntu的Apache2配置中,所有者的配置是www-data。由于这是默认配置,您可以方便地知道您的网页文件所需的所有权。如果您更改它,您将不得不更改站点中的文件以匹配新的所有权设置。
我没有运行Nginx,但是由于它在Ubuntu存储库中,我相信它已经使用www-data配置作为默认值进行了测试。

1顺便问一下,“specific id”是什么? - user1592380
2这是www-data。这就是为什么在你的问题中,他们要求你创建userID和groupID(如果它们不存在)。Apache2安装会自动创建用户。关于Nqinx我不太确定。你可以通过以下命令检查是否存在:iid -u www-data&&id -g www-data。如果存在,它将显示用户和组的ID号码。在Ubuntu上,默认的用户和组号码是33 - L. D. James
1www-data作为所有者也可能存在安全风险,正如base-passwd文档中提到的那样(参见@muru的回答),因为所有者通常具有对所有提供网络服务的内容的读写访问权限。您可以删除www-data所有者的写入访问权限,或者使用其他所有者。www-data绝对需要对所有要提供的数据进行读取访问权限,但是如果您只为每个文件和目录提供所需的权限,而不是更多的权限,您将更加安全。 - Yuval
2使用以下参数cat /etc/group | grep www-data,找到了www-data组名。 - noobninja

www-data是Ubuntu上Web服务器(例如Apache和nginx)默认使用的用户,用于正常操作。Web服务器进程可以访问任何www-data可以访问的文件。它没有其他重要性。

来自base-passwd文档(/usr/share/doc/base-passwd/users-and-groups.txt.gz):

一些Web服务器运行为www-data。Web内容不应由此用户拥有,否则被攻击的Web服务器将能够重新编写Web站点。Web服务器输出的数据将由www-data拥有。


4除了讨论为什么不应该给www-data访问webroot文件之外,返回翻译的文本。 - kitingChris
1为了让我更具体地理解,我可以问一下,一个网页服务器在提供页面时需要访问哪些服务? - user1592380
2@user61629 服务?按照通常的定义,Web服务器本身就是一种服务。 - muru
1@kitingChris 是的,我刚刚在查找有关 base-passwd 的文档。 - muru
1www-data 是服务 httpd(apache)在您的系统上扮演角色的用户(也是组)。 - kitingChris
1在Debian发行版中也是一样的。也许这个名称在所有基于Debian的变种中都是通用的? - asgs