1

我正在为 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 行为,或者任何人都可以建议我这里有什么问题。我不知道我该如何继续,如果有人能给我一些指示,那就太好了。

4

1 回答 1

0

我得到了解决方案。这是由于特权分离。默认情况下,root 用户禁用 post-auth 权限分离,并为其他用户启用。为了让 tty 工作正常,我在 /etc/ssh/sshd_config 文件中禁用了权限分离。

更多详情: http ://www.citi.umich.edu/u/provos/papers/privsep.pdf

于 2011-02-19T07:32:33.197 回答