PAM 系统配置文件

IBM® Verify Gateway for Linux® PAM and AIX® PAM (Pluggable Authentication Modules)配置时可使用以下参数。

在 Linux® 上,所有支持PAM的服务都在 目录下 /etc/pam.d 拥有一个与该服务同名的文件。 例如,在 Redhat 7 上,sshd 服务文件 /etc/pam.d/sshd 包含:
#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
...
在 AIX 中,所有支持PAM的服务都位于 文件中 /etc/pam.conf 。 例如,在 AIX 7.2 上的文件 /etc/pam.conf 包含:
#
# Authentication
#
authexec      auth     required      pam_aix
dtaction      auth     required      pam_aix
dtsession     auth     required      pam_aix
...
每行都采用以下格式:
module_interface control_flag module_name [module_arguments]
注: 在 PAM 配置中,井号(#)表示注释的开头。 此字符可能会造成配置中出现非预期后果。

模块接口

pam_ibm_auth.so 模块仅支持 ` auth module_interface` 类型。

模块名称

模块名称为 pam_ibm_auth.so

模块参数

此示例显示带参数的 PAM 模块条目。
auth sufficient pam_ibm_auth.so auth_method=choice-then-otp 
pam_ibm_auth.so 模块接受以下参数。
注意: 如果参数中包含空格,PAM 要求将参数用方括号括起来。 例如,
[otp-prompt=Enter OTP %C- ]
user_env= {name}
为下游 PAM 模块添加一个包含“ {name} = {user-json} ”的 PAM 环境变量。 {user-json} 的值是一个字符串,其中包含以 JSON 格式表示的用户 IBM Verify 信息。 主要用于协助PAM模块开发人员与 IBM PAM模块进行集成。
prompt_choice_start= {prompt}
字符串“ {prompt} ”会紧跟在“ 2FA ”选项列表之前输出。 例如,如果 ` {prompt} ` 中包含“请选择以下选项之一:\n”,您可能会看到:
Choose one of:
1) user@us.ibm.com
2) 15551234567
3) TOTP
Your choice (1->3):
prompt_choice_end= {prompt}
字符串“ {prompt} ”会紧跟在“ 2FA ”选项列表之前输出。 此 {prompt} 中的任何 %T 值都将被替换为一个数字,该数字代表选项的总数。 例如,如果 {prompt} 包含“您的选择 (1->%T):”,您可能会看到:
Choose one of:
1) user@us.ibm.com
2) 15551234567
3) TOTP
Your choice (1->3):
prompt_trans_email= {prompt}
prompt_trans_sms= {prompt}
prompt_totp= {prompt}
prompt_email= {prompt}
prompt_sms= {prompt}
prompt_voice= {prompt}
prompt_device_presence= {prompt}
prompt_device_biomertic= {prompt}
这些参数用于为每种 2FA 类型自定义提示词选项。 可以应用以下替换:
  • %I “ 2FA ”选项索引
  • %N 与 2FA 选项名称关联的值(例如,一个电子邮件地址)
  • %T 选项总数
例如,如果 prompt_trans_sms="%I) 未验证的短信 %N\n",您可能会看到:
Choose one of:
1) user@us.ibm.com
2) Unvalidated SMS 15551234567
3) TOTP
Your choice (1->3):
注意: 这些选项可能会导致 PAM 模块的参数变得非常冗长,难以管理。 为解决此问题,可以将许多模块参数移至该 /etc/pam_ibm_auth.json 文件中,请参阅该文件中“pam”对象下的“additional-args”功能。
device_prompt= {prompt}
如果启用此设置,当用户需要在 2FA 设备上进行批准时,系统将显示指定的消息。 将其与 SSH 结合使用。 存在一些局限性。 有些 SSH 服务器会转发一条消息(而不提示输入),有些则不会。 默认情况下,系统不会发送提示,而是依赖用户的设备来显示提醒。
user_name_attr= {attr_name}

根据用户 Verify 所含属性的匹配情况,将提供给 PAM 的用户名映射到某个 IBM Verify 用户。 例如,可以将 PAM 用户名添加到一个 Verify 名为“其他用户名”的用户自定义属性中。 该自定义属性指定

user_name_attr=urn:ietf:params:scim:schemas:extension:ibm:2.0:User:customAttributes.otherUserName

默认情况下,系统会使用用户属性 "userName" 来查找与PAM用户名匹配的用户 Verify

gecos_match= {regex}
gecos_replace= {replace_format}
这些参数可作为该 gecos_field/gecos_separator 方法的替代方案。 {regex} 用于匹配用户的 GECOS 值,并提取该值以供格式化 gecos_replace 使用。 有关正则表达式的详细信息,请参阅 regex(7) 手册页。

该值 {replace_format} 用于生成用户的姓名 Verify 。 对于任意 $N(其中 N 取值范围为 1 至 9),该 {replace_format} 变量将被替换为来自 {regex} 匹配结果中的对应正则表达式原子 (pat)。

例如,
[gecos_match=^([^/\]+)/([^/\]+)/([^/\]+)] [gecos_replace=$3/$1@MyRealm]
注意: 使用 PAM [arg] 方法时,arg 中任何嵌入的 ] 字符都需要使用 \ 进行转义。

如果 GECOS 字段为 "Test User/+15551234567/ibm.com" ,则生成的用户是 "ibm.com/Test User@MyRealm"

调试
此参数是标准的 PAM 模块选项。 使用 syslog() 调用将调试信息记录到系统日志文件。
nowarn
此参数是标准的 PAM 模块选项。 nowarn 选项禁止生成警告,包括密码到期警告。
ibm_auth_config={config-file}
如果未指定, Linux 和UNIX™系统的默认值为 /etc/pam_ibm_auth.json 。 该文件包含 IBM 身份验证API的配置,其中包含服务器连接信息 Verify 。 请参阅模块配置文件
auth_method={auth_method}
此参数是可选的,缺省情况下为 TOTP 验证。 此参数指定认证用户时所需的认证方法。 下列认证方法列表中包括一些先接受密码的方法。 这些方法中的“密码”指的是用户 Verify 密码,而非 UNIX 密码。
pam_unix.so注意: 如果之前启动的 PAM 模块(例如)已提供密码,则该密码将用于所有 auth methodsVerify 涉及密码的操作。 如果先前提供的密码与当前 Verify 密码不匹配,则身份验证失败。 此问题是已知限制。
表 1. 有效值
描述
密码 需要输入有效的 Verify 密码。
password-and-totp 必须将 Verify 密码和TOTP值合并为一个值提交。 您可以配置将密码或 TOTP 值放在首位,并配置用于分隔这两个值的字符。 缺省情况下,格式为 TOTP:password
password-then-totp 必须输入密码 Verify ,若输入成功,系统将要求提供一次性密码(TOTP)并进行验证。
totp 要求提供并验证 TOTP 值。
password-then-smsotp 必须输入密码 Verify ,若输入成功,系统将向用户注册的移动设备发送一条包含一次性密码(OTP)的短信。 然后,PAM 模块向用户请求 SMSOTP 值并进行验证。
smsotp 发起 SMS OTP 验证,并要求提供和验证 SMS OTP 值。
password-then-emailotp 必须输入密码 Verify ,若输入成功,系统将向用户发送一封包含一次性密码(OTP)的电子邮件。 PAM 模块请求 EmailOTP 值,并进行验证。
emailotp 发起电子邮件 OTP 验证,PAM 模块请求电子邮件 OTP 值,然后进行验证。
password-then-choice-then-otp 必须输入密码,若输入成功,系统 Verify 将提示用户选择其已注册的一次性密码(OTP)中的一种。 进行选择后,发起 OTP 验证,并提示用户提供 OTP 值。
注意:
  • 如果仅在一个 OTP 方法中注册该用户,那么会跳过此选择步骤,并且会直接要求用户提供 OTP 值。
  • 如果用户没有注册任何 OTP,那么 "reject-on-missing-auth-method" 生效。
  • 如果启用 "add_devices_to_choice" 选项,那么设备选项将添加到列表中。 请参阅设备认证方法以获取有关添加内容的详细信息。
  • 如果启用 "transients_in_choice" 选项,那么瞬态电子邮件和 SMS 源将列为选项。
  • 如果启用了选项 "voice_in_choice",那么会将语音 OTP 列为选项。
choice-then-otp 要求用户选择其中一个 OTP 注册。 进行选择后,发起 OTP 验证,并提示用户提供 OTP 值。
注意:
  • 如果仅在一个 OTP 方法中注册该用户,那么会跳过此选择步骤,并且会直接要求用户提供 OTP 值或进行设备验证。
  • 如果用户没有注册任何 OTP,那么 reject-on-missing-auth-method 生效。
  • 如果启用 "add_devices_to_choice" 选项,那么设备选项将添加到列表中。 请参阅设备认证方法以获取有关添加内容的详细信息。
  • 如果启用 "transients_in_choice" 选项,那么瞬态电子邮件和 SMS 源将列为选项。
  • 如果启用了选项 "voice_in_choice",那么会将语音 OTP 列为选项。
password-then-device 必须输入密码,若输入成功,系统 Verify 将要求用户通过手机上的 IBM Verify 应用进行身份验证。
device 要求用户在手机上使用 IBM Verify App 进行验证。 如果多个设备可用,系统将提示用户选择一个设备。
"add_devices_to_choice="注: 该选项用于确定是使用 fingerprint 还是 userPresence。 只能将其中一个属性用于特定设备。
password-then-transsmsotp 必须输入密码,若输入成功,系统 Verify 将要求用户输入通过短信发送至其手机的一次性密码(OTP)。 手机号码是用户记录中设置的手机号码。
transsmsotp 要求用户提供通过 SMS 向手机发送的 OTP。 手机号码是用户记录中设置的手机号码。
password-then-transemailotp 必须输入密码,若输入成功,系统 Verify 将要求用户输入通过电子邮件发送给他们的单次密码(OTP)。 电子邮件地址是用户记录中设置的地址。
transemailotp 要求用户提供通过电子邮件发送给他们的 OTP。 电子邮件地址是用户记录中设置的地址。
voiceotp 对用户的电话进行呼叫,语音消息会告知用户必须用于验证登录的 OTP 值。
密码+语音验证码 IBM Verify 必须输入密码。 如果验证成功,系统将拨打用户的电话,并通过语音消息告知用户用于验证登录的单次密码(OTP)值。
密码和TOTP或设备 如果在用户提供的密码中检测到 TOTP 值,则会使用与该 password-and-totp 方法等效的处理方式。 如需了解更多信息,请参阅 password-and-totp

如果在用户提供的密码中未检测到 TOTP 值,则会使用与该 password-and-device 方法等效的处理方式。 如需了解更多信息,请参阅 password-then-device

注意: 如果用户的实际密码以六个数字和一个分隔符开头或结尾,RADIUS 服务器可能会将其误认为嵌入式 TOTP 值。 例如,该 password-first 选项设置为 false,且密码以六个数字和分隔符开头。 同样地,如果该选项设置为 true,且密码以分隔符和六位数字结尾,也会出现相同的情况。 无论哪种情况,设备推送都无法作为 RADIUS 身份验证的第二重验证因素。 RADIUS 服务器将其解释为 TOTP 值,并尝试对其进行验证。 验证失败,身份验证被拒绝。
如果 "password" 不属于验证方法值(例如 "device"),那么 libpam_ibm_auth.so 模块可以通过标准 UNIX/Linux PAM 模块加前缀来验证本地密码以形成双重因素。 还可以保留为无密码验证。
accept_on_missing_auth_method
此参数是可选的。 如果已设置,并且没有为第二个因子认证注册用户,那么将对用户进行认证。 如果未设置此选项,并且没有为第二个因子认证注册用户,那么不会对该用户进行认证。
otp_prompt={promt_str}
"Enter OTP %C- "此参数为可选,默认值为英文字符串。 请求用户输入 OTP 时显示此字符串。 提示中的任何 %C 都将替换为 OTP 关联,或者替换为 TOTP 的空字符串。 提示中的任何 %% 都将替换为单个 %
password_first
此参数是可选的。 它仅影响 "password-and-totp" 认证方法,可用于确定用户必须提供的字符串中密码和 TOTP 值的顺序。 通常情况下,在分隔符后的字符串末尾提供密码 totp:password。 如果已设置此参数,那么必须在分隔符前的字符串开头提供密码 password:totp
password_separator={sep_char}
此参数是可选的,缺省情况下的密码分隔符为 :(冒号)。 它仅影响 "password-and-totp" 认证方法,可指定用户必须用于分隔 TOTP 和密码值的字符。
verify_method_order={order}
此参数是可选的,缺省情况下为 "fingerprint,userPresence"。 此选项选择两项中哪一项优先。 缺省情况下,指纹优先(如果有)。
注意: 如果启用了“add_devices_to_choice”,则 "device" auth_method 选项仅使用其中一种方法,即 fingerprintuserPresence
verify_message={message}
此参数为可选,默认值为"Do you approve the request from {hostname}?"其中 {hostname} 替换为运行 PAM 模块的主机名。 如果使用 "device" 认证方法,那么会在提示用户验证访问权时,在用户设备上显示此消息。
append={string}
此参数是可选的,缺省情况下为 ""。 在将 UNIX 用户名映射为 用户 Verify 名的过程中,该字符串会被附加到生成的 Verify 用户名之后。 一个典型的用例是将用户域 Verify 添加到用户中,例如为 w3id 用户域添加“@www.ibm.com" ”。
add_devices_to_choice
此参数是可选的,缺省情况下不能将用户设备注册添加到 "choice-then-otp""password-then-choice-then-otp" 认证方法。 如果已设置此参数,那么设备注册将添加到用户的 2FA 选择列表。
exempt_group={unix_group_name}
此值是可选的,缺省情况下为无 exempt_group。 设置此参数后,系统将使用指定的 UNIX 组来确定 UNIX 用户登录是否免于进行 2FA 身份验证。 如果 UNIX 用户位于此组中,那么免除用户认证,并从来不要求 2FA。
2fa_group={unix_group_name}
此值为可选。 启用此选项后,系统将使用指定的 UNIX 组来确定 UNIX 用户登录是否需要提供 2FA。 如果启用了此选项,且该 UNIX 用户不在该组中,则系统不会提示用户输入 2FA。
retry={num_retries}
此参数是可选的,缺省值为 3。 它定义用户如果提供无效的 2FA 值(例如,无效的 TOTP 值)的重试次数。 还定义选择步骤中选择使用哪个 OTP 类型的重试次数。
failmode_insecure
此值是可选的,缺省情况下为安全的 failmode。 此参数影响 PAM 模块 Verify 无法连接到服务器 Verify 时的行为。 如果设置了此参数,当服务器 Verify 不可达时, 2FA 身份验证将成功。 如果未设置该选项,当服务器 Verify 不可达时,所有需要 2FA 的身份验证都会失败。
gecos_field={field_number}
此参数是可选的,缺省情况下不使用用户的 GECOS 字段。 当设置为 1 到 32 之间的数值时,将使用 UNIX 用户中指定的 GECOS 字段作为用户名 Verify 。 附加选项依旧影响此值。 第一个 GECOS 字段定义为第一个字段。
gecos_separator={char}
此参数是可选的,缺省情况下为 ,(逗号)。 此值定义 GECOS 字段分隔符。
id={pam_module_id}
此参数是可选的,缺省情况下为 "pam_ibm_auth"。 如果在用于验证用户的 PAM 模块集合中存在多个相同的 Verify PAM 模块,则每个实例都必须分配一个唯一的 ID。 否则,模块会相互干扰。
identity_source={id}
此参数是可选的,缺省情况下使用 Cloud Directory 身份源。 如果已设置此参数,那么它指定要用于认证用户的身份源。 根据已配置的 LDAP 传递身份源认证用户。 可以从 GET 请求将已配置的身份源及其标识集检索到 https://<tenant>/verify/v1.0/authnmethods/password
ignore_isvalidated
此值是可选的,缺省情况下为 false。 设置为 true 时,PAM 模块会尝试使用相关的 2FA 方法,即使这些方法未经验证也是如此。
transients_in_choice
此参数会将瞬态电子邮件和手机号码添加到 OTP 认证所使用的方法的列表中。
voice_in_choice
此参数会将语音 OTP 添加到 OTP 认证所使用的方法的列表中。
transient_choices={choices}
此参数会列出可用的瞬态方法和选项。 参数值必须为一个或多个 "emails""phoneNumbers"。 每个选项必须使用一个 ,(逗号)分隔。
poll_timeout={seconds}
此参数指定用户等待验证设备登录的时间。 如果超出此时间,那么会发生超时和登录故障。
no_enrollments_in_choice

此参数指定不在选项中添加 SMS、电子邮件或 TOTP 注册。 要使选项可用,必须配置 transients_in_choiceadd_devices_to_choice,或者两者都配置。

id_link_attr= {attr_name}
当租户中定义了多个身份来源且启用了身份关联时,此配置项用于指定通过“user_name_attr”定位的用户中,用于标识用于验证密码的用户名的属性名称。 {attr_name} 的示例值:
  • "urn:ietf:params:scim:schemas:extension:ibm:2.0:user:linkedAccounts.myOnPremIdSource"
  • "emails.type%20eq%20%22work%22%20and%20emails.value"
  • "urn:ietf:params:scim:schemas:extension:ibm:2.0:user:customAttributes.myCustomAttribute"
  • "userName"

定义在 choice auth_methods 中提供的 2FA 方法

如何启用或禁用 auth_methods 选项中列出的双因素认证类型。

表 2. 选择中的 2FA 包含情况:
2FA 类型 缺省值 启用/禁用选项 描述
短信验证码、电子邮件验证码 已启用 no_enrollments_in_choice 基于时间、短信和电子邮件的一次性密码功能默认已启用,若要将其移除,必须手动将其禁用。
device 已禁用 add_devices_to_choice 设备推送功能(包括生物识别(指纹)和在线状态(访问设备应用))默认均未启用,如有需要,必须手动启用。 verify_method_order 选项决定了优先级以及具体使用哪些方法。
transsmsotp transemailotp 已禁用 transients_in_choice “临时”(即手机号码和电子邮件地址的未验证用户账户值)选项默认处于禁用状态,如有需要,必须手动启用。 选项 transient_choices= 用于确定使用 smsotp 和/或 emailotp 中的哪一项。
voiceotp 已禁用 voice_in_choice 基于语音回拨的一次性密码功能默认处于禁用状态,如有需要,必须手动启用。 用户必须明确注册此方法,该方法才能生效。
注意: 如果存在 ignore_isvalidated 配置选项,那么即使该验证方式尚未经过用户验证,totp、smsotp、emailotp 和 voiceotp 也会被包含在内。