首页 文章

简单的PAM示例

提问于
浏览
3

我想使用PAM开发一个身份验证模块,但是我在使用一个简单的示例时遇到了麻烦 .

对于初学者,我想做一个简单的SSH登录系统,如果用户输入用户名 backdoor ,那么用户将在没有密码的情况下登录(就像在TRON Legacy中一样) .

我尝试使用this guide作为模板,但我无法让它工作 . 到目前为止,这是我的代码:

PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
    return PAM_SUCCESS ;
}

PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
    int retval;

    printf("I'm here");

    const char* pUsername;
    retval = pam_get_user(pamh, &pUsername, "Username: ");
    if (retval != PAM_SUCCESS) {
        return retval;
    }

    if (strcmp(pUsername, "backdoor") != 0) {
        return PAM_AUTH_ERR;
    }
    return PAM_SUCCESS;
}

当我使用名称 backdoor 登录时,我被拒绝许可 . 我尝试过创建用户帐户,但仍然会提示输入密码 .

当我使用有效用户登录时,我看到“我在这里”打印输出 . 有没有更好的方法来调试这样的东西,或者它主要是试验和错误?

编辑:

在@include common-auth之后我把它添加到了我的 /etc/pam.d/sshd

auth sufficient mypam.so

这是在其他2个.so文件之后,但我很确定它每次都会被执行 .

我没有修改过pam.conf(那里没有任何东西) . 我认为从SSH开始是最容易的,因为我不必每次都注销 .

编辑:

我终于搞定了 . 这是结果:

https://github.com/beatgammit/simple-pam

它是开源的,所以如果你有兴趣,看看吧!

1 回答

  • 3

    首先,如果先前所需的模块发生故障,则足够的仍然会失败 . 既然你说你已经将足够的行放在common-auth的包含之下,那么你可能会看到失败,因为common-auth中的某些必需模块已经拒绝访问 . 另外,你有sshd妨碍了 .

    我开始使用一个简单的测试程序,如here,其中/etc/pam.d/check_user列出了你的模块,而不是pam_unix .

相关问题