PAM 系统配置文件
IBM® Verify Gateway for Linux® PAM and AIX® PAM (Pluggable Authentication Modules)配置时可使用以下参数。
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
...
#
# 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_ibm_auth.so 模块仅支持 ` auth module_interface` 类型。
模块名称
模块名称为 pam_ibm_auth.so。
模块参数
auth sufficient pam_ibm_auth.so auth_method=choice-then-otp [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 选项总数
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 选项仅使用其中一种方法,即fingerprint或userPresence。 - 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_choice或add_devices_to_choice,或者两者都配置。- id_link_attr= {attr_name}
- 当租户中定义了多个身份来源且启用了身份关联时,此配置项用于指定通过“user_name_attr”定位的用户中,用于标识用于验证密码的用户名的属性名称。 {attr_name} 的示例值:
定义在 choice auth_methods 中提供的 2FA 方法
如何启用或禁用 auth_methods 选项中列出的双因素认证类型。
| 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 | 基于语音回拨的一次性密码功能默认处于禁用状态,如有需要,必须手动启用。 用户必须明确注册此方法,该方法才能生效。 |