4

我想使用 PAM 开发一个身份验证模块,但我无法让一个简单的示例正常工作。

对于初学者,我想做一个简单的 SSH 登录系统,如果用户输入 username backdoor,那么用户将无需密码即可登录(就像在 TRON Legacy 中一样)。

我尝试将本指南用作模板,但无法正常工作。到目前为止,这是我的代码:

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;
}

当我使用 name 登录时backdoor,我的权限被拒绝。我已尝试创建用户帐户,但仍会提示我输入密码。

当我使用有效用户登录时,我会看到“我在这里”打印输出。有没有更好的方法来调试这样的东西,还是主要是反复试验?

编辑:

/etc/pam.d/sshd在@include common-auth 之后添加了这个:

auth sufficient mypam.so

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

我没有修改 pam.conf (那里什么都没有)。我认为从 SSH 开始是最简单的,因为我不必每次都注销。

编辑:

我终于让它工作了。结果如下:

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

它是开源的,所以如果您有兴趣,请看一下!

4

1 回答 1

3

首先,如果之前需要的模块失败,充足的仍然会失败。既然您说您已将足够的行放在 common-auth 的包含之下,您可能会看到失败,因为 common-auth 中的某些必需模块已经拒绝访问。另外,您有 sshd 妨碍您。

我会把所有这些东西都排除在外,这样你就知道你的测试实际上是对你的 pam 模块的测试,而不是与其他东西的进一步交互。我会从一个简单的测试程序开始,比如这里的 /etc/pam.d/check_user 列出你的模块而不是 pam_unix。

于 2011-05-24T17:10:30.093 回答