Linux 在哪里检查密码?

Linux 在哪里检查密码?

我知道密码存储在/etc/shadow

然而,在登录过程中,我假设 Linux 将您的用户名和密码作为参数,使用相同的算法加密您的密码,并将其与存储在影子中的密码进行比较。

我的问题是,这个过程在哪里发生? (代码)我尝试搜索 PAM,但也找不到任何有用的东西。

答案1

在 PAM 中,对于存储在 中的本地密码/etc/shadow,检查密码的工作是由pam_unix

在幕后,验证是由crypt功能。 (实际上,大多数情况下,crypt_r.) 请注意,尽管有名称,此函数不会加密或解密密码,它哈希值密码。中的密码字段/etc/shadow包含散列参数以及实际散列值。

pam_unix 模块的源代码是Linux-PAM。该函数的源代码crypt是 C 库的一部分(glibc)。

答案2

我知道密码存储在 /etc/shadow 中

正如 Gilles 已经说过的,只有密码哈希值存储在 中/etc/shadow,而且,这只是可能的位置之一,它们可能全局存储在ldap服务器或NIS表上。

然而,在登录过程中,我假设 Linux 将您的用户名和密码作为参数,使用相同的算法加密您的密码,并将其与存储在影子中的密码进行比较。

该过程比这灵活得多。根据PAM配置,系统可能会按顺序检查多个模块,如果其中一个模块成功并被声明为足够,或者如果一个模块失败并被声明为必需,则系统将停止。模块能够与尝试登录的用户建立对话,因此提供的不一定是一对用户名/密码。例如,使用rlogin( pam_rhosts_auth) 时,无需提供任何密码即可授予用户访问权限。必须警告他密码即将过期、提示他更改过期密码以及类似的交互任务。

我的问题是,这个过程在哪里发生? (代码)我尝试搜索 PAM,但也找不到任何有用的东西。

Gilles 也已经回答了这个问题,pam_unix正在处理/etc/passwdet/etc/shadow文件条目。

相关内容