Я пишу модуль PAM для SSH для обеспечения еще одного уровня аутентификации. Для этого мне нужен идентификатор терминала в функции close_session() и pam_sm_setcred() в модуле PAM, в то время как OpenSSH жестко закодировал его «ssh». Я сделал несколько изменений в коде OpenSSh, чтобы правильно установить идентификатор терминала. Эти изменения были:Поведение OpenSSH при входе в систему как учетная запись root и non-root
добавил do_pam_set_tty() в session_pty_req (Session * с) функции в session.c и добавил do_pam_set_tty() в mm_pty_allocate() функция в monitor_wrap.c
Он отлично работает для корня и I получить соответствующую функцию tty в функции pam_sm_cred() и pam_sm_close_session().
Но используя тот же код, когда я пытаюсь выполнить ssh через учетную запись без root, я получаю tty в pam_sm_close_session(), но не в pam_sm_cred(). Я не уверен, почему ssh ведет себя по-разному для учетных записей root и non-root.
Есть ли что-нибудь, что вызывает поведение SSH для учетных записей root и non-root, или кто-нибудь может предложить мне, что здесь может быть неправильно. Я понятия не имею, как я могу продолжить, и было бы здорово, если бы кто-то мог дать мне несколько указателей.