ssh 或任何其他服务如何在没有 pam 的情况下工作?

GP9*_*P92 3 login ssh pam

我不明白 ssh 或任何其他服务如何在没有 pam 的情况下工作。pam 定义了所有规则,如果我理解正确的话,调用其他模块来设置资源或限制等。

如果我们设置UsePam=No. 哪些模块负责身份验证、会话创建等?

tel*_*coM 8

如果您设置UsePam no,那么sshd它本身将尽其所能完成 PAM 模块的工作。

由于sshd以 root 身份运行,因此可以使用getspnam(3)函数从/etc/shadow(或从 NIS、LDAP 或系统的 C 库支持的任何其他存储位置)获取用户的密码哈希和其他信息,通过查看密码哈希算法来选择散列的开头,然后getspnam(3)使用结果中的盐散列用户输入的密码crypt(3)。然后将结果与 检索到的完整密码哈希进行比较getspnam(3)。如果匹配,则密码验​​证成功。

帐户验证步骤再次非常简单:密码过期信息包含在getspnam(3)结果中,并再次检查用户的 shell 是否存在并列在/etc/shells.

会话创建包括许多步骤,其详细信息取决于运行服务的 Linux 或 Unix 类型。但通常,对于 shell 会话,sshd处理此特定连接的子进程会将会话信息记录到utmpwtmp文件,设置伪 TTY,然后fork()另一个将采用用户的 UID 和组成员身份的子进程切换到用户的主目录并调用setsid()成为会话领导者。这个过程将然后exec()用户的shell。

当 shellsshd终止时,持有伪 TTY 主端的子进程将执行任何必要的清理操作,例如在wtmp文件中记录会话的结束。

这大致是在 PAM 被发明之前处理 Unix 会话的方式。