简单的PAM例子

我想开发一个使用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。