我有一台服务器。我的服务器是安全的,但让我们想象一下一个高手黑客进入。他现在可以查看/etc/passwd
和/etc/shadow
。我想将该文件重命名/etc/passwd
为类似的名字/etc/xxanoda
。
我以为我可以建立一个链接,但对于黑客来说这很容易做到ls -l
。
是否可以重命名这些文件并且仍能运行操作系统,而不会出现兼容性问题,或者它完全没用?只是为了寻求知识。
答案1
这文件系统层次标准对于类 Unix 系统,文件位于/etc/passwd
固定位置,因此工具通常被硬编码以在该位置查找。虽然理论上您可以重新编译所有相关实用程序以查找新位置,但任何攻击者都可以在这些二进制文件中查找字符串以找到新文件,或者使用正则表达式查找具有passwd
类似内容的文件。
该shadow
文件应该只有 可以读取root
(也可能是名为 的组可以shadow
读取)。如果攻击者设法获得系统的 root 访问权限,他们就拥有了完全的控制权,此时他们是否能够读取您的 passwd/shadow 文件就无关紧要了。
可以想象,在某些情况下,将文件放置在不预期的位置可能会有所帮助,例如,如果您有一个配置不当的 Web 服务器,允许某人请求http://myserver/../../etc/passwd
,但一般来说,这种间接方式需要大量的工作才能获得最小的安全效益。
答案2
最好的办法是,用你的话来说,就是“完全没用”。(它不会给入侵者设置额外的障碍)
/etc/passwd
确实包含帐户名称,但任何具有系统 shell 访问权限的人都能够找到它们。
/etc/shadow
包含敏感信息(密码哈希值),但只有 root 才能读取。如果入侵者设法获得 root 权限 - 那么你怎么拼写灾难?
答案3
在现代 Unix(以及类 Unix,包括 Ubuntu)中,/etc/passwd
不包含任何秘密。重命名它会比它的价值更麻烦,因为需要重建多少实用程序才能在新位置找到它。
/etc/shadow
是另一回事,因为该文件中有秘密,但重命名它无济于事。它只有 root 才能读取,因此即使黑客以其他用户的身份进入系统,也不足以获取该文件。这就是为什么/etc/passwd
首先要取消密码的原因:每个人都需要能够读取/etc/passwd
,但只有 root 才能获取实际密码,因此密码被移动到只有 root 才能读取的文件中。
如果黑客做获得 root 权限后,重命名也无法拯救你。一个简单的递归grep
就可以为黑客提供一个/etc/shadow
类似 格式的文件列表,然后黑客只需浏览它们即可找到他想要的数据。你最多耽误了他几个小时,也可能更少:同样,不值得花费大量时间来修改和重新编译所有依赖于/etc/shadow
位置的实用程序。
答案4
/etc/passwd
虽然重命名和文件可能没有用/etc/shadow
,但如果您想要增加安全性,您可能需要查看 PAM(可插入身份验证模块)和 NSS(名称服务交换机)。像这儿。
PAM 可用于添加身份验证模块,这些模块不是从标准文件读取身份验证信息,而是从其他来源(如 ldap 或数据库)读取。使用它意味着可以/etc/shadow
几乎完全消除。
NSS 通过将部分名称解析(例如此用户属于哪个组)与标准文件(/etc/passwd
、/etc/groups
)独立,对 PAM 进行了补充。使用 NSS 意味着您的 passwd 文件可能只包含 root 的后备选项,仅此而已。使用 SSH 密钥来验证 root 登录也将消除在影子文件中设置 root 密码的需要(尽管如果 SSH 连接中断,可能需要这样做)。
或者,如果您不想通过单独的数据库或 ldap 主机对用户进行身份验证,您也可以创建自己的 PAM 和 NSS 模块,从非标准文件中读取数据,尽管我不推荐此选项。
当您想要尝试使用它们时,永远不要忘记保留某种已知的、有效的身份验证层,否则您可能会将自己锁定在系统之外,即使使用 root 权限。
请注意,并非所有应用程序都支持 PAM(但很多应用程序都支持)。但是,NSS 可用于为不支持 PAM 的应用程序实施身份验证,我读到的一些有关 NSS 的网站实际上建议采用这种方法。但是,这意味着 NSS 模块将向任何可以访问 NSS 身份验证层的人提供(可能)散列密码,这几乎总是您想要避免的事情(它基本上与授予非 root 读取影子文件的权限相同)!因此,如果您要采用这种方法,请始终确保 NSS 仅用于向用户提供基本数据(如 的内容/etc/passwd
),并使用 PAM 作为身份验证层。