PAM:Pluggable Authentication Modules  

  认证库:文本文件,MySQL,NIS,LDAP等

  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相关文件

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

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

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

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

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

pam认证原理

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

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

PAM认证过程:

  1.使用者执行/usr/bin/passwd 程序,并输入密码

  2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件

  3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证  

  4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

  通用配置文件/etc/pam.conf格式

    application type control module-path arguments

  专用配置文件/etc/pam.d/* 格式

    type control module-path arguments

  说明:

    服务名(application)

      telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务

    模块类型(module-type)

    control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况

    module-path 用来指明本模块对应的程序文件的路径名

    Arguments 用来传递给该模块的参数

    模块类型(module-type)

      Auth 账号的认证和授权

      Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)

      Password 用户修改密码时密码复杂度检查机制等功能

      Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开/关闭数据的信息,监视目录等

      -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

    Control:

      PAM库如何处理与该服务相关的PAM模块成功或失败情况

    两种方式实现:  

      简单和复杂

        简单方式实现:一个关健词实现

          required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。即为必要条件

          requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件

          sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件

          optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略

          include: 调用其他的配置文件中定义的配置信息

        复杂详细实现:使用一个或多个“status=action”

          [status1=action1 status2=action …]

            Status:检查结果的返回状态    

            Action:采取行为 ok,done,die,bad,ignore,reset

          ok 模块通过,继续检查

          done 模块通过,返回最后结果给应用

          bad 结果失败,继续检查

          die 结果失败,返回失败结果给应用

          ignore 结果忽略,不影响最后结果

          reset 忽略已经得到的结果

    module-path: 模块路径

      相对路径:

        /lib64/security目录下的模块可使用相对路径

        如:pam_shells.so、pam_limits.so

      绝对路径:  

        模块通过读取配置文件完成用户对系统资源的使用控制      

          /etc/security/*.conf

        注意:修改PAM配置文件将马上生效

        建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

        Arguments 用来传递给该模块的参数

pam文档说明

  /user/share/doc/pam-*  

  rpm -qd pam

  man –k pam_  

  man 模块名 如man rootok

   《The Linux-PAM System Administrators' Guide》

PAM模块示例

  模块:pam_shells

    功能:检查有效shell

    man pam_shells

    示例:不允许使用/bin/csh的用户本地登录

      vim /etc/pam.d/login

        auth required pam_shells.so

      vim /etc/shells

        去掉 /bin/csh

      useradd –s /bin/csh testuser

      testuser将不可登录

      tail /var/log/secure

  模块:pam_securetty.so

    功能:只允许root用户在/etc/securetty列出的安全终端上登陆

    示例:允许root在telnet登陆

      vi /etc/pam.d/remote

      #auth required pam_securetty.so #将这一行加上注释

      或者/etc/securetty文件中加入

      pts/0,pts/1…pts/n

    此模块可以禁止telnet服务root账号的远程登陆,解决方法,在服务器端/etc/securetty文件中添加pts/0,pts/1....或者在配置文件中注释掉验证模块/etc/pam.d/remote    #auth  required  pam_securetty.so

  模块:pam_nologin.so

    功能:

      如果/etc/nologin文件存在,将导致非root用户不能登陆

      如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin.txt文件内容,并拒绝登陆

  模块:pam_limits.so

    功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

    修改限制的实现方式:

      (1) ulimit命令,立即生效,但无法保存

        -n 最多的打开的文件描述符个数

        -u 最大用户进程数  

        -S 使用 soft(软)资源限制

        -H 使用 hard(硬)资源限制

      (2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf  

        配置文件:每行一个定义;

                     <domain>                       <type>                                                           <item>                           <value>

    <domain> 应用于哪些对象

      Username 单个用户

      @group 组内所有用户

      * 所有用户

    <type> 限制的类型  

      Soft 软限制,普通用户自己可以修改

      Hard 硬限制,由root用户设定,且通过kernel强制生效  

      - 二者同时限定

    <item> 限制的资源

      nofile 所能够同时打开的最大文件数量,默认为1024

      nproc 所能够同时运行的进程的最大数量,默认为1024

    <value> 指定具体值

      限制用户最多打开的文件数和运行进程数  

      /etc/pam.d/system-auth

      session required pam_limits.so

    vim /etc/security/limits.conf

      apache – nofile 10240 apache用户可打开10240个文件

      student hard nproc 20 不能运行超过20个进程

练习

   1、限制centos用户只能够在工作时间通过ssh远程连接本机

   2、限制只有admins组内的用户可ssh到本机

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

  1. PAM认证机制详情

    PAM(Pluggable Authentication Modules)认证机制详情 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.      一.介绍PAM PAM(Plugga ...

  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. Keepalived + Nginx + Tomcat 高可用负载均衡架构

    环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...

  2. 2017 ACM/ICPC Asia Regional Shenyang Online transaction transaction transaction

    Problem Description Kelukin is a businessman. Every day, he travels around cities to do some busines ...

  3. 【ACM】阶乘之和 - 避免重复计算

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

  4. Spring学习(五)事务管理

    Spring 事务管理: 一.事务概念: 1.什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的 ...

  5. SQL判断经纬度在矩形内

    1,将城市地图拆分等距拆分为矩形 数据结构如图: 2.查看高德JS API (点是否在多边形内)核心代码: a=[114.069564,22.545774]; b=[ [114.067595,22.5 ...

  6. 配置百度云盘python客户端bypy上传备份文件

    要求:安装python2.7,安装git 1.git clone https://github.com/houtianze/bypy.git 2.cd bypy 3.sudo python setup ...

  7. 利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能

    事由: 这两天mentor给我布置了个任务让我用BenchmarkDotNet工具去测试一下同一个API 用同步和异步方法写性能上有什么差别. 顺带提一下: 啊啊啊啊 等我仔细看文档的时候文档 发现它 ...

  8. Ubuntu 12.04搭建svn服务器【转】

    这是一个比较老旧的话题,毕竟大家现在都使用Git(http://git-scm.com/),Git在分支.代码存储.冲突.速度方面的机制都更优秀. 那我们难道还有使用svn的场景?当然,比如对Git很 ...

  9. 观察者模式(Observe Pattern)

    观察者模式: 当对象存在一对多关系时,使用观察者模式(Observe Pattern).例如:当一个对象被修改时,会通知它的依赖对象. 介绍: 1.意图:定义对象的一种一对多的依赖关系,当一个对象的状 ...

  10. C#类型简述

    一.值类型 1.布尔类型 bool,范围 true false 2.整数类型 sbyte,范围 -128~127 byte,范围 0~255 short,范围 -32768~32767 ushort, ...