我有一个Ubuntu服务器,所有用户通过SSH使用root帐户登录 . 我想禁止第二个用户登录,如果已经登录并显示一条消息通知第二个用户有人正在使用该服务器 .

我写了一个PAM模块,可以禁止第二次登录,但是在拒绝登录后我无法向用户显示消息,似乎调用对话回调不起作用 . 而且,我想获得第一个登录用户的名字(不是linux用户名)所以我需要显示一个提示,例如请输入您的姓名:,以便我可以显示正在使用该服务器的第二个用户 .

我在网上搜索过但找不到答案 . 所以,如果有人知道这一点,请帮助我 . 谢谢!

PS . 输入用户名和密码后调用此模块,但是可以先调用此模块吗?

#define PAM_SM_AUTH_
#include <stdio.h>
#include <security/pam_modules.h>

PAM_EXTERN
int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
{
    const struct pam_conv *pconv;
    pam_get_item(pamh, PAM_CONV, (const void**)&pconv);

    struct pam_message msg = {PAM_PROMPT_ECHO_ON, "Please input your name:"};
    const struct pam_message *pmsg = &msg;
    struct pam_response *presp;
    int ret = pconv->conv(1, &pmsg, &presp, pconv->appdata_ptr);

    // the message is not showd and the conv callback return PAM_CONV_ERR

    return PAM_SUCCESS;
}