pan认证机制

一、什么是pam

   PAM(Pluggable Authentication Modules ) Sun公司于1995 年开发的一种与认证相关的通用框架机制, PAM 是关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统 提供的服务和该服务的认证方式分开, 使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序, 一种认证框架,自身不做认证。

   它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点 对点协议(PPP)),su等应用程序中。系统管理员通过PAM配置文件来制定不同应用程序的不同认 证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用; 而PAM服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( )供PAM接 口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程 序和相应的PAM服务模块联系起来。

二、pam认证原理

   1. PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so 

   2.PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证

三、pam配置文件

        – 模块文件目录:/lib64/security/*.so 

        – 环境相关的设置:/etc/security/ 

        – 主配置文件:/etc/pam.conf,默认不存在

        – 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME 

注意:如/etc/pam.d存在,/etc/pam.conf将失效

  通用配置文件/etc/pam.conf格式:application  type  control  module-path  arguments 

  专用配置文件/etc/pam.d/* 格式 :type control module-path arguments 

image.png

3.1、PAM的模块类型(module-type)

认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由PAM模块调用.

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

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

session

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

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

3.2、PAM的控制标记

PAM使用控制标记来处理和判断各个模块的返回值.(在此只说明简单的认证标记) 

控制标记说明
required

表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息。

requisite

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

sufficient表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required 控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同
optional表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略).

四、模块路径( module-path)

 – 相对路径: /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so 

 – 绝对路径:模块通过读取配置文件完成用户对系统资源的使用控制 /etc/security/*.conf 

注意:修改PAM配置文件将马上生效,编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

五、实例

pam_shells.so模块的意思是如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell

1.创建一个用户zhaoyun指定其sheLL为/bin/csh,然后再/etc/shells文件中删除/bin/csh,该操作会实现赵云用户无法成功登录。

image.png

配置etc/pam.d/sshd文件

image.png

配置成功后赵云用户以ssh的方式登陆系统,处出现拒绝登陆一直让重新输入密码,如下图。

image.png

模块pam_securetty.so其功能为只允许root用户在/etc/securetty列出的安全终端上登陆 

2. 允许root在telent登陆(默认telent是不安全的登陆,拒绝root身份登陆)

image.png

修改/etc/securetty配置文件,将要指定的终端添加进去,该次实验指定终端pts/4。又或者vim /etc/pam.d/login把auth required pam_securetty.so这一行加上注释。

image.png

再次telnet即可成功登陆。

image.png

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章