PAM认证

摘自: http://www.cnblogs.com/shenxm/p/8451889.html

PAM(Pluggable Authentication Modules)

    Sun公司于1995年开发的一种与认证相关的通用框架机制:PAM。
可插入式认证模块,是实现认证工作的一个模块。
因为每个服务都用到不同的认证方式,所以就需要不同的认证库。
认证库有文本文件,MySQL数据库,NIS ,LDAP等,这些库所对应的系统模块位于/lib64/security/目录下的所有库文件(以".so"后缀的文件)。
PAM是关注如何为服务验证用户的API(应用程序接口),通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。
使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式,而无需更改服务程序。 PAM是一种认证框架,自身不做认证。
PAM提供了对所有服务进行认证的中央机制,适用于login ,远程登录(telnet,rlogin,fsh,ftp, 点对点协议(PPP )),su等应用程序中。
系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( )) 来实现对认证方法的调用。
PAM 服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( ) 供PAM 接口库调用),将不同的认证机制加入到系统中。
PAM 接口库(libpam )则读取配置文件,将应用程序和相应的PAM 服务模块联系起来 。

PAM架构

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回传的结果决定下一个动作(重新输入密码或者通过验证)

PAM的配置文件

    1)pam的配置文件当中为每种应用定义其需要用到的模块,包括驱动、授权机制等。
2)配置文件
模块文件目录: /lib64/security/*.so
模块配置文件: /etc/security/*.conf
环境相关的设置: /etc/security/
主配置文件: /etc/pam.conf ,默认不存在。
次级配置文件目录: /etc/pam.d/,该配置文件目录下的每个配置文件都对应一个应用模块的专用配置文件
注意:
如/etc/pam.d 存在,/etc/pam.conf 将失效
3)模块通过读取模块配置文件完成用户对系统资源的使用控制
4)注意:修改PAM 配置文件将马上生效
5)建议:编辑pam规则时 ,保持至少打开一个root会话,以防止root 身份验证错误
6)通用配置文件/etc/pam.conf 格式
application 、type 、control 、module-path 、module-arguments
7)专用配置文件/etc/pam.d/* 格式
type、control、module-path、module-arguments
8)说明:
1》tyoe(功能,模块类型):
包括auth,account,password,session。
auth: 认证和授权;
account: 与账号管理相关的非认证功能;
password: 用户修改密码时使用;
session: 用户获取到服务前后使用服务完成后要进行的一些附属性操作
-type: 表示因为缺失而不能加载的模块将不记录到系统日志, 对于那些不总是安装在系统上的模块有用 2》control:
pam如何处理与该服务相关的pam的成功或失败情况?同一种功能的多个检查之间如何进行组合?有两种实现机制。
1.使用一个关键词来定义:
required: 一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。 必要条件
requisite: 一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type 内的任何模块,而是直接将控制权返回给应用程序。必要条件
sufficient: 一票通过, 表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略。充分条件
optional: 表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
include: 使用其他配置文件中同样功能的相关定义来进行检查
2.使用一到多组“return status=action”来定义;
[status1=action1 status2=action2....]
status: 指定此项检查的返回值,其可能的取值有多种。如success。
action: 采取的操作,其可能的取值常用的有6种,如ok,done,die,ignore,bad,reset。
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
bad 结果失败,继续检查
die 结果失败,返回失败结果给应用
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果
3》module-path:
模块路径,用来指明本模块对应的程序文件的路径名。
相对路径
绝对路径 4》module-argument:
模块参数,用来传递给该模块的参数。
pam_unix.so:
nullok: 允许使用空密码;
try_first_pass: 提示用户输入密码之前,首先检查此前栈中已经得到的密码;
pam_env.so: 通过配置文件来为用户设定或撤销环境变量,/etc/security/pam_env.conf
pam_shells.so: 检查用户使用的是否为合法shell,/etc/shells
pam_limits.so: 资源限制,/etc/sercurity/limits.conf ;/etc/sercurity/limits.d/*

pam文档

    /user/share/doc/pam-*
rpm -qd pam
man –k pam
man 模块名,如man rootok
《The Linux-PAM System Administrators' Guide》

限制的实现方式

    共有3种方式:
1)通过ulimit命令
2)在/etc/security/limits.d/目录下创建限制文件来实现
3)修改/etc/pam.d/目录下的配置文件,这是使用pam模块来实现的
1)ulimit 命令,修改shell资源的限制,立即生效,但无法保存。
ulimit-Modify shell resource limits.
ulimit [-SHacdefilmnpqrstuvx] [limit]
Options:
-S 使用软资源限制
-H 使用硬资源限制
-a 所有当前限制的报告
-b 套接字缓存尺寸
-c 最大的核心文件创建尺寸
-d 最大程序的数据分割尺寸
-e 最大的调度优先级(`nice')
-f 被shell及其子进程写入文件的最大尺寸
-i 最大待定信号的数值
-l 进程可能锁定到内存的最大尺寸
-m 最大驻留设置尺寸
-n 最大打开文件描述符的数值
-p 管道缓存尺寸
-q POSIX 消息队列中的最大字节数
-r 最大实时调度优先级
-s 最大堆尺寸
-t cpu 时间的最大值 (以秒为单位)
-u 用户进程的最大值
-v 虚拟内存的尺寸
-x 文件锁定的最大数值
-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>:
指定item所对应的具体值
3)修改/etc/pam.d/目录下的配置文件
使用PAM模块实现:
1》模块: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
2》模块:pam_securetty.so
功能:只允许root 用户在/etc/securetty 列出的安全终端上登陆
示例:允许root 在telnet 登陆
vi /etc/pam.d/login
#auth required pam_securetty.so # 将这一行加上注释
或者/etc/securetty 文件中加入pts/0,pts/1…pts/n
3》模块:pam_nologin.so
功能: 如果/etc/nologin 文件存在, 将导致非root用户不能登陆,如果 用户shell 是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin.txt 文件内容,并拒绝登陆
4》模块:pam_limits.so
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间,最多打开的文件数和运行进程数。
vim /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个进程

PAM认证的更多相关文章

  1. centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...

  2. PAM认证机制详情

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

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

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

  4. PAM认证机制

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

  5. 什么是PAM认证

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

  6. Vsftpd: 基于PAM认证的虚拟用户和匿名用户

    目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...

  7. linux的PAM认证和shadow文件中密码的加密方式

    它是一种统一的认证方案.PAM 让您能随时改变您的认证方法以及需求,并且不需要重新编译任何代码就封装了所有本地认证方法.具体见 PAM 网站. 对于 PAM 您只需要做: 对您的密码采用不同于 DES ...

  8. 实现基于pam认证的vsftpd

    1 需求 使用指定虚拟用户Allen与Barry登录ftp,认证的源是mysql服务器: Allen可以上传文件,Barry不可以上传文件: 2 环境 [root@centos7 ~]# cat /e ...

  9. 检查是否使用PAM认证模块禁止wheel组之外的用户su为root

    编辑su文件(vi /etc/pam.d/su),在开头添加下面两行: auth sufficient pam_rootok.so 和 auth required pam_wheel.so group ...

随机推荐

  1. castle windsor学习-----XML Inline Parameters 内联参数

    当使用XML配置的时候,可能要给组件指定各种各样的依赖 1.简单的参数 参数名称不区分大小写 <component id="ping" type="Acme.Crm ...

  2. java语法糖---枚举

    java语法糖---枚举   在JDK5.0中提供了大量的语法糖,例如:自动装箱拆箱.增强for循环.枚举.泛型等.所谓“语法糖”就是指提供更便利的语法供程序员使用,只是在编译器上做了手脚,却没有提供 ...

  3. linux新增用户和删除用户

    新增用户 新增用户命令:useradd 参数: 参数 说明 -u 指定UID,也就是自定义UID -g 知道GID,也就是初始化用户组,/etc/passwd文件中的第四个字段. -G 后面接用户组的 ...

  4. 从request中读数据流

    ServletInputStream servletInputStream = reqeust.getInputStream(); int len=0; int size=reqeust.getCon ...

  5. 列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩

    Column-store compression At a high level, doc values are essentially a serialized column-store. As w ...

  6. 关于MFC主菜单和右键弹出菜单

    一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...

  7. python字符串替换之re.sub()

    re.sub(pattern, repl, string, count=0, flags=0) pattern可以是一个字符串也可以是一个正则,用于匹配要替换的字符,如果不写,字符串不做修改.\1 代 ...

  8. 关于 numpy.array和list之间的转换

    有两种方法: 1. 直接用list()函数 2. 用array.tolist()函数 如果np.array是一维,两者没有区别.但如果是二维结果是不同的. import numpy as np a1= ...

  9. 机器学习 Generative Learning Algorithm (A)

    引言 前面几讲,我们主要探讨了如何对 p(y|x;θ) (即y 相对于x的条件概率)进行建模的几种学习算法,比如,logistic regression 对 p(y|x;θ) 进行建模的假设函数为 h ...

  10. C++ STL, set用法。 待更新zzzzz

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...