PAM(Pluggable Authentication Modules)认证机制详情
                                            作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
 
 一.介绍PAM
  PAM(Pluggable Authentication Modules)即可插拔式认证模块,它是一种高效而且灵活的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。PAM可以根据用户的网段、时间、用户名、密码等实现认证。并不是所有需要验证的服务都使用PAM来验证,如MySQL-Server,httpd就没有安装相应的PAM文件(因此我们可以说pam只对简单的应用有认证功能,对于应用机制比较复杂的需要其自己编写相应的认证机制代码啦)。当然,程序通过了PAM的验证之后,PAM程序还会持续跟踪验证后的对象,对其做相应的访问限制。PAM就很像人力资源部门,当你入职一下公司的时候是人力得认证你,等认证成功后你才可以入职,而入职之后并不是人力部门就不管理了,人力资源部门还是会持续监督你在公司从入职到离职的行为并做相应的操作。
 
二.PAM的原理
1.PAM认证流程
  当一个简单的应用程序需要用到认证功能时,会找到Linux的PAM模块来进行认证功能。PAM是一个核心模块,因此它并不负责认证,而是应用程序自定义的PAM配置文件,这个自定的PAM配置文件中记录了会调用相应的模块进行认证(当然PAM也是需要依赖“/etc/nsswitch.conf”这个配置文件去找相关的文件哟)。PAM读取配置文件之后会根据读取到的内容进行相应的认证操作(会根据认证类型和控制流程进行认证,下面会有介绍),最后会将认真的结构返回给应用程序。
2.PAM配置文件格式
  如果我们使用PAM的核心配置文件可以用一个文件来管理(/etc/pam.conf),也可以用多个文件进行管理(/etc/pam.d/service)。
a>./etc/pam.conf
  如果我们使用一个配置文件进行认真的话,可以清楚的知道每一行的规则是应用在哪个服务上的,当然如果你这样做的话会导致配置文件过大!具体格式如下:“Service(服务) type(认证类型) control(控制流程,控制标记) module-path(模块路径)module-arguments(模块参数)”
b>./etc/pam.d/service
  如果想要把每个应用程序都单独用一个配置文件信息管理的话,只需要在“/etc/pam.d/”目录下建立相应的配置文件名称并做相应的配置即可。具体格式如下:” type(认证类型) control(控制) module-path(模块路径)module-arguments(模块参数)“
  

三.PAM模块认证类型(我们也可以把它理解为”栈“)
1.auth
  认证管理,验证使用者身份,账号和密码。
2.account
  用户认证,基于用户表,时间或密码有效期来决定是否允许访问。
3.password
  密码(口令),认证管理 进制用户方法尝试登陆,在变更密码是进行密码复杂性控制。
4.session
  会话管理,进行日志记录,或者限制用户登陆的次数,资源限制。
 
四.PAM模块的控制流程(控制标记,用于控制认证成功或失败时要采取相应的动作)
1.required
  必要条件。此关不过,仍需检测同一个栈中的其他模块,最后返回failure,认证失败。拥有参考其他模块意见基础之上的一票否决权。可以通过其它模块来检查为什么验证没有通过。
2.requisite
  必要条件,验证失败时则立即结束整个验证过程,返回fail,就好比让你答题100道,如果在答题的过程中有一道做错了直接让你出去,不会进行下面的答题过程。拥有一票否决,此关不过,立即返回failure。
3.sufficient
  充分条件,验证成功则立即返回OK,不再继续验证,否则忽略sufficient的结果并继续其它。换句话说,sufficient的验证失败对整个验证没有任何影响。
4.optional
  可选条件,无论验证结果如何,均不会影响。通常用于session类型。
5.include
  包含另外一个配置文件中类型相同的行。换句话说,包含进来指定的其他配置文件中同名栈中的规则,并以之进行验证。
6.substack
  俗称子栈,这个控制流程俺没有用过,基本上也用不到,我们可以忽略。
 
 
 
 
五.常用PAM模块介绍
1.pam_rootok.so
  功能:用户UID是0,返回成功
 [root@yinzhengjie ~]# more /etc/pam.d/su | grep  pam_rootok.so
#auth sufficient pam_rootok.so
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# su yinzhengjie
Password:
[yinzhengjie@yinzhengjie root]$ exit
exit
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# more /etc/pam.d/su | grep pam_rootok.so
auth sufficient pam_rootok.so
[root@yinzhengjie ~]# su yinzhengjie
[yinzhengjie@yinzhengjie root]$
[yinzhengjie@yinzhengjie root]$ exit
exit
[root@yinzhengjie ~]#

案例展示:(限制root切换用户也需要密码)

2.pam_access.so
  功能:访问控制,默认配置文件为“/etc/security/access.conf ”,通常作用于登陆程序,如su,login,gdm,sshd等等。
 [root@yinzhengjie ~]# more /etc/pam.d/sshd | grep pam_access.so
auth required pam_access.so
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# tail - /etc/security/access.conf
#Add by yinzhengjie
-:root:ALL EXCEPT 10.0.0.0/ #只让root从10.0.0./24的网段访问
#-:root:10.0.0.0/ #拒绝从10.0.0./24这个C的地址访问过来。
#-:root:ALL EXCEPT 10.10.0.161 #拒绝从10.10.0.161这个IP访问过来。
[root@yinzhengjie ~]#

案例展示:(控制访问的源IP地址)

3.pam_listfile.so
  功能:基于自定义文件允许或拒绝访问资源限制
 [root@yinzhengjie ~]# grep listfile /etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow file=/etc/yinzhengjie_ssh_users onerr=fail #注意,“onerr=fail”表示当文件“/etc/yinzhengjie_ssh_users”不存在时,默认为fail。
[root@yinzhengjie ~]# > /var/log/secure
[root@yinzhengjie ~]# tail -10f /var/log/secure
Feb :: yinzhengjie sshd[]: reverse mapping checking getaddrinfo for bogon [10.0.0.161] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb :: yinzhengjie sshd[]: pam_listfile(sshd:auth): Couldn't open /etc/yinzhengjie_ssh_users
Feb :: yinzhengjie sshd[]: Failed password for root from 10.0.0.161 port ssh2
Feb :: yinzhengjie sshd[]: Received disconnect from 10.0.0.161: : The user canceled authentication.
^C
[root@yinzhengjie ~]# echo root > /etc/yinzhengjie_ssh_users
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# tail -10f /var/log/secure
Feb :: yinzhengjie sshd[]: reverse mapping checking getaddrinfo for bogon [10.0.0.161] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb :: yinzhengjie sshd[]: pam_listfile(sshd:auth): Couldn't open /etc/yinzhengjie_ssh_users
Feb :: yinzhengjie sshd[]: Failed password for root from 10.0.0.161 port ssh2
Feb :: yinzhengjie sshd[]: Received disconnect from 10.0.0.161: : The user canceled authentication.
Feb :: yinzhengjie sshd[]: Accepted password for root from 10.0.0.161 port ssh2
Feb :: yinzhengjie sshd[]: pam_unix(sshd:session): session opened for user root by (uid=)
^C
[root@yinzhengjie ~]#

案例展示:(sshd的黑名单或白名单)

4.pam_time.so
  功能:基于时间的访问控制,默认文件“/etc/security/time.conf ”
 [root@yinzhengjie ~]# tail - /etc/security/time.conf
#Add by yinzhengjie
sshd;*;*;SaSu0900- #表示sshd服务的所有终端的所有用户只能在8-18点可以正登陆。
[root@yinzhengjie ~]#

案例展示:(基于时间限制sshd的访问)

5.pam_tally2.so
  功能:登陆统计
 [root@yinzhengjie ~]# grep pam_tally2.so /etc/pam.d/sshd
auth required pam_tally2.so deny= even_deny_root root_unlock_time= unlock_time= #表示当用户输入次数超过2次时,锁定用户60秒,因此这里的“even_deny_root ”表示包括root用户,“root_unlock_time”表示root用户锁定的时间,“unlock_time”表示其他用户锁定的时间。
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# pam_tally2 --reset -u root #这里表示手动解锁。
Login Failures Latest failure From
root
[root@yinzhengjie ~]#

案例展示:(实现防止对sshd暴力破解)

6.pam_limits.so
  功能:限制用户会话过程中对各种资源的使用情况。缺省情况下该模块的配置文件是“/etc/security/limits.conf ”或“/etc/security/limits.d/*.conf”
 [root@yinzhengjie ~]# ulimit -a
core file size (blocks, -c)
data seg size (kbytes, -d) unlimited
scheduling priority (-e)
file size (blocks, -f) unlimited
pending signals (-i)
max locked memory (kbytes, -l)
max memory size (kbytes, -m) unlimited
open files (-n)
pipe size ( bytes, -p)
POSIX message queues (bytes, -q)
real-time priority (-r)
stack size (kbytes, -s)
cpu time (seconds, -t) unlimited
max user processes (-u)
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@yinzhengjie ~]# ulimit -n [root@yinzhengjie ~]#
[root@yinzhengjie ~]# tail - /etc/security/limits.conf
#Add by yinzhengjie
* soft nofile
* hard nofile
* soft nproc
* soft cpu
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# exit
logout
Last login: Sun Feb :: from 10.0.0.161
[root@yinzhengjie ~]# ulimit -n [root@yinzhengjie ~]#

案例展示:(调整最大打开的文件数)

六.查看进程文件是否支持PAM认证
  注意:PAM资源限制仅针对用户,不针对进程。换句话说,通一个进程如果被不同的用户执行,他们的影响是不一样的。如果进程以root运行,就不会受到PAM的限制。
 [root@yinzhengjie ~]# which sshd
/usr/sbin/sshd
[root@yinzhengjie ~]# which login
/bin/login
[root@yinzhengjie ~]# ldd /usr/sbin/sshd | grep pam
libpam.so. => /lib64/libpam.so. (0x00007f2c196cf000)
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# ldd `which login` | grep pam #注意,ldd命令是查看进程文件支持的动态库,而ldconfig是可以查看已经加载的动态库。我们可以用“ldconfig -p”来打印当前操作系统已经加载的动态库。
libpam.so. => /lib64/libpam.so. (0x000000323b200000)
libpam_misc.so. => /lib64/libpam_misc.so. (0x0000003230a00000)
[root@yinzhengjie ~]#
 
 
 
 
 

PAM认证机制详情的更多相关文章

  1. PAM认证机制

    PAM:Pluggable Authentication Modules 认证库:文本文件,MySQL,NIS,LDAP等 Sun公司于1995 年开发的一种与认证相关的通用框架机制 PAM 是关注如 ...

  2. CentOS-pam认证机制简介

    前言 linux下PAM模块全称是Pluggable Authentication Module for linux(可插入式授权管理模块),该由Sun公司提供,在Linux中,PAM是可动态配置的, ...

  3. AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

    AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数 ...

  4. PAM认证

    PAM认证 摘自: http://www.cnblogs.com/shenxm/p/8451889.html PAM(Pluggable Authentication Modules) Sun公司于1 ...

  5. 什么是PAM认证

    PAM(Pluggable Authentication Modules )是由 Sun 提出的一种用于实现应用程序的认证机制.其核心是一套共享库,目的是提供一个框架和一套编程接口,将认证工作由程序员 ...

  6. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  7. WPS 认证机制

    WPS 认证机制 WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)(有的叫做AOSS.有的叫做QSS,不过功能都一致.)是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线 ...

  8. 基于Token的WEB后台认证机制

    几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...

  9. HTTP中的摘要认证机制

    引子: 指定和服务器端交互的HTTP方法,URL地址,即其他请求信息: Method:表示http请求方法,一般使用"GET","POST". url:表示请求 ...

随机推荐

  1. 使用 spring-boot-devtools 进行热部署

    2019/3/5 更新: 发现热部署不生效,出现页面显示error的错误,然后在 application.properties 中注释了下面两行成功实现热部署(直接删掉也可以) #spring.dev ...

  2. 解决 idea 中的 tomcat控制台 和cmd tomcat下的中文乱码问题(win10 64位)

    原理:idea控制台里的日志默认是从tomcat的localhost.log 和 catalina.log 两个文件中读出来的. https://blog.csdn.net/zhaijingkui/a ...

  3. stl源码剖析 详细学习笔记 hashtable

    //---------------------------15/03/24---------------------------- //hashtable { /* 概述: sgi采用的是开链法完成h ...

  4. centos7 部署mysql-5.7.20

    一.系统环境 系统:CentOS Linux release 7.5 mysqlb进制包:mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 1)依赖包安装 yum ...

  5. 金蝶K3 11.0 WISE版本盘点机PDA条码数据采集器仓库条码管理

  6. TCP三路握手,本质是一个通信原理相关的问题

    在通信系统中,最基本的信息的传递都需要两步,发送方发送的消息和对方的回复确认:A->B Send, B->A Reply(ACK).如果多接触一下其他行业的通信流程和规范,例如航空.铁路调 ...

  7. “数学口袋精灵”App的第一个Sprint计划

    一.现状 我们这个团队想制作一个关于运算的游戏类型手机软件,针对我们这个学期的Android软件开发的课程,制作出一个关于数学算术游戏软件. 二.任务认领 第一阶段先把静态网页制作出来,各自的任务: ...

  8. Feature List

    我组最终决定所做的软件工程项目是Bing词典(UWP)的背单词模块,下面是初步定下的Feature List. 按用户场景变化顺序列举(假设是新用户): 1.用户可通过点击“背单词”标识或按钮进入背单 ...

  9. 我与git“美妙”的一天

    今天是第一天使用git,苦不堪言,感觉服务器和自己都要爆炸了,弄了半天才马马虎虎会了一点,基本流程如下 1.在mukever.online注册用户 2.下载git for windows(一个客户端) ...

  10. SQLServer2008只能编辑前面200行数据

    设置编辑所有行:操作步骤:打开数据库-〉工具-〉选项-〉sqlserver对象资源管理器-〉命令 把200改为0,即可编辑所有行了