外包派

当前位置: 主页 > 文档中心 > Linux 文档 >

PAM 详解

时间:2011-10-25 18:47来源:未知 作者:外包派 点击:
对于大多数人,PAM 是一种罐装的烹调油。但是作为 Linux 安全术语,PAM 代表 可插入身份验证模块(Pluggable Authentication Modules) 。这些模块提供额外的身份验证规则,保护对计算机的访问

原文:http://www.ibm.com/developerworks/cn/aix/library/au-sshlocks/index.html

 

 对于大多数人,PAM 是一种罐装的烹调油。但是作为 Linux® 安全术语,PAM 代表可插入身份验证模块(Pluggable Authentication Modules)。这些模块提供额外的身份验证规则,保护对计算机的访问。

首先讨论一个基本问题:究竟为什么要使用 PAM?如果每个程序不得不定义自己的身份验证逻辑,就会很混乱。如何确定所有应用程序都实现了相同的测试和检查?如果需要额外的控制手段,那么怎么办?难道要重新编写所有程序吗?在计算机科学领域,有时候可以用额外的一层解决所有问题,至少在安全方面是这样。如果一个程序需要验证用户的身份,它可以调用 PAM API。这个 API 负责执行在 PAM 配置文件中指定的所有检查。这种方法还允许方便地修改身份验证规则,所有感知 PAM 的程序都会自动地应用新规则,不需要修改它们的代码。如果希望使用某种生物学检查(比如虹膜扫描器或指纹采集器),而且生产商提供了 PAM,就可以方便地设置它。在配置文件中包含模块调用,所有应用程序就可以使用这个设备了。

配置 PAM

PAM 提供四个安全领域的特性,但是应用程序不太可能同时需要所有这些方面。例如,passwd 命令只需要下面列表中的第三组:

  • account 处理账户限制。对于有效的用户,允许他做什么?
  • auth 处理用户识别 — 例如,通过输入用户名和密码。
  • password 只处理与密码相关的问题,比如设置新密码。
  • session 处理连接管理,包括日志记录。

在 /etc/pam.d 目录中为将使用 PAM 的每个应用程序创建一个配置文件,文件名与应用程序名相同。例如,login命令的配置文件是 /etc/pam.d/login。

必须定义将应用哪些模块,创建一个动作 “堆”。PAM 运行堆中的所有模块,根据它们的结果允许或拒绝用户的请求。还必须定义检查是否是必需的。最后,other 文件为没有特殊规则的所有应用程序提供默认规则。

  • optional 模块可以成功,也可以失败;PAM 根据模块是否最终成功返回 success 或 failure
  • required 模块必须成功。如果失败,PAM 返回 failure,但是会在运行堆中的其他模块之后返回。
  • requisite 模块也必须成功。但是,如果失败,PAM 立即返回 failure,不再运行其他模块。
  • sufficient 模块在成功时导致 PAM 立即返回 success,不再运行其他模块。

配置文件的结构很简单。可以包含注释,注释以散列符 (#) 开头;通过在换行处加上反斜杠 (\),可以把长的行分为多行。行有三个字段:领域 (accountauthpassword 或 session)、控制标志(optionalrequiredrequisite 或 sufficient)、将运行的模块的路径和参数。注意,第二个字段可以更复杂;更多信息见 参考资料。另外,可以使用 include 规则以包含其他文件中的规则,比如 auth include common-account

特殊的 /etc/pam.d/other 文件是 “默认的” 配置文件(见 清单 2),其中的规则自动地应用于没有自己的配置文件的所有应用程序。为了确保安全,应该快速检查 /etc/pam.d 目录,把您不使用的所有配置文件改为其他名称(这样就会使用 other 配置)。如果认为确实需要某个应用程序,那么只需把配置文件改回原来的名称。默认配置通常拒绝所有请求(通过使用 pam_deny.so 模块)并警告管理员(通过 pam_warn.so 模块),让管理员解决问题。

标准的 “other” 配置文件为没有自己的配置文件的所有应用程序提供安全的默认规则(拒绝所有请求)。


清单 2. 标准的 “other” 配置文件 

				
account required pam_deny.so 
auth required pam_deny.so 
auth required pam_warn.so 
password required pam_deny.so 
password required pam_warn.so 
session required pam_deny.so 


 

 

如果把 pam_deny.so 替换为 pam_unix.so,就应用标准的身份验证方法(输入用户名和密码)。如果您不关心安全性,那么使用 pam_permit.so,这会允许任何请求!

一些可用方法

尽管没有标准的模块列表,但是所有发行版都包含以下模块中的大多数。请检查驻留模块的 /lib/security 或 /usr/lib/security 目录。对于 64 位操作系统,用 lib64 替换 lib。如果需要更多信息,可以尝试执行 man the.name.of.the.module,而不要直接执行它;PAM 不是可执行的二进制代码。

  • pam_access 根据 /etc/security/access.conf 文件允许或拒绝访问。稍后将使用此模块决定允许哪些用户登录。
  • pam_cracklib 和 pam_pwcheck 检查新密码的强度。
  • pam_deny 和 pam_permit 是基本模块,分别拒绝或允许访问。
  • pam_echo 向用户显示指定文件的内容。
  • pam_lastlog 向用户显示他上一次登录的日期和时间。
  • pam_ldap.so 让用户根据 LDAP 服务器进行身份验证,提供跨网络的集中式身份验证。
  • pam_limits 模块允许指定系统资源限制,限制在 /etc/security/limits.conf 文件中定义。
  • pam_listfile 提供根据一个文件的内容允许或拒绝服务的另一种方法。
  • pam_mail 检查用户是否有未处理的邮件。
  • pam_motd 向用户显示 “message of the day” 文件。
  • 如果 /etc/nologin 文件存在,pam_nologin 阻止所有登录。
  • pam_rootok 允许根用户访问,不执行进一步检查。/etc/pam.d/su 中常常包含这个模块;必需的行是 auth sufficient pam_rootok.so。根用户可以作为任何用户操作,不需要提供密码。
  • pam_succeed_if 检查账户的特定属性,比如是否是某个组的成员。
  • pam_time 可以根据 /etc/security/time.conf 中的规则限制对服务的访问。
  • pam_unix(或 pam_unix2)提供基于 /etc/passwd 和 /etc/shadow 文件的传统 UNIX® 身份验证。
  • pam_userdb 根据一个 Berkeley 数据库执行身份验证。
  • pam_warn 在系统日志中记录信息。
  • pam_wheel 只向 wheel 组的成员提供根访问权;必需的行是 auth required pam_wheel.so

关于其他模块和编写自己的模块的信息,请查阅 参考资料。现在,使用 PAM 决定谁可以登录您的计算机。

用 PAM 限制访问

现在,我们来使用 PAM 限制谁可以连接您的服务器。必须编辑 /etc/pam.d/sshd 文件,让它像清单 3 这样。


清单 3. 在 sshd PAM 文件中添加 pam_access.so

				
#%PAM-1.0 
account include common-account 
account required pam_access.so 
auth include common-auth 
auth required pam_nologin.so 
password include common-password 
session include common-session 


 

 

在 sshd PAM 文件中添加 pam_access.so,就可以轻松地定义谁可以使用 SSH 连接您的计算机。pam_access.so 模块实现基于 /etc/security/access.conf 文件的安全控制,见清单 4。


清单 4. 通过使用 pam_access.so,定义谁可以或不可以使用 SSH

				
+ : ALL : 192.168.1. 
+ : jack : ALL 
+ : jill : ALL 
- : ALL : ALL 


 

 

第一行允许任何用户 (ALL) 从内部网络登录。后两行允许用户 jack 和 jill 从任何地方访问服务器。最后一行拒绝其他任何用户从其他任何地方访问。允许多个用户访问的另一种方法是使用 pam_listfile.so,这需要创建一个允许访问的用户列表(例如 /etc/ssh_users)。在 /etc/pam.d/sshd 文件中添加以下行:

 

auth required pam_listfile.so item=user sense=allow 
   file=/etc/ssh_users onerr=fail


 

 

这还没有完。必须修改 /etc/ssh/sshd_config 文件,让它使用 PAM。在此文件中添加 UsePAM yes 行,重新启动sshd 守护进程,这样就行了!

 

(责任编辑:外包派)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
windows xpwww.386w.com 7k7k7www.7k7k7.cc 3366www.7415.com xinxiguawww.xinxigua.com 2012www.xwdy.com xinluobowww.xinluobo.com ghost xpwww.xiame.com win7www.jiasuba.com rmztwww.rmzt.com 33www.33w.com hao123.comwww.hao123.lu hao123www.hao123.my dywww.xwdy.com luobowww.xinluobo.com mfdyywww.mfdyy.com 56www.56zz.com k7k7www.k7k7.cc k7k7kwww.k7k7k.com xp