我想使用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 回答
首先,如果先前所需的模块发生故障,则足够的仍然会失败 . 既然你说你已经将足够的行放在common-auth的包含之下,那么你可能会看到失败,因为common-auth中的某些必需模块已经拒绝访问 . 另外,你有sshd妨碍了 .
我开始使用一个简单的测试程序,如here,其中/etc/pam.d/check_user列出了你的模块,而不是pam_unix .