首页> 系统技术> Linux-PAM认证机制

[文章]Linux-PAM认证机制

收藏
0 1051 0

Linux-PAM认证机制

陈浩宏

【摘要】

Linux日常运维的用户管理中,常常会使用到sussh等工具来登录系统,或者使用passwd命令来修改密码。在这些命令的背后进行身份或是状态的验证模块,是由PAM提供的模块来进行的。PAMPluggable Authentication Modules)插件式认证模块,在客户对安全基线的密码策略等要求中,常常能够根据需求来动态地插件式调整。

【正文】

   PAM介绍

1.1       PAM介绍

PAM是一套提供不同认证模块的共享库,放置在/lib64/security64位系统)下。日常

运维中对锁定用户解锁的pam_tally2命令就是由其中的pam_tally2.so提供的。

         PAM的配置文件存放在/etc/pam.d/下,来管理不同应用程序调用的认证模块与配置。比如susshpasswd等。


1.2       PAM配置文件

/etc/pam.d/system-auth是一个非常重要的pam配置文件,主要负责用户登录系统的认

证工作。而且该文件不仅仅只是负责用户登录系统认证,其它的程序和服务通过include接口也可以调用到它,从而节省了很多重新自定义配置的工作。所以应该说该文件是系统安全的总开关和核心的pam配置文件。那么就来通过这个配置来简单介绍一下PAM配置文件的格式,配置内容如下图。


可以看到整个配置文件分为四列,具体意义代表:

    第一列代表模块类型

    第二列代表控制标记

    第三列代表模块路径

    第四列代表模块参数

1.  PAM模块一共有四种类型,包括:认证管理(auth),账号管理(account),会话

管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由PAM模块调用。

2.  控制标记表示PAM对模块的判断与处理。包括:

required表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。若有错误消息

则只有当所有required模块都执行过验证后,才会返回错误消息给应用程序。

requisiterequired相似,只有带此标记的模块返回成功后,用户才能通过鉴别。不

同的是,如果验证过程中失败,则立即停止并返回错误消息。

sufficient: 表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说

只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。

         optional他表示即便该行所涉及的模块验证失败用户仍能通过认证。

         include表示在验证过程中调用其他的PAM配置文件。在RHEL系统中有相当多的应用通过完整调用/etc/pam.d/system-auth来实现认证而不需要重新逐一去写配置项。这也就意味着在很多时候只要用户能够登录系统,针对绝大多数的应用程序也能同时通过认证。

         3.模块路径即表示调用库文件中模块路径。具体有哪些模块以及功能可以查阅官方文档。

         4.模块参数,即传递给模块的参数.参数可以有多个,之间用空格分隔开。如minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

 

 

   PAM应用场景

2.1       安全基线

 

下面将列举一些客户常用到的通用基线来介绍PAM的使用:

2.1.1      密码复杂度

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=  lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 minlen=8

pam_pwquality.so模块主要是用来检测密码的质量:包括复杂度、长度和策略要求等等。try_first_pass参数告诉后面的模块尝试使用为先前模块输入的密码。local_users_only表示忽略掉不在本地/ etc / passwd文件中的用户(例如,帐户在LDAPActive Directory数据库中的用户)。retry=3表示最多可以重试3次。默认情况下,用户在输入密码时获得的提示是“New password:”。 如果管理员设置authtok_type = test,则提示符变为“New test password:”。lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1则分别表示密码需要至少1位小写字母、1位大写字母、1位数字、1位特殊字符,即所谓的密码复杂度。minlen则表示密码的最短长度为8

 

2.1.2      密码重复使用次数限制

password    sufficient    pam_unix.so remember=5 md5 shadow nullok

try_first_pass use_authtok

       pam_unix.so模块在修改密码时,会修改用户的密码后.,将用户输入的密码,作为用户的新密码更新shadow文件。remember = 5参数表示为每个用户记住5个旧密码。shadow选项意味着在单独的/ etc / shadow文件中维护密码哈希值,该文件只能由root用户读取。 应始终设置此选项。 nullok表示允许具有空密码条目的用户帐户。use_authtok告诉pam_unix使用堆叠的pam_pwquality模块中的密码。

 

 

2.2       PAM配置错误案例

PAMLinux的用户认证息息相关,往往脚本或者人为导致错误的配置会使登录系统、

ftp等认证失效、造成异常锁定等,此时会对业务带来极大的风险,下面来介绍两个错误配置的案例。

 

2.2.1      重复调用模块


如图所示,在上一节中提到的密码复杂度策略调用pam_pwquality.so模块,在此system-auth中重复配置了一样的模块,那么客户在修改密码的过程,就会两次调用该模块,现象为键入密码与重复键入相同密码确认后,显示修改密码成功,便会再次需要输入密码修改。也就是说要输入四次密码来修改。解决方法即删去多余的重复调用,便能恢复正常。也侧面论证了在配置文件中配置模块的可插拔性,仅需配置好模块或注释便能调用或禁用。

 

2.2.2      误注释模块


         如上图所示,一些password(密码管理)的PAM配置被误注释。用户在修改密码之后发现无论如何都只能用旧密码登录,而使用不了修改后的密码登录。他在不了解PAM认证机制的情况下,以为是密码的生存期导致,使用了chage命令修改了root的口令生存期,最终导致无法进入系统,只能进入单人模式排查。

         排查发现/etc/pam.d/system-auth中所有密码管理的配置都被注释,因此将注释恢复后,设置口令周期,重启正常进入系统。由于这些模块被注释,所以passwd命令修改密码的过程中,没有实际调用到PAM模块,因此检查/etc/passwd、修改/etc/shadow、检查密码质量等步骤都直接空过,尽管显示了修改密码成功,但实际上并没有成功修改。

   总结

PAM认证与Linux运维息息相关,/etc/pam.d下的配置文件很重要,由于其即时生效的

插件性,只要修改之后,调用相关命令或程序来认证时便会生效。故慎重操作PAM配置文件。在发生了sussh或者登陆应用比如vsftpd等、遇到认证问题时,可以优先排查PAM配置模块是否有异常。

系统技术
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}