我不明白 ssh 或任何其他服务如何在没有 pam 的情况下工作。pam 定义了所有规则,如果我理解正确的话,调用其他模块来设置资源或限制等。
如果我们设置UsePam=No
. 哪些模块负责身份验证、会话创建等?
如果您设置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
处理此特定连接的子进程会将会话信息记录到utmp
和wtmp
文件,设置伪 TTY,然后fork()
另一个将采用用户的 UID 和组成员身份的子进程切换到用户的主目录并调用setsid()
成为会话领导者。这个过程将然后exec()
用户的shell。
当 shellsshd
终止时,持有伪 TTY 主端的子进程将执行任何必要的清理操作,例如在wtmp
文件中记录会话的结束。
这大致是在 PAM 被发明之前处理 Unix 会话的方式。
归档时间: |
|
查看次数: |
2561 次 |
最近记录: |