如果没有 pam,ssh 或任何其他服务如何工作?

如果没有 pam,ssh 或任何其他服务如何工作?

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

有人可以解释一下如果我们设置 SSH 的行为方式吗UsePam=No?哪些模块负责身份验证、会话创建等?

答案1

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

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

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

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

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

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

相关内容