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

/usr/lib/pam中的所有库都是.so,但是我使用Xcode构建的库是.bundle或.dylib。我是否需要采取任何其他步骤来使PAM加载这些文件? (此处为OSX noobie)。

代码:

#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文件)



如果阅读有关pam-policies的信息,它将指出有4个模块链,每个功能链1个(身份验证,帐户, session ,密码)。

pam-policies doc指出:-



由于调用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/

10-12 04:32