PAM可以说是一套应用程序编程接口,它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能够回报用户验证结果(成功或失败)。

  PAM通过一个与程序相同文件名的配置文件来进行一连串的认证分析需求。以passwd为例,当你执行passwd后,这个程序调用PAM的流程:

  1、用户开始执行/usr/bin/passwd这支程序,并输入密码

  2、passwd调用PAM模块进行验证

  3、PAM模块会到/etc/pam.d/中寻找与程序(passwd)同名的配置文件

  4、依据/etc/pam.d/passwd内的设置,引用相关的PAM模块逐步进行验证分析

  5、验证结果(成功、失败或其他信息)回传给passwd这个程序

  6、passwd这支程序会根据PAM回传的结果决定下一个操作

  看看/etc/pam.d/passwd这个配置文件

 
  
  1. [root@mkk ~]# cat /etc/pam.d/passwd  
  2. #%PAM-1.0 
  3. auth       include      system-auth 
  4. account    include      system-auth 
  5. password   include      system-auth 
  6. 验证类型 控制标准 PAAM模块与该模块参数

  第一个字段:验证类型(type)

  验证类型分为四种:

  auth:是authention(认证)的缩写,所以这个种类型主要用来检验用户的身份验证。

  account:account(账号)则大部份是在进行授权,主用用来检验用户是否具有正确的权限

  session:session是会议期间的意思,所以session管理的就是用户在这次登陆(或使用这个命令)期间PAM所给予的环境设置

  password:password就是密码,主要用于提供验证的修订工作,就是修改密码。

  第二个字段:验证的控制标示

  验证的控制标示主要也分四种控制方式:

  required:这类标示为,不论验证成功或失败都继续验证

  requisite:这类标示为,失败则不在进行验证,只有成功才继续验证

  sufficient:这类标示为,验证成功则不进行验证,验证失败就继续验证

  optional:这类标示,更多是显示信息,而不进行验证

  常见模块简介

  首先看看我们的登陆(login)模块

 

 
  
  1. [root@mkk ~]# cat /etc/pam.d/login  
  2. #%PAM-1.0 
  3. auth [user_unknown=ignore success=ok ignoreignore=ignore default=bad] pam_securetty.so 
  4. auth       include      system-auth 
  5. account    required     pam_nologin.so 
  6. account    include      system-auth 
  7. password   include      system-auth 
  8. # pam_selinux.so close should be the first session rule 
  9. session    required     pam_selinux.so close 
  10. session    include      system-auth 
  11. session    required     pam_loginuid.so 
  12. session    optional     pam_console.so 
  13. # pam_selinux.so open should only be followed by sessions to be executed in the user context 
  14. session    required     pam_selinux.so open 
  15. session    optional     pam_keyinit.so force revoke 
  16. [root@mkk ~]# cat /etc/pam.d/system-auth 
  17. #%PAM-1.0 
  18. # This file is auto-generated. 
  19. # User changes will be destroyed the next time authconfig is run. 
  20. auth        required      pam_env.so 
  21. auth        sufficient    pam_unix.so nullok try_first_pass 
  22. auth        requisite     pam_succeed_if.so uid >= 500 quiet 
  23. auth        required      pam_deny.so 
  24.  
  25. account     required      pam_unix.so 
  26. account     sufficient    pam_succeed_if.so uid < 500 quiet 
  27. account     required      pam_permit.so 
  28.  
  29. password    requisite     pam_cracklib.so try_first_pass retry=3 
  30. password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok 
  31. password    required      pam_deny.so 
  32.  
  33. session     optional      pam_keyinit.so revoke 
  34. session     required      pam_limits.so 
  35. session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid 
  36. session     required      pam_unix.so 

 

  上面使用了非常多的PAM模块,每个模块功能都不太相同,详细的模块情报可以在系统中在找到

  /etc/pam.d/*:每个程序个别的PAM模块配置文件;

  /lib/security/*:PAM模块文件的实际放置目录;

  /etc/security/*:其他PAM环境的配置文件;

  /usr/share/doc/pam-*/:详细的PAM说明文件。

  简单的介绍比较常用的模块

  pam_securetty.so:

  限制系统管理员(root)只能够从安全的终端机登陆。所谓的安装终端可以在/etc/securetty这个配置文件中设置

  pam_nologin.so

  这个模块可以设置一般用户能否登陆系统,样/etc/nologin这个文件存在时,则所有一般用户均无法登陆系统,但对root没有影响。

  pam_selinux.so

  SElinux是针对程序来进行详细管理权限的功能

  pam_console.so

  当系统出现某些问题时,或某些时刻你需要使用特殊的终端接口登陆主机时,这个模块可以帮你处理文件权限问题,让用户可以通过特殊终端接口顺利登陆系统

  pam_loginuid.so

  验证用户的UID真的是我们需要的数值,可以用这个模块来进行规范

  pam_env.so

  用来设置环境变量一个模块,如果你需要额外的环境变量设置,可以参考/etc/security/pam_env.conf这个文件的详细说明

  pam_UNIX.so

  这个模块可以用于验证阶段的认证功能,可以用于授权阶段的账号可许证管理,可以用于会议阶段的日志文件记录等。

  pam_cracklib.so

  可以用来检验密码强度

  pam_limits.so

  可以参考/etc/security/limits.conf内的说明