我正在使用可以与我所在组织的 NIS 服务器通信的虚拟机。我对此没有太多经验,但我注意到我可以从主机成为另一个用户无需 NIS 服务器上的 root 密码。事实上,下面的提示并没有要求我输入密码。这种行为也有点奇怪;也许有人可以解释为什么sudo
即使我是 root 用户,它也无法正常工作。
[root@unsecurehost ~]# su - myusername
su: user myusername does not exist
[root@unsecurehost ~]# sudo su - myusername
Last login: Mon Feb 12 19:24:17 UTC 2018 on pts/0
Last failed login: Mon Feb 12 19:28:13 UTC 2018 on pts/0
There were 2 failed login attempts since the last successful login.
su: warning: cannot change directory to /network/path/home/myusername: No such file or directory
-bash-4.2$ id
uid=012345(myusername) gid=0123(companyname) groups=0123(companyname),9999(othergroupname) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
我的uid
、gid
、 和groups
是正确的。
通常我会认为这不是什么问题,但它试图访问/network/path/home/myusername
,这是我的(联网)主目录。我没有安装此存储,但我可以在这台主机上安装。
我只配置了yp.conf
文件,我们的机器上的任何人都可以读取它并运行ypbind
。
有可能利用这一点吗?有些用户在这里有敏感信息,如果我可以成为另一个用户并访问文件,那么这是一个安全漏洞。我还没有在实际情况下尝试过,因为我想相信这是不可能的(也许网络存储不允许这样做,或者“上下文”字段很重要?)。这现在不是一个非常大的问题,但我们正在开发允许用户管理员的虚拟机,这可能会允许我们的任何用户成为 root。
请让我知道这里发生了什么事。
答案1
您所演示的不是问题。
您没有从 NIS 获取任何“访问令牌”。您获得的唯一信息是相同的字段这些都存在于/etc/passwd
– UID、GID、登录 shell、主目录 – 而你唯一要做的就是告诉操作系统把你的 UID 设置为 012345。
即使没有 NIS,您也可以轻松执行相同操作,只需创建具有相同 UID 的本地帐户即可。
但是,这并不一定授予对网络上其他计算机的任何访问权限。仅仅知道你的 UID 不足以向其他系统进行身份验证,并且知道在哪里主目录并不意味着您可以访问它。
话虽如此,但有一个很大的例外:NFS。
你没有证明或许才是真正的问题。
也许网络存储不允许这样做
这是这里最重要的问题——它取决于用于访问网络存储的协议以及存储服务器的配置方式。
大多数(现代)网络协议始终要求客户端进行身份验证。例如,存储服务器可能需要密码、证书或 Kerberos 票证 - 这些信息无法通过 NIS 获取。
然而,NFS在其默认配置 (auth=sys) 中是一个例外——它确实盲目信任客户端发送的 UID。如果客户端表示它代表 UID 12345 发送请求,他们将能够访问 UID 12345 拥有的文件,没有问题。
因此,请仔细检查您用于挂载网络存储的方法。如果是 NFS 且没有任何 auth= 规范,则您的文件服务器完全开放 - 这不是 NIS 的错。
另一个类似的例外是 rsh 和 rcp,它们也信任客户端发送的用户名,但是希望现在已经没有人使用这些协议了。与此同时,带有 auth=sys 的 NFS 仍然非常流行。
答案2
NIS 存在的前提是所有参与系统都是值得信赖的 —— 这意味着,系统管理员允许您sudo su
知道他在做什么。
没有任何保护措施(与任何系统一样)可以抵御恶意管理员用户。