为什么建议为某些应用程序创建组和用户?


11

大多数时候,从源代码安装程序时,建议创建一个新用户和一个新组,并赋予/usr/local/<myapp>最近创建的用户和组所有权。

  • 为什么将这种做法视为一种良好做法?

  • 有什么改善?

示例:MySQL数据库服务器的mysql用户/ mysql组。

Answers:


11

这种做法不是为每个应用程序创建一个用户和组,而是为每个服务创建一个用户和组。也就是说,由本地用户执行的程序不需要以root用户身份安装。它是后台运行的后台程序,并执行通过网络或其他通信方式发出的请求,这些程序应以专用用户身份运行。

该守护程序以专用用户身份运行,因此,如果该守护程序行为不当(由于错误,可能是由攻击者触发的),则可以造成的损害是有限的:仅守护程序的数据文件受到影响(除非攻击者设法找到了本地根洞) ,这可能会发生)。例如,数据库守护程序mysqld以专用用户和组的身份运行,并且mysql:mysql数据库(/var/lib/mysql/*)的数据文件属于mysql:mysql

请注意,守护程序使用的但不应由守护程序修改的可执行文件以及其他静态数据和配置文件必须不属于专用用户。root:root像大多数程序和配置文件一样,它们应归所有者所有。该mysqld过程没有业务覆盖/usr/sbin/mysqld/etc/mysql/my.cnf,因此这些文件不得属于mysql用户,也不能由mysql用户或mysql组写入。如果某些文件仅需要由守护程序和管理员读取,则它们应归用户root和专用组所有,并具有模式0640(rw-r-----)。

不能由拥有者拥有的特殊类别的可执行文件root:root是由用户调用但需要额外特权运行的程序。如果这些可执行文件需要(至少部分)以root身份运行,则它们必须是setuid root。那么该可执行文件必须具有4755(rwsr-xr-x)模式。如果程序需要额外的特权但不是root用户,则应将其设置为setgid,以便额外的特权通过组而不是通过用户。可执行文件的模式为2755(rwxr-sr-x)。原因有两个:

  • 不应允许可执行文件自行修改,这样,如果用户设法利用漏洞,他们可能能够修改程序使用的数据文件,但不能将木马程序注入可执行文件中以攻击其他运行该程序的用户。
  • 可执行文件的数据文件属于该组。setuid程序必须在真实用户(调用该程序的用户)与有效用户(该程序运行所在的用户)之间进行切换,以访问其私有数据文件(其原因)享有额外的特权)。setgid程序还可以隔离仅该组可访问的每个用户数据(例如,通过将用户拥有的文件存储在仅root用户和程序组可访问的目录中)。

3

一般而言,它不是应用程序,而是守护程序。原因是该守护程序可以以非特权用户身份而不是root用户身份运行,因此,如果该守护程序存在安全漏洞并受到威胁,则只能对用户有权访问的区域进行损害。


1

之所以认为这是一种好的做法,是为了防止系统的其他用户覆盖特定应用程序的数据和配置文件。

作为一个例子mysql/ mysql被存储的不使用应用程序API从破坏数据库MySQL数据库文件可以防止任何人的所有者。另外,用户mysql通常没有真正的外壳,因此也没有人可以该用户身份登录。


您错过了一个关键点,那就是应用程序在该用户和组上运行很重要,并且可执行文件和其他静态文件应归root所有。
吉尔(Gilles)“所以,别再邪恶了”

@Gilles它们可以由root拥有,并且大多数通过发行版安装的应用程序都可以,但它们不一定必须是,也不必是。事实上/usr/bin/atdaemon/daemonUbuntu 所有
-Karlson

1
at不是守护进程。它是setuid,daemon以便它可以atd通过专用文件与守护程序通信。
吉勒斯(Gilles)'所以

1

为新安装的守护程序创建新的组/用户可以提高安全性。当服务器进程在这样的用户下运行时,它仅限于该用户的访问权限。相比之下:以root身份运行时,它可以执行所有操作。

万一您的守护程序配置错误和/或包含与安全相关的错误,此区别非常重要。

我不确定您对问题的第二部分的意思,即关于/usr/local所有权的部分。通常,X出于安全原因,运行守护程序的同一用户也拥有带有二进制文件的目录(因为在这种情况下,如果被利用,则可以更改它们)。但是应该通过以下方式访问带有守护程序工作的数据文件的目录X-配置此X目录的最简单方法是使数据目录/文件的所有者。

在自己的特殊用户下运行守护程序只是一种安全技术,其他守护程序包括某种“ chrooting”或使用强制访问控制(MAC)系统(例如SELinux)。


1

这是出于安全考虑。它限制了闯入守护程序应用程序的人可能造成的损坏。用户应用程序通常由标准用户ID拥有root

如果您的Web服务器,邮件服务器和数据库都以同一用户身份运行,则可以更轻松地破坏它们。如果它们中的任何一个有错误或配置错误都允许系统访问,则可以使用该访问来访问所有三个应用程序。

如果它们都具有建议的单独帐户,则仅可能访问受感染的应用程序。尽管可以读取其他设备的公共配置详细信息,但不太可能进行更改。

许多守护程序允许用户上载和下载文件,否则会执行您不希望他们能够对其他守护程序进行的配置。如果每个应用程序都有自己的用户ID和组,则可以更轻松地保护守护程序。

具有特定于守护程序的组可以更轻松地安全地授予守护程序对文件和目录的只读安全访问权限。如果文件或目录由其他用户拥有,但属于守护程序组,则通常可以只读访问。使用诸如find之类的工具可以轻松地验证和纠正访问权限。


您错过了一个关键点,那就是应用程序在该用户和组上运行很重要,并且可执行文件和其他静态文件应归root所有。
吉尔(Gilles)“所以,别再邪恶了”

@Gilles:进行了相应的注释和编辑。
BillThor 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.