典型的Linux系统不仅具有系统的实际用户帐户,还具有各种系统帐户。
是否有任何文件(例如/etc/passwd
守护进程)或其他可以定义帐户的资源?
我听说可以将帐户伪装为服务帐户,我正在尝试在计算机中查找类似的帐户。
答案1
守护进程用户和有血有肉的用户列在同一个文件中。“/etc/passwd
守护进程的类似文件”是/etc/passwd
。
人类与系统用户之间没有正式的定义。内核并不关心(除了向 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。事实上,使用实际的系统帐户会是更好的伪装,删除该帐户会导致某些服务停止工作。但你不能有任何硬性规则来检测潜在的攻击:根据定义,攻击者不遵守规则。
答案2
没有理由拥有单独的用户定义文件。系统用户和真实用户在技术上并不是分离的,而是在组织上分离的:通过获取其 UID 的范围来分离。看看文件/etc/login.defs
。我的 openSUSE 有这些条目:
SYSTEM_UID_MIN 100
SYSTEM_UID_MAX 499
UID_MIN 1000
UID_MAX 60000
发行版工具使用这些值来区分这两个组。但是,如果您创建了一个 UID 300 的用户帐户,那么它可能不会显示在登录菜单中,但您可以像使用其他帐户一样使用该帐户。
答案3
如果您确实想拆分用户和系统帐户(阅读其他帖子上的一些评论,看起来您对此很好奇),您可以将所有系统用户保留在files
(即 /etc/passwd)数据库中并将 people 用户在第二个数据库中(有点像你正在做 LDAP)。
为此,您可以使用 Berkeley DB NSS 模块(通过名为 的额外 glibc 包在许多系统上可用nss_db
)。我不确定你正在使用什么操作系统,但这个网站提供了一些关于 Linux 的见解:http://www.linuxfromscratch.org/hints/downloads/files/nss_db.txt
这不适合胆小的人,因为文档并不丰富,但如果您想了解更多有关此类内容如何工作的信息,那么尝试一下可能会很有趣(@Hauke Laging 关于实现您自己的内容的建议是也很棒)。
答案4
大多数守护进程以 root 身份运行,少数守护进程(出于安全原因,以限制其造成危害的能力)以自己的用户身份运行。它们列在/etc/passwd
文件中。大多数发行版将“系统用户”的 UID 限制为某个值,例如 500 或 1000,以便提供线索。一些守护进程有 GECOS(用户描述)条目,表示“守护进程”,其他守护进程有奇怪的外壳。但也存在用于 NFS 和其他用途的虚拟用户。