我有一个关于 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
这是调试器的工作方式,基本上允许您完全控制目标进程)。示例包括gdm
、syslog
等。 - 访问控制。例如,在 Debian 上,有一个
lpadmin
由 CUPS 使用的组。如果您将用户添加到该组,他们就可以通过 Web 界面管理 CUPS。
前两种可能是最常见的。
PS:您可能想使用and代替cat /etc/passwd
/ 。这些将在配置有备用密码/组存储(例如 LDAP)的系统上运行。cat /etc/group
getent passwd
getent groups
答案2
这因发行版而异,但是,如果您仔细观察,您会发现“服务”帐户往往对应于特定的进程。在我的 Arch Linux 服务器上,我有一个 NTP 守护进程运行的用户 ID“ntp”、一个 Apache Web 服务器运行的用户 ID“http”以及一个用于 Postgresql 数据库进程的“postgres”用户。
这相当于应用了最小特权原则。运行进程的用户应该只具有执行其任务所需的最低权限。例如:该ntpd
进程不应该能够读取有关 Postgres 数据库的敏感信息,并且 Postgres 进程不应该能够重写 Apache 配置文件。这有助于限制错误和故意妥协(漏洞利用)造成的问题。