Linux-PAM

一.PAM简介

  Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.不用(重新编写和)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制.

  PAM使用配置文件(/etc/pam.d/下的文件),来管理对程序的认证方式.应用程序调用相应的配置文件,从而调用本地的认证模块.模块放置在/lib/security下,以加载动态库的形式进行调用.


二. PAM的配置文件介绍

1. PAM配置文件的格式

PAM配置文件放到/etc/pam.d/目录下,使用应用程序名作为配置文件名.如:sshd,login等.

:

[root@station2 ~]# vi /etc/pam.d/cups

#%PAM-1.0

auth    include         system-auth

account include         system-auth  

2. PAM的模块类型

PAM有四种模块类型,分别代表四种不同的任务.它们是:认证管理,账号管理,会话管理和密码管理.一个类型可能有多行,它们按顺序依次由PAM模块调用.

l  auth:用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等.

l  account:对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等.

l  session:定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.

l  Password:使用用户信息来更新.如:修改用户密码.

3. PAM的控制标记

  PAM使用控制标记来处理和判断各个模块的返回值.

l  required:这个标记表示需要模块返回一个成功值.如果返回失败,则继续进行同类型的下一个操作,当所有此类型的模块都执行完后.才返回失败值.

l  requisite:与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.不再进行同类型后面的操作.

l  sufficient:如果此模块返回成功,则直接向应用程序返回成功,表示此类型成功.不再进行同类型后面的操作.如果失败,也不会影响这个类型的返回值.

l  optional:使用这个标记的模块,将不进行成功与否的返回.一般返回一PAM_IGNORE(忽略).

4. 模块路径

  模块路径.即要调用模块的位置. 一般保存在/lib/security/下,如: pam_unix.so同一个模块,可以出现在不同的类型中.它在不同的类型中所执行的操作都不相同.这是由于每个模块针对不同的模块类型,编制了不同的执行函数.

5. 模块参数

  模块参数,即传递给模块的参数.参数可以有多个,之间用空格分隔开,如:

  password   required   pam_unix.so nullok obscure min=4 max=8 md5

三.常用PAM模块

1.   pam_unix.so模块:

  auth类型: 提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0(PAM_SUCCESS).

  account类型: 检查用户的账号信息(包括是否过期等).帐号可用时,返回0.

password类型: 修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件

2.   pam_cracklib.so模块:

  password类型: 这个模块可以插入到一个程序的密码栈中,用于检查密码的强度.

  这个模块的动作是提示用户输入密码,并与系统中的字典进行比对,检查其强度.

3.   pam_loginuid.so模块:

  session类型:用来设置已通过认证的进程的uid.以使程序通过正常的审核(audit).

4.   pam_securetty.so模块:

  auth类型: 如果用户要以root登录时,则登录的tty必须在在/etc/securetty中法之前.

5.   pam_rootok.so模块:

  auth类型: pam_rootok模块用来认证用户id是否为0.为0返回”PAM_SUCCESS”.

6.   pam_console.so模块:

  session类型: 当用户登录到终端时,改变终端文件文件的权限.在用户登出后,再将它们修改回来.

7.   pam_permit.so模块:

  auth,account,password,session类型: pam_permit模块任何时候都返回成功.

8.   pam_env.so模块 :

  auth类型: pam_env允许设置环境变量.默认下,若没有指定文件,将依据/etc/security/pam_env.conf进行环境变量的设置.

9.   pam_xauth.so模块:

  session类型: pam_xauth用来在用户之间转发xauth-key.

  #如果不进行pam_xauth,当用户调用su成为另一个用户时,这个用户将不可以再访问原来用户的X显示,因为新用户没有访问显示的key.pam_xauth解决了当会话建立时,从原始用户到目标用户转发key和用户退出时销毁key的问题.

10.   pam_stack.so模块:

  auth,account,password,session: pam_stack可以调用另一个服务.也就是多个服务可以包含到一个设置中.当需要修改时,只修改一个文件就可以了.

11.  pam_warn.so模块:

  auth,account,password,session: pam_warn用来记录服务,终端,用户,远程用户和远程主机的信息到系统日志.模块总是返回PAM_IGNORE,意指不希望影响到认证处理.