我正在为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。
但是使用相同的代码,当我尝试ssh通过非root帐户时,我在pam_sm_close_session()中获取tty但在pam_sm_cred()中没有。我不确定为什么ssh对root和非root帐户的行为有所不同。
是否存在触发root和非root帐户的SSH行为的任何内容,或者有人可以告诉我这里可能出错的地方。我不知道如何继续进行,如果有人能给我一些指示,那就太好了。
答案 0 :(得分:0)
我得到了解决方案。这是由于特权分离。对root用户禁用post-auth权限分离,默认情况下为其他用户启用。为了解决这个问题,我在/ etc / ssh / sshd_config文件中禁用了权限分离。
了解更多详情: http://www.citi.umich.edu/u/provos/papers/privsep.pdf