3.2. 身份验证 Management

3.2.1. 用户认证服务功能

#include <security/pam_modules.h> 
   int pam_sm_authenticate( 
   pamh,  
   flags,  
   argc,  
   argv); 
 pam_handle_t *pamh; 
 int flags; 
 int argc; 
 const char **argv; 

3.2.1.1. DESCRIPTION

pam_sm_authenticate函数是服务模块对 pam_authenticate(3)接口的实现。

此功能执行验证用户的任务。

有效标志(可能与* PAM_SILENT *进行逻辑或)为:

  • PAM_SILENT

    • 不要发出任何消息。
  • PAM_DISALLOW_NULL_AUTHTOK

    • 如果此身份验证机制的身份验证令牌数据库为用户提供* NULL 条目,则返回 PAM_AUTH_ERR 。没有此标志,这样的 NULL *令牌将导致成功,而不会提示用户。

3.2.1.2. 返回值

  • PAM_AUTH_ERR

    • Authentication failure.
  • PAM_CRED_INSUFFICIENT

    • 由于某些原因,应用程序没有足够的凭据来验证用户身份。
  • PAM_AUTHINFO_UNAVAIL

    • 模块无法访问身份验证信息。这可能是由于网络或硬件故障等引起的。
  • PAM_SUCCESS

    • 身份验证令牌已成功更新。
  • PAM_USER_UNKNOWN

    • 身份验证服务不知道提供的用户名。
  • PAM_MAXTRIES

    • 一个或多个身份验证模块已达到尝试对用户进行身份验证的限制。不要再试一次。

3.2.2. 服务功能以更改凭证

#include <security/pam_modules.h> 
   int pam_sm_setcred( 
   pamh,  
   flags,  
   argc,  
   argv); 
 pam_handle_t *pamh; 
 int flags; 
 int argc; 
 const char **argv; 

3.2.2.1. DESCRIPTION

pam_sm_setcred函数是服务模块对 pam_setcred(3)接口的实现。

该功能执行相对于相应授权方案更改用户凭据的任务。通常,身份验证模块可能会访问比其身份验证令牌更多的有关用户的信息。此功能用于使此类信息可供应用程序使用。仅在用户通过身份验证之后但未构建会话之前,才应将其称为。

有效标志(可能与* PAM_SILENT *进行逻辑或)为:

  • PAM_SILENT

    • 不要发出任何消息。
  • PAM_ESTABLISH_CRED

    • 初始化用户的凭据。
  • PAM_DELETE_CRED

    • 删除与身份验证服务关联的凭据。
  • PAM_REINITIALIZE_CRED

    • 重新初始化用户凭证。
  • PAM_REFRESH_CRED

    • 延长用户凭证的寿命。

独立于pam_sm_setcred()返回代码的,用于评估pam_setcred()函数调用的导航* auth 堆栈的方式与评估pam_authenticate()库调用时的导航方式完全相同。通常,如果在评估pam_authenticate()时忽略了堆栈条目,那么当 libpam 评估pam_setcred()函数调用时,堆栈条目将被忽略。否则,来自每个模块特定pam_sm_setcred()调用的返回代码将被视为 required *。

3.2.2.2. 返回值

  • PAM_CRED_UNAVAIL

    • 该模块无法检索用户的凭据。
  • PAM_CRED_EXPIRED

    • 用户的凭据已过期。
  • PAM_CRED_ERR

    • 该模块无法设置用户的凭据。
  • PAM_SUCCESS

    • 用户凭证已成功设置。
  • PAM_USER_UNKNOWN

    • 该身份验证模块不认识该用户。

这些非* PAM_SUCCESS 返回值通常会导致凭证堆栈 failing *。第一个此类错误将以pam_setcred()的返回值为主。