答案1
用户帐户由真实用户使用,服务帐户由系统服务(例如 Web 服务器、邮件传输代理、数据库等)使用。按照惯例,并且仅按照惯例,服务帐户的用户 ID 范围较小,例如 < 1000 左右。除 UID 0 外,服务帐户没有任何特殊权限。服务帐户可能(而且通常确实)拥有特定资源,甚至设备特殊文件,但它们不具有类似超级用户的权限。
服务帐户可以像普通用户帐户一样创建(例如使用useradd
)。然而,服务帐户通常由包管理器在安装服务软件时创建和配置。因此,即使作为管理员,您也应该很少直接关心服务帐户的创建。
有充分的理由:与用户帐户相比,服务帐户通常没有“适当的”登录 shell,即它们具有/usr/sbin/nologin
登录 shell(或者,回到过去,/bin/false
)。此外,服务帐户通常被锁定,即无法登录(对于传统帐户/etc/passwd
,/etc/shadow
这可以通过将密码散列设置为任意值(例如*
或)来实现x
)。这是为了强化服务帐户以防止滥用(纵深防御)。
为每项服务设置单独的服务帐户有两个主要目的: 这是一种安全措施,可减少一项服务发生事件时的影响(区隔化),并且它简化了管理,因为更容易追踪哪些资源属于哪个服务。看这或者这相关问题的解答以获取更多详细信息。
答案2
最初,用户旨在对应于使用该系统的人,因此得名。每个进程都以特定用户身份运行,每个文件都由特定用户拥有。称为 root 的特殊用户用于执行不属于任何特定人类用户(即操作系统本身)的操作。由于root对应于操作系统本身,因此拥有所有权限。
很快人们发现创建多个系统用户很方便,而且不需要太多的权限。这允许隔离机器上运行的各种服务,这样它们就不会互相干扰。服务帐户(或“系统帐户”,这两个术语是同义词)是与系统上运行的服务相对应的帐户,而不是与使用该系统的某人相对应的帐户。通常,系统上运行的每个任务都有一个服务帐户,该帐户具有自己的一组权限(例如,自己的文件、自己的网络端口等)。
人类帐户与系统/服务帐户没有正式的定义。内核并不关心(除了向 UID 0 的用户授予很多权限之外)。大多数管理命令也不关心。一些典型的差异是:
- 人类用户有一个真实姓名,如“John Doe”,而系统用户有一个描述性名称,如“Nasal daemon”或根本没有。
- 人类用户有一个真正的登录 shell(例如
/bin/sh
或/bin/bash
或 )/bin/csh
。一些系统用户有 shell(几乎总是/bin/sh
),其他用户则没有,这取决于他们的使用方式(例如su foo
需要foo
有一个 shell)。 - 人类用户通常有密码 - 但情况并非总是如此,例如仅远程用户可能只有 SSH 密钥。请注意,在现代 unice 上,密码不在
/etc/passwd
其他文件中,例如/etc/shadow
. - 人类用户的主目录通常位于
/home
(或某个特定于站点的位置),而系统用户的主目录通常不位于/home
并且可能不存在(但也有例外)。 - 大多数站点为系统用户指定一系列用户 ID,为人类用户指定一个不相交的范围。通常保留 100–65533 或 500–65533 或 1000–65533,并且大多数发行版设置为从 500 或 1000 开始分配真实用户 ID。
在多台计算机共享帐户的站点上,通常有一个包含用户列表的中央服务器,可以通过以下方式访问NIS或者LDAP。passwd
中的条目/etc/nsswitch.conf
指定在哪里查找用户信息。本地有系统用户,/etc/passwd
全网数据库中有真实用户是很常见的,但有时全网数据库中有系统用户(为了强制UID一致,方便服务器和数据复制),有时也有本地文件中的人类用户(即使网络中断也让他们登录)。
伪装成系统用户的人类可访问帐户通常没有真实姓名,但有登录 shell、密码集或 SSH 密钥,同时具有系统范围内的用户 ID。事实上,使用实际的系统帐户会是更好的伪装,删除该帐户会导致某些服务停止工作。但你不能有任何硬性规则来检测潜在的攻击:根据定义,攻击者不遵守规则。
服务帐户和人员帐户由相同的命令管理并记录在相同的文件中。帐户创建命令可以具有选项来为人类与服务用户设置合理的默认值,例如,在适当的范围内选择用户ID,并提示人类输入密码并禁用服务的密码验证。例如,Linux 上的adduser
vsadduser --system
或useradd
vs。useradd -r
答案3
- 服务帐户,又名技术帐户,是一种仅由服务/应用程序使用的帐户,而不是由普通用户使用。
- 应用程序和服务开发人员希望这些帐户限制关联的进程权限和特权,而不是以 root 身份运行其进程。由
init
或类似启动的服务systemd
,以 root 身份运行,会快速降级到服务帐户以限制风险。根据所使用的操作系统,应用程序帐户可能会被授予比常规帐户更多的权限,例如绑定到特权 TCP 端口的权利,或者相反,与常规用户相比,其权限会减少,例如拒绝服务进程称呼fork
/exec
。在这种情况下,不需要将服务降级到服务帐户,可以用它来启动它们。
- 应用程序和服务开发人员希望这些帐户限制关联的进程权限和特权,而不是以 root 身份运行其进程。由
- 您不需要,但只需创建一个没有可用密码和非工作外壳的帐户(例如
/bin/false
),普通用户将无法使用它,即无法本地或远程登录(例如thrussh
) 使用帐户名。与大多数限制一样,使用根帐户或sudo
允许克服它。
- 您不需要,但只需创建一个没有可用密码和非工作外壳的帐户(例如
答案4
例如,服务帐户可能无法使用 shell。它用于执行具有受限范围和权限的服务(守护进程)。我的意见是,您可以将其创建为普通用户,只需注意权限和组成员身份即可。但是,大多数时候您不需要这样做,因为程序会在安装过程中自动创建它们。看看/etc/passwd
root:x:0:0:root:/root:/bin/bash
0是UID,它表征了帐户在用户空间中的层次结构,root位于每个人之上,然后你拥有组成员身份,:root
主目录/root
,最后是帐户用于/bin/bash
“登录”系统的shell。
您可以使用/usr/sbin/nologin
您不需要登录权限的帐户。