gpt4 book ai didi

c - 简单的 PAM 示例

转载 作者:太空狗 更新时间:2023-10-29 11:11:01 27 4
gpt4 key购买 nike

我想使用 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

它是开源的,所以如果您有兴趣,请看一看!

最佳答案

首先,如果之前的必需模块失败,sufficient 仍然会失败。由于您说您已经将足够的行放在 common-auth 的包含之下,您可能会看到失败,因为 common-auth 中的某些必需模块已经拒绝访问。另外,您还有 sshd 妨碍。

我会把所有这些东西都拿走,这样你就知道你的测试实际上是对你的 pam 模块的测试,而不是与其他东西的进一步交互。我将从一个简单的测试程序开始,比如 here。使用/etc/pam.d/check_user 列出您的模块而不是 pam_unix。

关于c - 简单的 PAM 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6105836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com