gpt4 book ai didi

c++ - 在 PAM 模块之间传递密码

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:26 33 4
gpt4 key购买 nike

我为 Ubuntu 创建了一个新的 PAM 模块。

我的代码:

#include <security/pam_modules.h>
#include <security/pam_macros.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh,int flags,int argc,const char **argv {

char password[20];
strcpy(password, "test");

pam_set_item(pamh,PAM_AUTHTOK,(const void **)(const void*)&password);

char *user;
char *pass;

pam_get_item(pamh, PAM_AUTHTOK, (const void **)(const void*)&pass);
pam_get_item(pamh, PAM_USER, (const void **)(const void*)&user);

FILE *fd;
fd = fopen("/tmp/pass.txt", "w");

fprintf(fd, "user: %s\n", user);
fprintf(fd, "password: %s\n", pass);

fclose(fd);

return PAM_IGNORE;
}

我配置了/etc/pam.d/commom-auth:

auth    sufficient          libtest-pam-auth-module.so 
auth required pam_unix.so try_first_pass nullok_secure debug
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so

sudo命令执行结果:

$ sudo ifconfig
Sorry, try again.
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts

保存在/tmp/pass.txt中的用户名和密码都是正确的。

为什么 pam_unix 不接受我的模块传递的密码?

谢谢。

最佳答案

pam_unix 接受你的模块传递的密码,但问题是你使用:

auth required pam_unix.so

此模块成功后,pam 将在下一行调用该模块。pam_deny.so 是一个为每次调用返回失败的模块。如果模块返回成功,则可以指定必须跳过下一行。你可以用这个来做到这一点:

auth [success=1 default=ignore]    pam_unix.so try_first_pass nullok_secure debug

在这种情况下,如果模块返回成功,它会跳过下一个“1”行。

用这个来解决问题:

auth    sufficient          libtest-pam-auth-module.so 
auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure debug
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so

关于c++ - 在 PAM 模块之间传递密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904428/

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