cou*_*ode 35
用户账号被真实用户使用,服务账号被网络服务器、邮件传输代理、数据库等系统服务使用。 按照惯例,并且仅按照惯例,服务帐户的用户 ID 在低范围内,例如 < 1000 左右. 除了 UID 0,服务帐户没有任何特殊权限。服务帐户可能——而且通常确实——拥有特定资源,甚至设备特殊文件,但它们没有超级用户般的权限。
可以像普通用户帐户一样创建服务帐户(例如使用useradd)。然而,服务帐户通常在安装服务软件时由包管理器创建和配置。因此,即使作为管理员,您也应该很少直接关注服务帐户的创建。
理由很充分:与用户帐户相比,服务帐户通常没有“适当的”登录外壳,即它们具有/usr/sbin/nologin作为登录外壳(或者,在过去,/bin/false)。此外,服务帐户通常被锁定,即无法登录(对于传统的/etc/passwd,/etc/shadow这可以通过将密码散列设置为任意值来实现,例如*或x)。这是为了加强服务帐户免受滥用(纵深防御)。
为每项服务设置单独的服务帐户有两个主要目的:这是一种安全措施,可在发生事件时减少一项服务(划分)的影响,并简化管理,因为可以更轻松地跟踪哪些资源属于哪些服务. 有关更多详细信息,请参阅有关相关问题的此或此答案。
最初,用户旨在与使用该系统的人相对应,因此得名。每个进程作为一个特定的用户运行,每个文件都由一个特定的用户拥有。称为 root 的特殊用户用于不属于任何特定人类用户的事物,即操作系统本身。由于 root 对应于操作系统本身,因此它拥有所有权限。
很快人们发现创建多个系统用户很方便,无需大量权限。这允许隔离在机器上运行的各种服务,这样它们就不会相互影响。服务帐户(或“系统帐户”,这两个术语是同义词)是与系统上运行的服务相对应的帐户,而不是与使用系统的人相对应的帐户。对于在系统上运行的每个任务,您通常都有一个服务帐户,这些任务有自己的一组权限(例如,自己的文件、自己的网络端口等)。
没有人与系统/服务帐户的正式定义。内核并不关心(除了授予 UID 0 的用户很多权限)。大多数管理命令也不关心。一些典型的区别是:
/bin/sh或/bin/bash或/bin/csh。一些系统用户有一个 shell(几乎总是/bin/sh),其他人没有,这取决于他们的使用方式(例如su foo需要foo有一个 shell)。/etc/passwd其他文件中,例如/etc/shadow./home(或某些特定于站点的位置)下,而系统用户的主目录通常不在下/home并且可能不存在(但也有例外)。在帐户在多台机器上共享的站点上,通常有一个中央服务器,其中包含可通过NIS或LDAP访问的用户列表。该passwd条目/etc/nsswitch.conf指定在哪里查找用户信息。系统用户在本地/etc/passwd和全网数据库中的真实用户是很常见的,但有时全网数据库中有系统用户(为了强制一致的UID,这有利于服务器和数据复制),有时还有本地文件中的人类用户(即使在网络中断时也让他们登录)。
伪装成系统用户的可人工访问的帐户通常没有真实姓名,但具有登录 shell,以及密码集或 SSH 密钥,同时具有系统范围内的用户 ID。事实上,使用一个实际的系统帐户会是一个更好的伪装,它的删除会导致某些服务停止工作。但是你不能有任何硬性规则来检测潜在的攻击:根据定义,攻击者不遵守规则。
服务帐户和人工帐户由相同的命令管理并记录在相同的文件中。帐户创建命令可以有选项来为人类和服务用户设置合理的默认值,例如在适当范围内选择用户 ID,提示人类输入密码并禁用服务的密码验证。例如,Linux 上的adduservsadduser --system或useraddvs。useradd -r
| 归档时间: |
|
| 查看次数: |
94265 次 |
| 最近记录: |