c-简单的PAM示例

我想使用PAM开发身份验证模块,但是我无法获得一个简单的示例工作.

首先,我想做一个简单的SSH登录系统,如果用户输入用户名后门,则该用户无需密码即可登录(就像在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;
}

当我使用后门名登录时,我获得了拒绝权限.我尝试创建用户帐户,但是仍然提示输入密码.

当我以有效用户身份登录时,看到“我在这里”打印输出.有没有更好的方法来调试类似的东西,或者主要是反复试验?

编辑:

我在@include common-auth之后将其添加到我的/etc/pam.d/sshd中:

验证足够的mypam.so

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

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

编辑:

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

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

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

解决方法:

首先,如果先前所需的模块发生故障,足够的模块仍将失败.既然您说过将足够的行放在common-auth的包含下,您可能会看到失败,因为common-auth中的某些必需模块已经拒绝了访问.另外,您还可以使用sshd进行操作.

我会排除所有这些问题,所以您知道您的测试实际上是对pam模块的测试,而不是与其他东西的进一步交互.我将从一个简单的测试程序开始,例如一个here,其中带有/etc/pam.d/check_user而不是pam_unix列出您的模块.

上一篇:CentOS 8搭建vsftpd服务器


下一篇:果盟广告SDK