我正在为 SSH 编写一个 PAM 模块来强制执行一层身份验证。为此,我需要 PAM 模块中的 close_session() 和 pam_sm_setcred() 函数中的终端 ID,而 OpenSSH 将其硬编码为“ssh”。我对 OpenSSh 代码做了一些更改,因此它可以正确设置终端 ID。这些变化是:
在 session.c 的 session_pty_req(Session *s) 函数中添加 do_pam_set_tty() 并在 monitor_wrap.c 的 mm_pty_allocate() 函数中添加 do_pam_set_tty()
它适用于 root 并且我在 pam_sm_cred() 和 pam_sm_close_session() 函数中获得了适当的 tty。
但是使用相同的代码,当我尝试通过非 root 帐户进行 ssh 时,我在 pam_sm_close_session() 中获得了 tty,但在 pam_sm_cred() 中没有。我不确定为什么 ssh 对于 root 和非 root 帐户的行为不同。
是否有任何东西会触发 root 和非 root 帐户的 SSH 行为,或者任何人都可以建议我这里有什么问题。我不知道我该如何继续,如果有人能给我一些指示,那就太好了。