快速业务通道

用PAM来增强LINUX服务器的安全(一)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-03
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />服务器系统安全确实是一件让大多数用户头痛的事情:如何确保系统中使用应用程序或服务的用户确是用户本人?如何给这些用户指定限制访问服务的时间段?以及如何限制各种应用程序或服务对系统资源的使用率等等?所有的这些问题,常规的安全措施并不能妥善地解决.在使用Linux内核的RedHat企业Linux3中,已经集成了一种叫做可插入式认证模块(Pluggable Authentication Modules)的安全验证方式,能够用它来完成上面所示的任务.
可插入认证模块(简称PAM)是基于模块化设计、具有可插入功能的一种独立于应用程序之外的验证方式.使用PAM后,应用程序可以不需要集成验证功能,而由PAM来完成.例如,在Linux系统中,Login服务为用户提供系统登录服务,它提示用户输入相应的用户名和密码来验证用户的有效性,当使用PAM后,这个验证过程可以由PAM来代替.PAM具有很大的灵活性,系统管理员可以通过它为应用程序自由选择需要使用的验证方式.鉴于PAM有这么多优点,在本文中,将以RedHat企业Linux3为应用平台,来讨论如何使用PAM来增强Linux服务器的安全性能.
拥有帝国一切,皆有可能。欢迎访问phome.net一、PAM入门必读
当LINUX服务器中的某个应用程序或服务需要使用PAM来进行验证时,只要此应用程序或服务支持PAM验证功能,就可以通过修改其相应的PAM配置文件,加放相应的验证方式,当重新启用些服务或应用程序时,PAM模块就会通过其专用API来读取它的配置文件,根据配置文件中的内容来提供相应的验证功能.所有验证功能都是通过一些库文件来提供的.
因此,在使用PAM之前,先掌握PAM配置文件的设置方法,了解一些常用的验证模块就显得非常必要.
当某个支持PAM验证的应用程序启动时,就会通过PAM的API读取它的PAM配置文件,然后根据配置文件中验证项指定的内容,再由API调用所需的验证模块来完成配置文件中指定的验证任务.从这里可以看出,要掌握PAM的使用,就必需了解配置文件的配置规则,以及各种验证模块的意义和作用.
在这里还要注意的是,一个Linux系统下的应用程序能够使用PAM功能,最关键的是它已经将支持PAM功能的代码集成到了原代码当中.如果你能够得到一个应用程序的原代码,你也可以自行将支持PAM的功能代码加入其中.但是,如果你得到的二进制文件不具有这些PAM功能代码,那么,此应用程序就不支持PAM验证功能.查看应用程序是否具有PAM验证功能,可以使用ldd命令查看其动态连接库中有没有libpam和libpam_misc,有就支持.
1、设置PAM的配置文件
  在RedHat企业Linux3系统中,每个支持PAM验证的应用程序或服务,都有一个相应的PAM配置文件,存放在/etc/pam.d/目录.要想这些配置文件有效,就必需将这些配置文件名字编写进程序源代码中.通常,这些配置文件的名字与其对应的应用程序的名字是一样的.
要想设置这些配置文件,只需要通过VI或VIM来打开它们,然后添加或删除其中的验证项就可以. 拥有帝国一切,皆有可能。欢迎访问phome.net
打开/etc/pam.d/目录下的任何一个配置文件,其中每行的验证规则都使用如下所示的语法格式:
Type Control-flag Module-path Module-arguments
其中每行代表一个独立的验证方式,每个配置文件可以由多种验证规则相互叠加而成.验证时PAM-API会按照从上往下的方式一一读取这些验证规则,并根据其中的控制标志做出相应的动作.
在编辑配置文件时一定要小心谨慎,规则的验证是有上下顺序之分的,因此你要小心确定某些危险的验证规则处于配置文件中的正确位置.一旦出错,可能会导致系统的部分功能或整个系统不能访问,这样你就不得不重新恢复它们的备份.
要正常配置PAM配置文件,就应当了解配置文件方法格式中每列的所包括的内容,下面是这些列的简短说明:
(1)、Type列,主要用来指定需要验证的类型.一共有以下四种验证类型:
1、 auth 验证使用者身份,提示输入帐号和密码;
2、 account 提供对帐户的进一步验证,例如验证帐户的此操作是否已经过期,权限多大,拥有此权限的时间期限是否已经过期等等;
3、 password 提供对密码的细致控制,例如控制密码的使用期限,重复输入的次数,密码锁定后的解禁时限等等.
4、 session 对每个会话进行跟踪和记录,记录的内容包括登录的用户名及登录的时间和次数等等.
(2)、Control-flag列,主要用来控制在验证过程中动作和返回结果的方式.它有两种类型的表达方式:简单的就是使用一个简单的关键字,复杂的可以使用方括号来嵌套控制标志,并可在方括号中使用value=action的方式表达.
简单的关键字有四个:
1、 required
当使用此控制标志时,当验证失败时仍然会继续进行其下的验证过程,它会返回一个错误信息,但是,它不会验证失败而停止继续验证过程,因此用户不会知道是哪个规则项验证失败. 拥有帝国一切,皆有可能。欢迎访问phome.net
2、 requisite
此控制标志与required的验证方式大体相似,但是,只要某个规则项验证失败则立即结束整个验证过程,并返回一个错误信息.使用此关键字可以防止一些通过暴力猜解密码的攻击,但是,它会返回信息给用户,因此,它也有可能将系统的用户结构信息透露给攻击者.
3、 sufficient
只要有此控制标志的一个规则项验证成功,那么PAM构架将会立即终止其后所有的验证,并且不论其前面的required标志的项没有成功验证,它依然将被忽略,然后验证通过.
4、 optional
表明对验证的成功或失败都是可有可无的,所有的都会被忽略.(通常用于session类型)
复杂的控制标志能够让管理员可以指定在验证过程中发生某种事件时可以执行的动作.这些控制标志用方括号包括起来,并由一系列的value=action 所构成,每个值之间用空格分开.
在新版PAM中,可供你选择的value列表存在于/usr/include/security/_pam_types.h文件中.其中的内容包括:success,open_err,symbol_err,ervice_err,system_err,buf_err,perm_denied,auth_err,cred_insufficient,authinfo_unavail,user_unknown,maxtries,new_authtok_reqd,acct_expired,session_err,cred_unavail,cred_expired,cred_err,no_module_data,conv_err,authtok_err,authtok_recover_err,authtok_lock_busy,authtok_disable_aging,try_again,ignore,abort,authtok_expired,module_unknown,bad_item,conv_again,incomplete,和default.
action 可以是一个无符号的整数,当在某行验证规则的控制标志的value指定期一个无符号的整数时n,就表明由此行往下的n行验证模块将被直接跳过.
Action还可以是下列所示的值:
ignore:设定此值后,指定的事件将会被忽略.
bad :设定此值后,当发生指定的事时的返回值将被认为是验证模块失败.如果此验证模块是整个验证堆叠中的第一个失败的模块, 它的状态值将作为整个堆叠的状态. 拥有帝国一切,皆有可能。欢迎访问phome.net
die:它的作用与bad 相同,但是,当设定此值的此类事件发生时,会终止整个验证模块的后续验证工作,立即返回到应用程序.
ok :设定此值可以用来覆盖此行验证规则前面已经返回了PAM_SUCCESS的所有值,但是如果前面有验证规则返回了一个错误的值,那么就不会被它覆盖.
done:它的作用与ok 相同,但是,当设定此值的此类事件发生时,会终止整个验证模块的后续验证工作,立即返回到应用程序.
reset :设定此值的作用是用来清除内存中原先的验证模块状态,并重新开始下一组的验证.
第三列是Module-path,用来为要验证的服务提供需要使用的验证模块.在Fedora Core 6系统中,当要引用的模块处于/lib/security/或/lib64/security/目录时,可以只输入模块的完整名称;如果要引用的模块不存在这两个默认的保存目录,就必需在模块的完整名称前加上完整的模块路径名.例如/usr/lib/security/.
第四列是Module-arguments,用来为引用的模块指定特殊的选项,多个选项之间可以通过空格隔开,还可在选项中使用“[ ]”来输入嵌套的命令或字串,当选项超过一行时用“”符号连接下一行.
3、PAM中常用的验证模块说明
要掌握PAM的使用,我们还应当去了解一些常用的PAM验证模块的作用,毕竟PAM的具体验证功能都是由这些可插入的验证模块来完成的.在RedHat企业Linux3系统中,默认的PAM验证文件存在于/lib/security/或/lib64/security/目录,它们都是以“.so”为后缀的文件.
每个PAM验证模块的使用对象,总是与PAM的验证类型相对应的.有些验证模块只针对某一种验证方法,例如pam_access.so验证模块只与account验证类型配套使用,而有些验证模块却可以与所有的验证类型一起使用,例如pam_unix.so验证模块.你在了解这些验证模块时,应当同时了解它们的所属于验证类别. 拥有帝国一切,皆有可能。欢迎访问phome.net
下面是一些常用的验证模块的简要说明:
(1)、pam_access验证模块
pam_access验证模块一般与account验证类型一同使用.它主要用于对访问进入管理,提供基于登录名、主机名或域名、公网IP地址或网络号,以及非网络登录时的tty名称的访问控制.pam_access验证模块主要是根据/etc/security/access.conf配置文件中的内容,来进行相应的验证工作的.如果access.conf文件不在缺省的/etc/security/目录,你可以在其后使用accessfile参数指定自定义配置文件的绝对路径.
  /etc/security/access.conf配置文件中的每一行都由如下三个字段构成,中间用冒号隔开:
  permission:users/groups:origins
  permission(权限)字段可以用“ ”,即允许访问,“-”禁止访问来表示相应的权限.
  users/groups(用户或组)字段可以是一个或几个登录名、组名及ALL(表示任何人)的一个清单.要区分哪个是用户名,哪个是组名,可以将组名加入到一个括号中,例如(groups).
  origins(来源)字段可以是非网络登录时的tty名称、主机名、域名(以“.”开始)、主机地址、网络号(以“.”结束)、带有子网掩码的公网IP地址,以及ALL(表示任何主机)和LOCAL只要不包含“.”的所有字符).还可以使用EXCEPT操作符来表示除…之外.
(2)、pam_cracklib验证模块
pam_cracklib验证模块通常只与password验证类型一起使用.这个验证模块可以通过插入password堆栈,为特殊的应用提供可插入式密码强度性检测.它的工作方式就是先提示用户输入密码,然后使用一个系统字典和一套规则来检测输入的密码是否不能满足强壮性要求.密码的强度检测分二次进行,第一次只是检测密码是否是提供的对比字典中的一部分,如果检测结果是否定的,那么就会提供一些附加的检测来进一步检测其强度,例如检测新密码中的字符占旧密码字符的比例,密码的长度,所用字符大小写状况,以及是否使用了特殊字符等等. 拥有帝国一切,皆有可能。欢迎访问phome.net
(12)、pam_lastlog显示用户上次登录的日期和时间,它主要通过读取/var/log/lastlog文件来显示.它只适用与session验证类型.
(13)、pam_warn将刚登录的信息记录到系统日志当中,它一般与auth和password验证类型一同使用.
(15)、pam_wheel验证模块,当使用此验证模块后,只有加入到了一个wheel group中的的根用户,并且提交的密码有效,才能访问指定的服务或系统.将它与pam_rootok一同使用能增加对根用户的限制.它只适用于auth和account验证类型.
在/lib/security/或/lib64/security/目录中还有许多没有在上面列出的验证模块,它们的使用频率不高,加上文章篇幅的限制,就不再在此对它们做相应的说明,大家可以参考PAM管理员指南来得到它们的详细说明.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号