用户帐户和服务帐户有什么区别?


16

我想知道用户帐户和服务帐户之间的区别。

我知道例如Jenkins安装到ubuntu的不是用户,而是服务帐户

  1. 服务帐户的用途是什么?
  2. 我们何时需要它们?
  3. 如何创建服务帐户?

Answers:


18

用户帐户由真实用户使用,服务帐户由系统服务(例如Web服务器,邮件传输代理,数据库等)使用。按照惯例,并且只有按照惯例,服务帐户的用户ID范围较小,例如<1000左右。除了UID 0,服务帐户没有任何特殊特权。服务帐户可能而且通常确实拥有特定资源,甚至包括设备专用文件,但它们没有类似于超级用户的特权。

可以像普通用户帐户一样创建服务帐户(例如,使用 useradd)。但是,服务帐户通常是由软件包管理器在安装服务软件时创建和配置的。因此,即使作为管理员,您也应该很少直接关注服务帐户的创建。

有充分的理由:与用户帐户相反,服务帐户通常没有“适当的”登录外壳,即,它们具有/usr/sbin/nologin登录外壳(或以前的状态/bin/false)。此外,服务帐户通常是锁定的,即无法登录(对于传统帐户/etc/passwd/etc/shadow这可以通过将密码哈希设置为任意值(例如*x)来实现)。这是为了加强服务帐户以防滥用(纵深防御)。

为每项服务拥有单独的服务帐户有两个主要目的:这是一种安全措施,可减少因一项服务而引起的事件影响(隔离),并且由于可以更轻松地查找哪些资源属于哪个服务而简化了管理。 。请参见有关更多详细信息相关的问题的答案。


4

最初,用户的意图是与使用该系统的人相对应,因此得名。每个进程都以特定用户身份运行,并且每个文件都由特定用户拥有。特殊用户(称为root)用于不属于任何特定人类用户的事物,即操作系统本身。由于root对应于操作系统本身,因此它具有所有特权。

很快,人们发现创建多个系统用户很方便,而无需广泛的特权。这样可以隔离运行在计算机上的各种服务,以使它们不会踩在彼此的脚趾上。服务帐户(或“系统帐户”,这两个术语是同义词)是与系统上运行的服务相对应的名称,而不是与使用系统的用户相对应的名称。通常,您对系统上运行的每个任务都有一个服务帐户,该帐户具有自己的一组特权(例如,自己的文件,自己的网络端口等)。

没有人与系统/服务帐户的正式定义。内核不在乎(除了向UID 0的用户授予很多特权之外)。大多数管理命令也不在乎。一些典型的区别是:

  • 人类用户的真实姓名如“ John Doe”,而系统用户的描述性姓名如“ Nasal daemon”或根本没有。
  • 人类用户有一个真正的登录shell(如/bin/sh/bin/bash/bin/csh一些系统的用户有一个外壳(几乎总是/bin/sh),其他人不这样做,这取决于它们是如何打算使用(例如su foo,需要foo有一个壳)。
  • 人类用户通常具有密码-并非总是如此,例如,仅远程用户可能仅具有SSH密钥。请注意,在现代的Unice上,密码不在,/etc/passwd但位于其他文件中,例如/etc/shadow
  • 普通用户的主目录通常位于/home(或某些特定于站点的位置)下,而系统用户的主目录通常不在/home且可能不存在(但有例外)。
  • 大多数站点为系统用户指定了一系列用户ID,为人类用户指定了不相交的范围。通常保留100-65533或500-65533或1000-65533,并且大多数发行版都设置为开始分配500或1000中的实际用户ID。

在跨多台计算机共享帐户的站点上,通常会有一个中央服务器,其中包含可通过NISLDAP访问的用户列表。中的passwd条目/etc/nsswitch.conf指定在哪里可以找到用户信息。在整个/etc/passwd网络范围的数据库中,本地用户和实际用户通常具有系统用户,但是有时在整个网络范围的数据库中存在系统用户(以执行一致的UID,从而促进服务器和数据复制),有时本地文件中的人工用户(即使在网络连接中断时也允许他们登录)。

伪装成系统用户的人类可访问帐户通常不具有真实姓名,而是具有登录外壳以及密码集或SSH密钥,而用户ID在系统范围内。实际上,最好使用一个实际的系统帐户来伪装,将其删除会导致某些服务停止工作。但是您没有任何严格的规则来检测潜在的攻击:根据定义,攻击者不会遵循规则。

服务帐户和人员帐户由相同的命令管理,并记录在相同的文件中。帐户创建命令可能具有用于为人工用户和服务用户设置合理的默认值的选项,例如,选择适当范围内的用户ID,并提示输入人工密码并禁用对服务的密码验证。例如,adduservs adduser --systemuseraddvs useradd -r在Linux上。


3
    1. 服务帐户,又称技术帐户,是仅设计用于服务/应用程序而非常规用户使用的帐户。
    1. 应用程序和服务开发人员希望这些帐户限制关联的进程的权限和特权,而不是以root身份运行其进程。通过启动服务initsystemd或相似,其以root身份运行,迅速降级到服务帐户,以限制风险。根据所使用的操作系统,与普通帐户相比,可以向应用程序帐户授予更多特权,例如,绑定特权TCP端口的权限,或者与普通用户相比,特权降低了,例如拒绝服务进程以授予特权。致电fork/ exec。在这种情况下,无需将服务降级到服务帐户,可以从中启动。
    1. 您只需要创建一个没有可用密码且外壳程序无效的帐户(例如/bin/false),普通用户就无法使用它,即无法本地或远程登录(例如通过ssh)使用帐户名。像大多数限制一样,使用root帐户还是sudo可以克服它。

1

例如,服务帐户可能无法使用外壳程序。它用于执行具有受限范围和特权的服务(守护程序)。我的意见是,只需注意权限和组成员身份,即可将其创建为普通用户。但是,大多数情况下您不会这样做,因为程序会在安装过程中自动创建它们。看看/etc/passwd root:x:0:0:root:/root:/bin/bash

0是UID,它表示用户空间中帐户的层次结构,root在每个人之上,然后您具有组成员资格,:root即主目录,/root最后是帐户/bin/bash用于“登录”系统的shell 。

您可以/usr/sbin/nologin为不需要登录特权的帐户使用。

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.