简单的PAM示例

问题描述

| 我想使用PAM开发身份验证模块,但是我无法获得一个简单的示例工作。 首先,我想做一个简单的SSH登录系统,如果用户输入用户名
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,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;
}
当我使用名称“ 0”登录时,我获得了拒绝权限。我曾尝试创建用户帐户,但是仍然提示输入密码。 当我以有效用户身份登录时,看到“我在这里”打印输出。有没有更好的方法来调试类似的东西,或者主要是反复试验? 编辑: 我在@include common-auth之后将其添加到我的
/etc/pam.d/sshd
中:
auth sufficient mypam.so
这是在另外2个.so文件之后,但是我很确定它每次都会执行。 我尚未修改pam.conf(那里没有任何内容)。我认为从SSH开始最简单,因为我不必每次都注销。 编辑: 我终于让它工作了。结果如下: https://github.com/beatgammit/simple-pam 它是开源的,所以如果您有兴趣,请看一下!     

解决方法

首先,如果先前所需的模块发生故障,足够的模块仍将失败。既然您说过将足够的行放在common-auth的包含下,您可能会看到失败,因为common-auth中的某些必需模块已经拒绝了访问。另外,您还可以使用sshd进行操作。 我会排除所有这些问题,所以您知道您的测试实际上是对pam模块的测试,而不是与其他事物的进一步交互。我将从一个简单的测试程序开始,例如此处的/etc/pam.d/check_user,列出您的模块而不是pam_unix。