赞
踩
当前,在互联网上能找到大量关于PAM的文章,但在实际使用过程中,可能会遇到无法复现的应用场景,让想入门的学员望而却步,不明基理。为了帮助大家更好的理解PAM原理和功能,本篇梳理了PAM相关的通用原理、功能的学习心得,希望能对大家有所帮助。
本文将回答2个关于PAM的基本问题,然后通过配置语法和实例,帮助大家更好的理解PAM的应用原理。
l PAM是什么?
l PAM的结构体系如何?
l PAM的配置语法
l 一个PAM加固应用实例
PAM主要使用的平台是在linux操作系统的环境中,linux-pam网站(http://linux-pam.org/Linux-PAM-html/sag-introduction.html)是这样定义PAM(linux-pam)。
Linux-PAM (Pluggable Authentication Modules for Linux) is a suite of shared libraries that enable the local system administrator to choose how applications authenticate users.
In other words, without (rewriting and) recompiling a PAM-aware application, it is possible to switch between the authentication mechanism(s) it uses. Indeed, one may entirely upgrade the local authentication system without touching the applications themselves.
通过上面的描述可知,PAM是一套能帮助本地系统管理员实现应用程序用户认证的共享功能库,并且可根据实际情况,灵活决定是否使用,即,可以用,也可以不用。对于PAM化的应用程序,只是通过简单配置,就可在认证框架中实现PAM认证或非PAM认证的灵活切换,不需要程序重编写、重编译。
PAM在linux系统中安装后(多数系统已默认安装),其相关文件分布如下图所示。
PAM的应用配置,在先前一段时间,主要集中配置在”/etc/pam.conf”,但因其所有程序集中于一个文件中,在故障排除时,效率偏低。所以现在主流的配置方法,是按照应用程序分类,独立配置,独立使用,其路径位于”/etc/pam.d/”,如上图所示,该路径下有“login”“ssh”等应用。
PAM实现应用程序认证功能,主要是调用PAM API接口来实现。如下图所示。
应用程序调用PAM API接口,从而通过PAM服务(PAM Service Modules)实现配置的功能模块(PAM Modules)功能调用,完成认证服务。在后端还可与系统认证凭证、LDAP专用服务器实现认证信息交互。
PAM化的应用程序配置文件,主要由两部分构成。第一部分是PAM软件中,针对每一个应用程序构建独立的配置文件(路径:/etc/pam.d);第二部分是应用程序自身的配置文件,主要决定是否调用PAM功能模块。
本小节主要分享第一部分的配置语法。
下图是sshd的pam配置文件。由图所知,配置字段主要分为4列,分别是管理组、控制标志、模块和模块参数。
管理组别主要涉及4类:auth、account、session、password。详细说明如下。
Auth,鉴别类接口模块类型用于检查用户和密码,并分配权限;
Account,账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等;
Session ,会话类接口。实现从用户登录成功到退出的会话控制;
Password,口令类接口。控制用户更改密码的全过程。
控制标志主要涉及5类:Required、Requisite、Sufficient、Optional、Include。详细说明如下。
Required,表示该行以及所涉及模块的成功是用户通过鉴别的必要条件(失败继续,并不通过验证)。任何带 required 标记的模块验证失败,PAM 并不立刻将消息返回给应用程序,而是在所有模块都调用完毕后才将失败消息返回调用他的程序;
Requisite,带此标记的模块返回成功后,用户才能通过鉴别(成功继续,失败马上返回);
Sufficient,该行以及所涉及模块验证成功是用户通过鉴别的充分条件(成功马上返回;失败时相当于Optional,即通过验证,并继续执行)。模块一旦验证成功,那么 PAM 便立即向应用程序返回成功结果而不必尝试任何其他模块;
Optional,即便该行所涉及的模块验证失败用户仍能通过认证;
Include ,在验证过程中调用其他的 PAM 配置文件。
为了方便功能的调用,PAM提前实现多种功能模块,并通过参数配置,实现相同模块的差异化功能。
下图是以pam_tally2为例,在linux系统的帮助文档中,可查看该模块的详细参数类别、语法含义。
SSH程序主要用在远程设备配置管理,在linux系统中应用比较广。接下来将通过PAM的tally2模块,实现缓解远程暴力登录猜解攻击,即,错误登录2次尝试后,锁定登录用户,3分钟后自动解锁,而整个过程,前端是无感知的(即使此时输入了正确的用户名和密码)。
1、 配置pam文件。在pam的配置文件目录下的sshd文件(路径:/etc/pam.d/sshd),进行编辑。
在文档中完成以下配置语句:
auth required pam_tally2.so deny=2 unlock=1800
2、 配置ssh文件。在ssh的配置文件中,仅需找到“UsePAM”这行参数,默认配置为“#UsePAM no”。为了启动PAM认证,只需要将该行的配置修改为“yes”,并删除前面的注释符“#”即可。
远程端发起连接请求,并输入错识的口令,在服务端中可查看到对应的尝试次数和用户名锁定状态。
1、 网站说明文档。http://linux-pam.org/Linux-PAM-html/sag-introduction.html;
2、 图书。《Pluggable.Authentication.Modules》,Kenneth Geisshirt。
作者:深信服严波,深信服安全服务认证专家(SCSE-S),中国网络空间安全协会会员,中国计算机学会会员,担任中国计算机行业协会数据安全专业委员会委员,数字政府网络安全产业联盟人才培养发展委员会副主任,中国软件测评中心数据安全产业专家委员会委员,暨南大学网络空间学院校外实践指导老师,深圳大学专业学位研究生校外导师,深圳信息职业技术学院产业学院副教授等职务,持有CISAW、CISP、CCNP等行业证书;负责过省级重大网络安全项目的策划、设计、建设,具备丰富的网络安全体系建设和安全服务的实战经验。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。