Linux 第34天 pam

时间: 20180823


目录

NSSWITCH 名称解析

PAM 认证机制



NSSWITCH

nsswitch是network service switch的简称,叫做网络服务转换,主要用于调整网络服务的名称解析机制。一台主机的

每种服务都有不同的认证方式,如基于密码认证,指纹验证,虹膜验证等,这些服务的认

证所采用哪种方式?这个便是由nssiwtch来定义一个主机的某个服务所采用的验证的方式


nswitch是一个认证框架,即每个服务都可以调用此框架来实现验证功能,目的是为了统

一,这样有需要认证的服务,应用都使用统一的调用接口来调用即可。每个服务提供不同

的接口,但是每种接口都需要用专用的驱动(库文件): 也可以采用一个统一的框架,此

框架只提供一个接口,不同的应用程序可以在此框架之上定义不同的数据集(认证机制)。

很显然采用统一的框架结构很方便的进行统一管理,而NSS就是这个框架。


NSS的配置文件/etc/nsswitch.conf

格式为 解析库: 解析库类型

如 密码认证方式 passwd: files

表示密码的认证方式为本地文件认证方式。也可以根据自己的需求来更改认证方式

如passwd: ldap 如果想采用多种则可以再后边再跟,则会采取顺序先后进行认证

如果第一个所指定的认证不成功,则会接着找下一种认证方式里去查,如果成功

则直接返回。


在解析库里查询时,查询是有返回值的

SUCCESS: service ok, found name

NOTFOUND: service ok, name not found

UNAVAIL: service not avaliable

TRYAGAIN: temporary service failure


默认地动作为在第一次遇到SUCCESS状态之后,即return,否则continue,dns解析

过程就是这样。当然我们还可以自定义这些动作,如系统账号密码认证过程,当ldap

服务正常时如果验证后没有找到则直接返回结果,而不会进行后续的其它的解析库

只有当ldap验证服务出现故障时,才会通过本地账号密码文件进行认证,写法如下

passwd: ldap(NOTFOUND=return) files


PAM (Pluggable Authentication Modules)

可插入式认证模块,NSS是用来实现名称解析的,如同上面所讲的在密码认证过程当中

,NSS负责指定通过哪种方式去验证用户身份,而PAM就是接下来要去实现认证工作的

一个模块。同NSS一样每一种服务都用到不同的认证方式,因此就需要不同的认证库,认

证库可以是文件,数据库,ldap,nis等,同样这些认证库的系统模块位于

/lib64/security目录下的所有库文件。NSS定义了密码存储的位置,pam就要能够与对

应的存储接口进行通信,如ldap、shadow等,pam还可以通过自己的一些权限指派模块

来限制一些额外的资源,在pam的配置文件当中为每种应用定义其需要用到的模块,包括

驱动、授权机制等等。


pam的主配置文件为/etc/pam.conf 其它次配置文件位于/etc/pam.d/目录下的所有文

件,该目录下的文件为每个应用定义专用的配置。需要注意的是其中/etc/pam.conf在

centos6就已经取消掉了使用的是/etc/pam.d目录下对应的服务配置文件其格式为:

type control module-path module-arguments

type功能包括: auth, account, password, session

account: 与账号管理相关的非认证功能

auth: 认证和授权

password: 用户修改密码时使用

session: 用户获取到服务之前或使用服务完成之后要进行的一些附属性操作

control 同一种功能的多个检查之间如何进行组合,有两种机制:

用一个关键词来定义

使用一到多组 return value=action

简单的机制有

required

requisite

sufficient

optional

include 使用其它的配置文件中同样功能的相关定义来进行检查

复杂的机制

[value1=action1 value2=action2]

value 指此项检查的返回值,其可能的取值有多种如success等

action 采取的操作,其可能的取值常用的有6种如ok, done, die, ignore

bad, reset

module-path

模块路径

相对路径/lib64/security

绝对路径/path/module

module-arguments 模块参数


这里不再多做讲解了,个人感觉能把这个理解了,你就完全了解了linux是如何实现一个

用户的登录认证机制,以及可以根据自己的需求来修改这些参数了,我查了一下官方文档

但是不是特别理解,这里不作详解。文档可参考

Red_Hat_Enterprise_Linux-7-System-Level_Authentication_Guide-en-US

里边有一章讲解

USING PLUGGABLE AUTHENTICATION MODULES (PAM) 表示个人理解不深入,不太懂模块

所以只能研究到此哈哈。