PAM介绍
[root@station203 ~]# uname -a
Linux station203.example.com 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux
这里针对的RHEL5系统。
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统
提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序
,同时也便于向系统中添加新的认证手段。 PAM模块是一种嵌入式模块,修改后即时生效。
pam的重要文件:
/usr/lib/libpam.so.* ## PAM核心库
/etc/pam.conf ## PAM配置文件
/etc/pam.d/* ## PAM各个模块的配置文件
/lib/security/pam_*.so ## 可动态加载的PAM模块(各个系统可能不同)
检查摸个程序是不是支持pam,可以用下面的命令来测试:
[root@station203 ~]# ldd `which login` | grep pam
libpam.so.0 => /lib/libpam.so.0 (0x005de000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x00964000)
## 大概就是上面这个样子
PAM配置文件的每一行的格式:
Module-type Control-flag Module-path Arguments
模块类型 控制字符 模块路径 模块参数
Module-type:
auth:确定有关用户认证的两方面。第一,他确认用户就是他们自己,这通过应用程序提示用户输入密码或者其他正式身份的办法
。第二,这类模块会赋予成员资格。
account:处理非认证级的账号管理。典型的用法是基于一天的不同时间来限制、允许访问某服务。限制当前可用的系统资源(最大
用户数)或者限制特定用户—root只能从控制台登陆。
session:一系列有关动作,只在用户得到/失去服务时要做的事。这包括记录用户的登录/退出、挂载必要的目录等。
password:设置密码。
Control-flag:
required:表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同
一stack中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
requisite:与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块
,而是直接将控制权返回给应用程序。是一个必要条件。注:Solaris不支持。
sufficient:表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的
话可以忽略。可以认为是一个充分条件。
optional:表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
另外还有一个flag:include,从字面就知道什么意思了。包含另外一个配置文件。
下面简单画一下他们的过程:
required:(bad)
第一步OK->下一步false->下一步OK->下一步OK 结果是:失败
所有认证都OK 结果是成功
requisite:(die)
第一步OK->下一步false->后面就不再进行了 结果:失败
所有认证都OK 结果成功
sufficient:(ignore)
第一步OK->后面就不再进行了 结果成功
第一步false->(忽略)继续下面的验证 结果不一定,看后面的验证结果
optional:(ignore)
这个模块不会对结果有什么影响,可以认为忽略
Module-path:
REHL5的PAM module存放目录默认是在/lib/security。在各个模块的配置文件里,不用些绝对路径,直接写这个默认目录下面的模
块名就可以了。当然,也可以写绝对路径。
Arguments:
各个模块的参数都不一样,具体的要开发者的man手册。无效参数不会对结果有影响,但是会被日志记录下来。
首先,看看/lib/security有没有这个模块,再:man 模块名(不要后缀)
[root@station203 security]# man -k pam ## 查看系统里面有哪些pam模块
config-util (5) - Common PAM configuration file for configuration utilities
group.conf [group] (5) - configuration file for the pam_group module
/$LIB/security/pam_krb5/pam_krb5_storetmp [pam_krb5_storetmp] (8) - Temporary file helper
limits.conf [limits] (5) - configuration file for the pam_limits module
............省略...............
[root@station203 ~]# uname -a
Linux station203.example.com 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux
这里针对的RHEL5系统。
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统
提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序
,同时也便于向系统中添加新的认证手段。 PAM模块是一种嵌入式模块,修改后即时生效。
pam的重要文件:
/usr/lib/libpam.so.* ## PAM核心库
/etc/pam.conf ## PAM配置文件
/etc/pam.d/* ## PAM各个模块的配置文件
/lib/security/pam_*.so ## 可动态加载的PAM模块(各个系统可能不同)
检查摸个程序是不是支持pam,可以用下面的命令来测试:
[root@station203 ~]# ldd `which login` | grep pam
libpam.so.0 => /lib/libpam.so.0 (0x005de000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x00964000)
## 大概就是上面这个样子
PAM配置文件的每一行的格式:
Module-type Control-flag Module-path Arguments
模块类型 控制字符 模块路径 模块参数
Module-type:
auth:确定有关用户认证的两方面。第一,他确认用户就是他们自己,这通过应用程序提示用户输入密码或者其他正式身份的办法
。第二,这类模块会赋予成员资格。
account:处理非认证级的账号管理。典型的用法是基于一天的不同时间来限制、允许访问某服务。限制当前可用的系统资源(最大
用户数)或者限制特定用户—root只能从控制台登陆。
session:一系列有关动作,只在用户得到/失去服务时要做的事。这包括记录用户的登录/退出、挂载必要的目录等。
password:设置密码。
Control-flag:
required:表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同
一stack中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
requisite:与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块
,而是直接将控制权返回给应用程序。是一个必要条件。注:Solaris不支持。
sufficient:表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的
话可以忽略。可以认为是一个充分条件。
optional:表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
另外还有一个flag:include,从字面就知道什么意思了。包含另外一个配置文件。
下面简单画一下他们的过程:
required:(bad)
第一步OK->下一步false->下一步OK->下一步OK 结果是:失败
所有认证都OK 结果是成功
requisite:(die)
第一步OK->下一步false->后面就不再进行了 结果:失败
所有认证都OK 结果成功
sufficient:(ignore)
第一步OK->后面就不再进行了 结果成功
第一步false->(忽略)继续下面的验证 结果不一定,看后面的验证结果
optional:(ignore)
这个模块不会对结果有什么影响,可以认为忽略
Module-path:
REHL5的PAM module存放目录默认是在/lib/security。在各个模块的配置文件里,不用些绝对路径,直接写这个默认目录下面的模
块名就可以了。当然,也可以写绝对路径。
Arguments:
各个模块的参数都不一样,具体的要开发者的man手册。无效参数不会对结果有影响,但是会被日志记录下来。
首先,看看/lib/security有没有这个模块,再:man 模块名(不要后缀)
[root@station203 security]# man -k pam ## 查看系统里面有哪些pam模块
config-util (5) - Common PAM configuration file for configuration utilities
group.conf [group] (5) - configuration file for the pam_group module
/$LIB/security/pam_krb5/pam_krb5_storetmp [pam_krb5_storetmp] (8) - Temporary file helper
limits.conf [limits] (5) - configuration file for the pam_limits module
............省略...............