是否可以在Linux中更改密码数据库文件(/etc/passwd)?

是否可以在Linux中更改密码数据库文件(/etc/passwd)?

是否可以将密码数据库文件(/etc/passwd)更改为其他文件。这种身份验证机制内部如何运作?它取决于 pam 吗?

答案1

您是对的:/etc/passwd/etc/shadow受到 的咨询pam_unix.so,它们是 PAM 的一部分。至少在现代 Linux 上是这样。您可以通过修补来更改此设置pam_unix.so。如果联机帮助页可信,则您无法更改系统数据库的位置。

而你确实不想这么做。/etc/passwd不仅用于身份验证,还用于(反向)名称解析以及查找用户的全名、shell 等。名称和位置是如此标准化,以至于移动它们几乎肯定会破坏 PAM 之外的东西。你必须修补的东西比你预想的要多得多。

更新:如果您出于安全原因尝试隐藏/etc/{passwd,shadow,group}文件,请不要担心。默默无闻的安全作为一项政策几乎没有什么帮助。让他们留在原地,收紧其余的政策。

更新:一个可能的解决方案

如果您有一些自定义软件,需要访问一组不同的用户/组数据库,您可以复制相关的 PAM 和 NSS 模块并打补丁他们使用您的自定义数据库。原始的 UNIX 数据库保留在原处,因此软件不会混淆,但您可以将 PAM 和 NSS 设置为在您需要的任何地方使用您的自定义模块,并使用对您有意义的任何策略。

保持 UNIX 数据库本质上是原始的,您就拥有了您想要的东西。这几乎就是PAM/NSS 模块的作用:它们提供radiusldap额外的(不是替代)凭证和用户/组信息的来源。

更进一步:您可以返回 PAM 和 NSS 并完全禁用 unix 数据库查找。将文件保留在旧软件中(当然,他们对用户/组数据库的看法将不准确,但至少不会损坏)。

答案2

您正在寻找的是pam_pwdfile模块。在 Debian/Ubuntu 上,该软件包是libpam-pwdfile(不确定 RedHat 派生发行版)。

包装内附README有说明如何使用它。

答案3

我不确定它是否可以开箱即用,但通过一些黑客攻击绝对是可能的。为此,您需要:

  1. 调整/破解 nsswitch 库(/lib/libnss_files.so 或 libnss_db.so - 检查您的 /etc/nsswitch.conf),以便它读取其他文件。
  2. 调整/修改 pam_unix 模块,以便它可以读取一些其他文件。

答案4

使用 NIS 或 LDAP 来验证您的用户。他们的密码不会存储在 /etc/{password/shadow} 文件中。

相关内容