在我们的生产 Linux 服务器上执行的安全审核中,我们被要求删除 nobody 用户(如果没有应用程序正在使用它)。
我检查了一下,发现没有“nobody”用户拥有的文件。
find / -path /proc -prune -o -user nobody -ls
“nobody”用户没有登录外壳,类似地任何没有登录的用户,它会造成任何安全威胁吗?是否建议在没有登录 shell 的情况下删除这些用户?
# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
请给出你的想法。
答案1
系统帐户(例如 root、sys、nobody、bin、daemon 等)的存在一直是我多年来经历的许多安全审核的主题,它实际上可以归结为几件事。
是的,这些类型的帐户可能是安全漏洞,特别是如果它们启用了 shell:
坏的
bin:x:1:1:bin:/bin:/bin/sh
好的
bin:x:1:1:bin:/bin:/sbin/nologin
配置为/sbin/nologin
或有时/bin/false
这些帐户将无法登录,但它们仍然可以拥有进程。他们也可以拥有文件。
文件所有权
让我们首先获取文件所有权,因为它是两者中更容易的一个。
将这些条目纳入文件所有权/etc/passwd
并/etc/group
与文件所有权相关会带来零风险。在这种能力下,它们的存在使得工具的输出如下ls
所示:
在 /etc/passwd 中有条目
$ ls -l woof -rwxrwxr-x 1 saml saml 20284 May 31 2012 woof
没有进入 /etc/passwd
$ ls -n woof -rwxrwxr-x 1 500 501 20284 May 31 2012 woof
因此,从这个角度来看,管理员能够看到所有者的名称与写入磁盘上的 UID/GID 会更好。但这些条目没有提供关于可以在系统上创建哪些 UID/GID 的额外强制措施,例如:
$ touch afile && chown 10000:10000 afile
$ ls -l | grep afile
-rw-r--r-- 1 10000 10000 0 Jun 11 05:11 afile
拥有这些条目所带来的唯一真正的风险是/etc/passwd
,/etc/group
它使潜在的攻击者能够隐藏文件系统中的文件,并通过赋予文件更真实的所有权来使它们看起来像是属于它们。
流程所有权
这确实是大多数审计师在进行审计时所困扰的问题系统帐户中的条目/etc/passwd
。他们的印象是该文件中的条目限制了范围。但这就是问题所在。同样,它/etc/passwd
不会限制您创建具有零星 UID/GID 的文件的能力,也不会强制进程以它们想要的任何 UID/GID 运行。
请参阅标题为这样的问答:setuid 设置很大的数字。
在 UNIX 中,有 4 个 C 函数控制进程的所有者:
setuid()
- 设置用户IDseteuid()
- 设置有效用户IDsetgid()
- 设置组IDsetegid()
- 设置有效组ID
如果您运行的帐户具有更高的权限,那么您可以使用任何您想要的内容调用这些函数。例如:
setuid(500); setuid(0);
答案:500/500(第一次调用生成 500/500,第二次调用失败)。seteuid(500); setuid(0);
答案:0/500(第一次调用生成 500/500,第二次调用生成 0/500)。seteuid(600); setuid(500);
答案:500/500(第一次调用生成 600/500,第二次调用生成 500/500)。seteuid(600); setuid(500);
setuid(0);答案:0/500(第一次调用生成 600/500,第二次生成 500/500,第三次生成 0/500)。
上面的代码借自这里:Set-UID 特权程序 - 讲义。
因此考虑到用户没有人没有提升的权限(即sudo
),没有选项可以让服务器/服务运行为没有人将能够产生任何子进程,除了没有人。如果此服务器/服务以无人身份运行,则只有其拥有的文件受到损害没有人就会有危险。
服务
在我处理保护系统的过程中,真正需要关注的最关键领域是给定系统上运行的服务以及该系统上安装的软件。
对于生产系统,安装绝对不应该包含任何开发工具,例如 gcc/g++,而只应该运行基本服务。应制定更新策略来定期更新该系统上安装的软件。
综上所述,这些都与文件中系统相关活动的其他帐户的存在无关/etc/passwd
。
视窗
我在这里提到这一点是因为最终,十分之九的审核员都会熟悉 Windows 安全性,而他们可能不太熟悉 UNIX 安全性。
如果您查看 Windows 系统,您会看到十几个不直接与特定用户关联的用户帐户。这些是系统帐户,它们的用途与帐户(例如没有人供应。如果没有它们,或者如果它们被禁用,Windows 系统将无法有效运行。对于 UNIX 系统也是如此。
通常,当以这种方式解释它们时,大多数审计员都可以理解为什么这些帐户可以/需要保留在需要它们的特定系统上。
参考
答案2
IIRC 守护进程以无人身份运行是很常见的。因此,很明显,启动后他们没有比必要的更多的权利(没有)。
例如,如果我这样做:
ps -u nobody
在我的系统上它显示dnsmasq
为一个进程。
我找不到确认信息,但我认为删除这些帐户并不明智,我不确定使用该帐户名称的进程是否有合理的后备。