PAM从入门到精通(十)

接前一篇文章:PAM从入门到精通(九)

本文参考:

《The Linux-PAM Application Developers' Guide》

先再来重温一下PAM系统架构:

更加形象的形式:

五、主要函数详解

8. pam_setcred

概述:

设置用户凭证。

函数声明:

#include <security/pam_appl.h>
int pam_setcred ( pamh , flags );
pam_handle_t * pamh ;
int flags ;

详细描述:

pam_setcred函数用于建立、维护和删除用户的资格(凭据)。在对用户进行身份验证之后,在为用户打开会话之前(使用pam_open_session()),应该调用它来设置凭据。应在会话关闭后删除凭据(使用pam_close_session())。

凭据(credential)是用户所拥有的东西。它是一些属性,如Kerberos票证或者构成给定用户的唯一性的补附加组成员资格。在Linux系统上,用户的UID和GID也是凭据。但是,已经决定这些属性(以及用户所属的默认补充组)是应由应用程序而不是PAM直接设置的凭据。应用程序应在调用此函数之前建立此类凭据。例如,initgroups()(或等效操作)应该(已)被执行。

参数说明:

  • pam_handle_t *pamh

pamh参数是通过先前调用pam_start()获得的身份验证句柄。

  • int flags

有效标志,其中任何一个可以与PAM_SILENT进行逻辑"或"运算,它们是:

PAM_ESTABLISH_CRED

初始化用户的凭据。

PAM_DELETE_CRED

删除用户的凭据。

PAM_REINITIALIZE_CRED

完全重新初始化用户凭据。

PAM_REFRESH_CRED

延长现有凭据的生命期(使用期限)。

返回值:

  • PAM_BUF_ERR:内存缓冲区错误。
  • PAM_CRED_ERR:设置用户凭据失败。
  • PAM_CRED_EXPIRED:用户凭据已过期。
  • PAM_CRED_UNAVAIL:检索用户凭据失败。
  • PAM_SUCCESS:数据已成功存储。
  • PAM_SYSTEM_ERR:NULL指针被传递给PAM句柄,函数被模块调用或发生其它系统错误。
  • PAM_USER_UNKNOWN:身份验证模块未知用户。

实例:

实例1. 一般性代码

cpp 复制代码
    /* 建立认证服务的用户证书*/
    status = pam_setcred(pamh, PAM_ESTABLISH_CRED);
    if (status != PAM_SUCCESS)
       exit(status);

实例2. SDDM中的代码

参见SDDM包源码目录src/helper/backend/PamHandle.cpp中的PamHandle::setCred函数。

代码如下:

cpp 复制代码
    bool PamHandle::setCred(int flags) {
        m_result = pam_setcred(m_handle, flags | m_silent);
        if (m_result != PAM_SUCCESS) {
            qWarning() << "[PAM] setCred:" << pam_strerror(m_handle, m_result);
        }
        return m_result == PAM_SUCCESS;
    }

更多函数请看后续文章。

相关推荐
ManageEngine卓豪9 个月前
如何监控特权帐户,保护敏感数据
pam·敏感数据保护·特权账户监控
ManageEngine卓豪1 年前
适用于 Linux 和 Unix 的特权访问管理
linux·unix·pam·特权访问管理
岬淢箫声1 年前
如何通过PAM禁止部分用户登录
linux·ubuntu·centos·ssh·pam·sssd
ManageEngine卓豪1 年前
零信任特权访问管理
零信任·pam·特权访问·特权访问管理
蓝天居士1 年前
PAM从入门到精通(十九)
pam·linux安全
蓝天居士1 年前
PAM从入门到精通(十六)
pam·linux安全
蓝天居士1 年前
PAM从入门到精通(十五)
pam·linux安全
蓝天居士1 年前
PAM从入门到精通(十二)
pam·linux安全
蓝天居士1 年前
PAM从入门到精通(七)
pam·linux安全