为什么在 Linux 和 Unix 系统中使用服务帐户?

为什么在 Linux 和 Unix 系统中使用服务帐户?

我有一个关于 Linux 和 Unix 非用户服务帐户的问题。我们知道Linux中有用户帐户,那么(非用户)服务帐户(例如daemon、news、bin等)有何用途?

$cat /etc/passwd | more 

显示所有用户和非用户帐户。

为什么bin已经分配了服务帐户?这是设计使然,还是有特殊目的?

最后一个问题

在 Microsoft 操作系统环境(Server 2003 或 2008)中是否如此?

答案1

希望您的发行版记录了其默认用户和组的用途。例如,Debian 发布了/usr/share/doc/base-passwd/users-and-groups.*Debian 上的内容。快速搜索inurl:“doc/base-passwd”在网上找到了一些有副本的地方(有意或无意);这是一个

基本上他们不知道为什么会有bin用户,LSB 表示由于遗留原因要包括一个用户。

这些用户通常被“锁定”,因此无法登录。尽管 root 可以使用su(或等效的系统调用)切换到其中之一,但这就是守护进程作为它们运行的​​方式。

您可以使用以下命令查找用户拥有的任何文件find / -user USER_NAME

内置用户和组基本上有以下几种用途:

  • 允许访问某些特殊文件(例如,组拥有的连接打印机的 /dev 文件lp)。然后守护程序(例如 CUPS)可以成为该组的成员来获得访问权限。这也可以针对用户。例如,在 Debian 上,将用户添加到adm组中可以让他/她查看系统日志文件。
  • 隔离。以同一用户身份运行的两个程序可以相互交互,例如,相互发送信号,甚至根据某些内核设置,ptrace相互发送(ptrace这是调试器的工作方式,基本上允许您完全控制目标进程)。示例包括gdmsyslog等。
  • 访问控制。例如,在 Debian 上,有一个lpadmin由 CUPS 使用的组。如果您将用户添加到该组,他们就可以通过 Web 界面管理 CUPS。

前两种可能是最常见的。

PS:您可能想使用and代替cat /etc/passwd/ 。这些将在配置有备用密码/组存储(例如 LDAP)的系统上运行。cat /etc/groupgetent passwdgetent groups

答案2

这因发行版而异,但是,如果您仔细观察,您会发现“服务”帐户往往对应于特定的进程。在我的 Arch Linux 服务器上,我有一个 NTP 守护进程运行的用户 ID“ntp”、一个 Apache Web 服务器运行的用户 ID“http”以及一个用于 Postgresql 数据库进程的“postgres”用户。

这相当于应用了最小特权原则。运行进程的用户应该只具有执行其任务所需的最低权限。例如:该ntpd进程不应该能够读取有关 Postgres 数据库的敏感信息,并且 Postgres 进程不应该能够重写 Apache 配置文件。这有助于限制错误和故意妥协(漏洞利用)造成的问题。

相关内容