我想开发一个使用PAM的authentication模块,但是我无法获得一个简单的例子。
对于初学者来说,我想做一个简单的SSHlogin系统,如果用户input用户名backdoor
,那么用户将无需密码login(就像在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; }
当我以后门名login时,我被拒绝了权限。 我已经尝试创build用户帐户,但仍然会提示input密码。
当我用有效的用户login时,我看到“我在这里”打印输出。 有没有更好的方法来debugging这样的事情呢,还是主要是试错?
编辑:
在@include common-auth之后,我将它添加到我的/etc/pam.d/sshd
:
auth sufficient mypam.so
这是另外两个.so文件之后,但我很确定它每次都被执行。
我没有修改pam.conf(那里没有任何东西)。 我认为,以SSH开始将是最简单的,因为我不必每次都注销。
编辑:
我终于搞定了。 结果如下:
https://github.com/beatgammit/simple-pam
它是开源的,所以如果你有兴趣,请看看!
首先,如果以前需要的模块发生故障,则足够的仍然会失败。 既然你说你已经把你的足够的线放在common-auth的include下,你可能会看到一个失败,因为common-auth中的一些需要的模块已经拒绝了访问。 另外你有sshd阻碍。
我会把所有这些东西都拿出来,所以你知道你的测试是对你的pam模块的测试,而不是与其他东西进一步的交互。 我将从一个简单的测试程序开始,像这里的/etc/pam.d/check_user列出你的模块而不是pam_unix。