我想使用 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
它是开源的,所以如果您有兴趣,请看一下!