可动态加载验证模块:
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等
在Linux中进行身份或是状态的验证程序是由PAM来进行的,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。PAM本身不会执行验证,而是借助策略和模块来验证
Linux各个发行版中,PAM使用的验证模块一般存放在/lib64/security/目录下,可以使用ls命令进行查看本计算机支持哪些验证控制方式,一般的PAM模块名字例如pam_unix.so,模块可以随时在这个目录下添加和删除,这不会直接影响程序运行,具体的影响在PAM的配置目录下。
PAM的配置文件位于/etc/pam.d/目录下面。ls命令可以看到所有支持PAM模块的服务以及这些服务使用PAM的配置。(注:/etc/pam.d/other 为服务PAM配置文件没有匹配的PAM时使用的默认配置文件)
查看服务是否支持PAM验证模块:
ldd service_dir(服务所在目录) | grep libpam
如:ldd /usr/sbin/vsftpd | grep libpam
PAM配置文件的格式:
type control modules [modules_args]
第一列代表模块类型, 第二列代表控制标记, 第三列代表模块路径:要调用模块的位置。一般是在/lib/security文件中, 第四列是模块参数。
type:
auth: 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root
account:对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等
session:这个模块用来定义用户登录前的及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.
passwd:使用用户信息来更新.如:修改用户密码
control:
required: 表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息
requisite: 与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.不再进行同类型后面的操作.
sufficient:表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required 控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同
optional:表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略).
include:引用其他的配置文件,把匹配权交给其他配置文件(如果其他配置跳出,则整个匹配结束)
substack:引用其他的配置,把匹配权交给其他配置文件(如果其他配置跳出,则仅仅跳出子匹配)
modules:匹配认证模块