徐红梅
摘要:随着计算机网络的大范围普及,人们开发了许多新的验证方法,如何灵活地运用这些新的验证方法是可拔插模块(PAM)项目应运而生的重要原因。PAM将系统提供的服务和该服务的认证方式分开,使系统管理员可以根据需要给服务配置不同的认证方式。本文通过配置实例介绍了PAM在linux系统下如何对用户加强安全访问与控制。具有较强的使用价值。
关键词:PAM 安全访问 配置文件
中图分类号:TP316.81 文献标识码:A 文章编号:1007-9416(2014)12-0178-02
1 PAM简介
一般的,一个应用程序需要对用户进行验证,通常要连同实现验证方法的代码作为应用程序的一部分一起编译到应用程序中,例如javascript等。这种方式带来的问题是:如果发现所用算法存在某些缺陷或想采用另一种验证方法时,用户需重新修改或替换应用程序并重新编译程序。为了让验证方法更具灵活性,人们开发了许多新的验证方法,例如可拔插验证模块(Pluggable Authentication Modules)简称PAM。引入PAM后,一方面将验证机制从应用程序中独立出来,单独进行模块化设计,便于实现和维护,另一方面,也为这些认证模块建立了标准API,以便个应用程序能方便的使用PAM提供的各种功能;同时,验证机制对其上层的应用程序和最终用户都是透明的。
2 PAM组成和运行机制
PAM由PAM核心和PAM模块组成。负责调用PAM模块核心库/lib/libpam.so。
PAM有4种模块类型,分别代表4种不同的任务:验证管理,账户管理,会话管理和口令管理分别表示为auth、 account、 session、 password。
每个使用PAM功能的应用程序都必须连接PAM核心库文件才能要求PAM实施验证。要检查一个应用程序是否使用了PAM验证,可以使用ldd命令检查是否连接PAM的核心库,通常,将要使用PAM验证功能的应用程序称为PAM客户端。
一个应用程序调用PAM时过程如图1所示:
3 PAM客户端配置文件和常用的PAM模块说明
PAM的目标就是为系统管理提供最大限度的灵活性。系统管理者可以通过/etc/pam.d目录下的配置文件来设置应用程序验证。可在/etc/pam.d/login来查看配置文件内容。下面如表1列出本文中使用的PAM模块并对其简要说明,更多的模块说明需查阅PAM文档。
4 PAM认证模块在账户安全访问与控制
针对用户账号和密码的攻击是黑客入侵系统的主要手段之一,一个使用弱密码或设置不适当权限的用户账号,将给系统留下重大的安全隐患,入侵者可以通过这些用户账号进入系统并进行权限扩张。所以管理员应必须用必要的技术手段强制用户使用强壮密码并定期更改定期检查系统中的所有账号,保证系统用户账号和密码安全。下面使用PAM认证模块对用户账户安全进行一些配置。
4.1 限制用户口令的重复使用
验证类口令的PAM模块是由pam_unix.so提供,此模块可用于auth,account,password,session验证类型。作为auth类型使用时,其主要功能是验证用户密码的有效性。在缺省情况下其功能是禁止密码 为空的用户提供服务;作为account类型使用时,其主要功能是执行建立用户账号和密码状态的任务,然后执行提示用户修改密码,用户采用新密码后才提出供服务类的任务;作为password类型使用时,其主要功能是完成让用户更改密码的任务;作为session类型使用时,其主要功能是仅仅完成记录用户名和服务名到日志文件的工作。
限制用户口令重复时,pam_unix.so模块可作为password类型使用,其下参数remember=n,会将n个使用过的旧密码,以MD5的方式加密后保存到/etc/security/opasswd文件中。
配置实例:可修改system-auth配置文件,避免用户重复是哦那个最近4次设置的口令。
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
添加参数remember =4.
4.2 用户登录访问控制
此类访问控制由pam_acccess.so模块提供,主要用于对访问进行管理,提供基于登录名、主机名或域名、公网IP地址或网络,以及非网络登录时的tty名称的访问控制。该模块默认的配置文件为/etc/security/access.conf,也可以使用模块参数accessfile=
配置实例:禁止root用户从tty2上登录,用户xhm97可以在除tty5本地终端之外的所有终端登录系统。
首先,修改login的PAM配置文件/etc/pam.d/login ,增加配置行
account required pam_access.so
其次,修改配置文件/etc/security/access.conf ,增加配置行
-:root:tty2 #第一个冒号前“-”代表拒绝,冒号后代表用户,第二个冒号后代表来源,可以是主机名域名等
-:xhm97:LOCAL EXCEPT tty5#第一个冒号前“-”代表拒绝,冒号后代表用户,第二个冒号后代表来源,可以是主机名域名等
4.3 用户登录失败后的账户锁定
为了避免用户口令被暴力破解,应设置在登录失败若干次之后锁定账户,这可以通过设置pam_tally2.so模块实现。
配置实例:设置在登录失败5次之后禁止登录。
首先修改system-auth配置文件,在代码行增加配置行
auth required pam_tally2.so deny=5 onerr=fail
其次在account 类型配置段后增加配置行
account required pam_tally2.so
pam_tally2模块将用户失败的登录次数记录于二进制文件/var/log/tallylog中,可使用/sbin/pam_tally2命令查看。
以上配置实例是PAM认证模块在账户安全和访问控制配置的个例,在用户安全和访问控制中还要考虑到用户口令强壮性,限制用户或组同时登录,限制用户使用su命令,禁止或允许列表实现访问控制等等一系列安全问题均可以用PAM模块解决。
5 PAM认证模块的其他应用
PAM认证模块在服务器配置可实现服务的认证,如rsh服务,ftpd服务等。以ftpd服务为例,通过/etc/pam.conf配置ftpd的认证方式。
(1)使用配置文件/etc/pam.conf说明。PAM的配置的主配置文件/etc/pam.conf,该文件是由如下的行所组成的:
service-name module-type control-flag module-path arguments
service-name 服务的名字,比如telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务。
(2)用/etc/pam.conf配置默认的认证方式。通过OTHER拒绝所有没有在/etc/pam.conf中明确配置的服务。下面例子显示拒绝了所用在/etc/pam.conf没有明显配置的服务,其中pam_deny模块的作用是拒绝通过认证。
配置实例
OTHER auth required /usr/lib/security/pam_deny.so
OTHER account required /usr/lib/security/pam_deny.so
OTHER password required /usr/lib/security/pam_deny.so
OTHER session required /usr/lib/security/pam_deny.so
(3)通过/etc/pam.conf配置ftpd的认证方式。首先用pam_ftp模块检查当前用户是否为匿名用户,如果是匿名用户,则 sufficient控制标志表明无需再进行后面的认证步骤,直接通过认证;否则继续使用pam_unix_auth模块来进行标准的unix认证,即用/etc/ passwd和/etc/shadow进行认证;通过了pam_unix_auth模块的认证之后,还要继续用pam_listfile模块来检查该用户是否出现在文件/etc/ ftpusers中,如果是则该用户被deny掉
ftpd auth sufficient /usr/lib/security/pam_ftp.so
ftpd auth required /usr/lib/security/pam_unix_auth.so use_first_pass
ftpd auth required /usr/lib/security/pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ftpusers
6 结语
PAM模块的引入使验证方法更具有灵活性,若对加强系统管理的安全性有更高要求时,需查阅PAM文档,配置PAM模块的参数来满足系统用户安全防范。
参考文献
[1]余柏山.Linux系统管理与网络管理[M].清华大学出版社,2010(1).
[2]梁如军等.Linux应用基础教程:Red Hat Enterprise Linux/CentOS 5[M].机械工业出版社,2012(1).
[3]赵岸,吴晓平,欧庆于.一种基于Linux-PAM模块的身份验证方法[J].计算机与数字工程,2007(11):57-58+110+5.endprint