CentOS 7:为密码认证启用河豚哈希

syn*_*-dj 5 password centos glibc

在我们的组织中,我们正在为许多本地帐户分发预先散列的密码值。目前,这些帐户的密码使用 Blowfish ( $2a$[...]) 或 Blowfish-8-bit ( $2y$[...])进行哈希处理。我们使用的其他发行版能够处理这个问题,但 RedHat / CentOS 似乎故意不支持 glibc 中的 Blowfish

有什么方法可以让 CentOS/RedHat 系统处理 Blowfish 哈希值,而不会通过标准更新渠道严重破坏其可服务性?

我正在使用简单的 kickstart 配置和最少的软件包选择来部署 CentOS 7.2:

%packages --nobase --ignoremissing
@core
kexec-tools

%end
Run Code Online (Sandbox Code Playgroud)

syn*_*-dj 2

在 Ulrich Schwarz 在问题的评论中提到自定义 PAM 模块之后,我想我可以去看看 SLES(使 Blowfish 成为默认值)正在使用什么。

结果发现它是一个独立的模块,pam_unix2.so与 CentOS 系统上的任何内容都不冲突。作为概念验证,我将/lib64/security/pam_unix2.soSLES 11 SP4 系统复制到/usr/lib64/security/pam_unix2.soCentOS 主机上,并下载并安装了其依赖项libxcrypt,它也是一个 SuSE 软件包,但可以在 CentOS 7 上用于此狭隘目的。

添加

auth        sufficient    pam_unix2.so
Run Code Online (Sandbox Code Playgroud)

允许/etc/pam.d/system-auth我在控制台上根据 Blowfish 加密的密码进行身份验证。

为了确保authconfig下次调用时不会破坏配置,/etc/pam.d/system-auth指向的符号链接/etc/pam.d/system-auth-ac应替换为/etc/pam.d/system-auth-ac.

底线:SuSE 的pam_unix2模块似乎是让 Blowfish 哈希被接受的侵入性最小的方法,尽管这也意味着我需要分别监视pam_unix2libxcrypt的安全公告。