gpt4 book ai didi

macos - 为 OSX 编写可插入身份验证模块 (PAM)

转载 作者:行者123 更新时间:2023-12-02 01:46:16 26 4
gpt4 key购买 nike

我正在尝试让一个基本的 PAM 与 OSX 上的屏幕保护程序身份验证一起使用。代码非常简单,只要对所有内容都返回 true(类似于 pam_permit)。我希望当用户想要从屏幕保护程序返回到他们的帐户时,无论他们输入什么密码,pam_sm_authenticate 都会返回 true。但是,这不起作用,并且仍然需要正确的用户密码才能从屏幕保护程序返回。我究竟做错了什么。具体来说:

/usr/lib/pam 中的所有库都是 .so,但我使用 Xcode 构建的库是 .bundle 或 .dylib。我需要采取任何额外的步骤来让 PAM 加载这些吗? (这里是 OSX 新手)。

代码:

#define PAM_SM_ACCOUNT
#define PAM_SM_AUTH
#define PAM_SM_PASSWORD
#define PAM_SM_SESSION

#include <security/pam_appl.h>
#include <security/pam_modules.h>

PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return(PAM_SUCCESS);
}

PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return(PAM_SUCCESS);
}

PAM_EXTERN int pam_sm_acct_mgmt(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) {
return(PAM_SUCCESS);
}

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_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return(PAM_SUCCESS);
}

我尝试将上述内容构建到 Xcode 中的共享库中,输出为 OSXLoginBundle.bundle(或 .dylib),并将此 bundle/dylib 复制到/usr/lib/pam 中。我已将/etc/pam.d 中的屏幕保护程序配置文件更改为
# screensaver: auth account
auth sufficient OSXLoginBundle.bundle
account required pam_opendirectory.so
account sufficient pam_self.so
account required pam_group.so no_warn group=admin,wheel fail_safe
account required pam_group.so no_warn deny group=admin,wheel ruser fail_safe

最佳答案

我假设您的代码正在被处理并且您已经检查过了,我认为您误解了 pam 的工作原理。

引用 pam.conf file (是的,我知道这里没有,但我相信这仍然适用于 pam.d 文件)

while the order in which lines for the same service and facility appear is significant, the order in which the individual services and facilities are listed is not



如果你读到 pam-policies ,它声明有 4 个模块链,每个设施一个(身份验证、帐户、 session 、密码)。

pam-policies 文档指出:-

When an application calls pam_start(3), the PAM library loads the policy for the specified service and constructs four module chains (one for each facility.)



作为调用 pam 的应用程序可以访问 6 authentication functions (原语),根据 4 个设施进行分组,当应用程序(在本例中为屏幕保护程序)调用不在“auth”设施下的原语时,它将与您的 pam 模块不匹配,而是来自相关的模块链。

因此,当调用应用程序调用 pam_acct_mgmt ,它将引用/etc/pam.d 中的屏幕保护程序文件并匹配相关的工具,在本例中为“帐户”,其中一些模块被标记为“必需”。

如果根据“ Chains and Policies”文档将他们的策略更改为“可选”,这些模块的结果将被忽略。

关于macos - 为 OSX 编写可插入身份验证模块 (PAM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515077/

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