GP92 Asked: 2018-06-04 09:22:30 +0800 CST2018-06-04 09:22:30 +0800 CST 2018-06-04 09:22:30 +0800 CST 没有 pam,ssh 或任何其他服务如何工作? 772 我不明白 ssh 或任何其他服务如何在没有 pam 的情况下工作。pam 定义了所有规则,如果我理解正确,调用其他模块来设置资源或限制等。 如果我们设置UsePam=No. 哪些模块负责身份验证、会话创建等? ssh login 1 个回答 Voted Best Answer telcoM 2018-06-04T13:51:24+08:002018-06-04T13:51:24+08:00 如果您设置UsePam no,那么sshd它本身将尽其所能完成 PAM 模块的工作。 由于sshd以 root 身份运行,它可以使用getspnam(3)函数从(或从 NIS、LDAP 或系统的 C 库支持的任何其他存储位置)获取用户的密码哈希和其他信息,/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。 当 shellsshd终止时,持有伪 TTY 主端的子进程将执行任何必要的清理操作,例如在wtmp文件中记录会话结束。 这大致是在 PAM 发明之前处理 Unix 会话的方式。
如果您设置
UsePam no
,那么sshd
它本身将尽其所能完成 PAM 模块的工作。由于
sshd
以 root 身份运行,它可以使用getspnam(3)
函数从(或从 NIS、LDAP 或系统的 C 库支持的任何其他存储位置)获取用户的密码哈希和其他信息,/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 会话的方式。