PAM详细介绍

2014-04-02 09:26:41

标签:PAM
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lidefu.blog.51cto.com/3429777/1388751

1.PMA简介

PMA(Pluggable Authentication Module)是一个可插入式认证模块,在Linux系统中,各种不同的应用程序都需要完成认证功能,为了实现统一调配,把所有需要认证的功能做成一个模 块(认证机制特别复杂的除外,如:https),当特定的程序需要完成认证功能的时候,就去调用PMA的认证模块,这些模块都位于系统中的/lib64 /security(/lib/security:32位操作系统)目录下,但并不是所有的模块都是用来完成认证的,有些模块是为了实现PAM的某些高级 功能而存在的,其中PMA的认证库是由glibc提供的,应用程序最终使用哪个PMA模块,取决于/etc/pma.d/*这个目录下的定义.

PMA完成认证的过程:下面用passwd这个应用程序举例吧!


一)首先用户执行/usr/bin/passwd这个程序,并输入密码

二)passwd这个程序会去调用PMA模块进行验证

三)PMA会到/etc/pam.d/*下去寻找与passwd同名的配置文件

四)当找到配置文件后,PMA会根据/etc/pam.d/passwd内的配置,调用PMA的模块进行认证

五)认证完成后,将验证的结果返回给passwd这支程序

六)最终,passwd会根据PAM的返回结果决定下一个执行动作(重新输入密码或验证通过)

·在以上步骤中最重要的是第四步,我们来详细分析一下分析下第四步,pam是如何完成认证功能的,同样,拿/etc/pam.d/passwd来举例,首先来 /etc/pam.d/passswd的配置信息.

1
2
3
4
5
6
7
[root@lidefu ~]# cat /etc/pam.d/passwd
#%PAM-1.0                 <==PAM的版本号
auth        include          system-auth    <==每一行都是一个验证过程
account     include          system-auth
password    substack         system-auth
-password   optional         pam_gnome_keyring.so
验证类别    验证控制标志     PAM的模块与该模块的参数

·第一个字段:验证类别(Type)

验证类别主要分为如下四种,并且按顺序依次向下验证

·auth

auth是用来认证用户的身份信息的,如果auth认证的时候需要用到多个模块,就依次检查各个模块,这个模块通常最终都是是需要密码来检验的,所以这个模块之后的下一个模块是用来检验用户身份的.如果帐号没问题,就授权

·account

account大部分是用来检查权限的,比如检查账户和密码是否过期等,如果你使用一个过期的账户或密码就不允许验证通过.如果有多个模块,也依次检查各个模块.

·password

修改密码需要用到的,如果用户不修改密码,几乎用不到这个模块.

·session

限定会话限制的,比如:vsftpd下午6点不允许访问,那6点过后用户再去访问的话就会被限制,或内存  不足不允许访问等,session就是限定这种类型的


·第二个字段:验证控制标志(control flag)

用于控制认证成功或失败时要采取的行动,其中又分为两种control,一种是简单control,一种是复杂  contorl

·简单的control

·required

此验证如果成功则带有success的标志,如果失败则带有failure的标志,此验证如果失败了,就一定会 返回失败的标志,但是不会立即返回,而是等所有模块验证完成后才返回,所以它不论验证成功或失败   都会继续向后验证其他的流程.

·requisite

如果验证失败则立即返回failure的标志,并终止后续的验证流程,如果验证带有success标志,则继续  后面的流程.

·sufficient

与requisite正好相反,此验证如果成功则带有success的标志,并立即终止后续的流程,如果验证带有  failure的标志,则继续后面的流程.

·optional

optional参考意见,这个只是打酱油的....

·以上流程如下图所示

·include

包含进来指定的其他配置文件中的同名栈中的规则,并以之进行检测.

·substack·

有点麻烦.不管他了...你也用不着


·PAM模块路径

·/etc/pam.d/*:每个程序个别的PAM的配置文件;

·/lib/security/*:PAM模块档案的实际放置目录;

·/etc/security/*:其他PAM环境的配置文件;

·/usr/share/doc/pam-*/:详细的PAM说明文件;


·PAM模块分类

·pam_unix.so

传统意义上的帐号和密码认证机制,这个机制实现了标准C库中基于让用户输入帐号密码并完成检测 的认证过程

·pam_permit.so

直接通过,允许访问,定义默认策略

·pam_deny.so

拒绝访问,定义默认策略

·pam_cracklib.so

用来检验密码的强度,包括设定的密码是否在字典中,修改的密码是否能和上次一样,密码至少包含多 少个数字字符,可以输入多少次错误密码等,都是由这个模块定义的

·pam_shells.so

检查用户登录的shell是否是安全shell,也就是写在 /etc/shells中的shell

·pam_securetty.so

限定管理员只能通过安全的tty登录,/etc/securetty,tty就是传统终端

·pam_listfile,这东西可牛逼了....

1
item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]

·pam_rootok.so

管理员su到其他用户不用输入密码就是靠这个定义的

·pam_succeed_if.so

普通用户su的时候不需要密码

·pam_limits.so

资源限定打开文件数,使用进程数等等,对任何人都生效,/etc/security/limits                    或/etc/security/limits.d/*

·pam_nologin.so

可以限制一般用户是否能够登入主机,当/etc/nologin这个档案存在时,则所有一般使用者均无法    再登入系统


练习:

·限制root用户只能最多从tty2登录,不能远程使用sshd登录

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/sshd     #编辑这个文件
auth       required     pam_securetty.so   #添加这一行
[root@lidefu ~]# cat /etc/securetty        #编辑这个文件
console
tty1
tty2

·只有sshusers组的用户能使用ssh远程登录

1
2
3
4
5
[root@lidefu etc]# groupadd sshusers              #添加一个组
[root@lidefu etc]# vim /etc/pam.d/sshd            #编辑远程登录的pam
 auth       required     pam_listfile.so item=group sense=allow file=/etc/security/allow-groups                    #添加这一句
[root@lidefu etc]# vim /etc/security/allow-groups  #编辑组文件,就是上面那个
sshusers                                           #添加组

·管理员su的时候需要密码

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/su            #编辑这个文件
#auth           sufficient      pam_rootok.so   #注释这一项
[root@lidefu etc]# whoami
root
[root@lidefu etc]# su ldf
Password:

·普通用户ldf,su的时候不用输入密码

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/su        #编辑这个文件
3 auth            sufficient      pam_succeed_if.so uid = 500 use_uid quiet             #添加这一句
[root@lidefu etc]# id ldf
uid=500(ldf) gid=500(ldf) groups=500(ldf)
[ldf@lidefu ~]$ su root                      #尝试
[root@lidefu ldf]#

·限定组(用户)使用最大的资源数

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/security/limits.conf  #这里看限制的东西很多
@sshusers        soft       nofile         10000  #软限制,打开文件数10000
@sshusers        hard       nofile         10000  #硬限制,
@sshusers        -          data           10000  #软硬都限制,使用数据大小
sshusers        -            nproc         10000  #软硬都限制,进程数
上面带@的是组,不带的是用户,使用命令limits可以临时调整

本文出自 “烟不离手” 博客,请务必保留此出处http://lidefu.blog.51cto.com/3429777/1388751

Pma模块详解,对用户登录linux等进行限制,密码修改限制等的更多相关文章

  1. Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.

    1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...

  2. Kali linux 2016.2(Rolling)中的payloads模块详解

    不多说,直接上干货! 前期博客 Kali linux 2016.2(Rolling)中的Exploits模块详解 payloads模块,也就是shellcode,就是在漏洞利用成功后所要做的事情.在M ...

  3. Ansible安装部署及常用模块详解

    Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...

  4. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  5. 铁乐学python_shelve模块详解

    python序列化模块-shelve模块详解 shelve:vt. 将(书等)放置在架子上:搁置,将某事放到一旁不予考虑:将-搁在一边:装搁架于: 个人感觉有点像字典缓存?暂时搁置到一旁的意思? 研究 ...

  6. (转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  7. Node入门教程(8)第六章:path 模块详解

    path 模块详解 path 模块提供了一些工具函数,用于处理文件与目录的路径.由于windows和其他系统之间路径不统一,path模块还专门做了相关处理,屏蔽了彼此之间的差异. 可移植操作系统接口( ...

  8. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  9. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

随机推荐

  1. jsp / get 中文乱码问题

    POST 方式下的解决方式还算简单,因为POST 方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决. GET 方式下会将参数直接附加到url ...

  2. 4-14-17 JavaScript知识点总结(包括JOSN, ajax等,来源w3c)

    JavaScript 也称 ECMAScript as "JavaScript" It is designed to run as a scripting language in ...

  3. oracle使用(1)

    纯粹是记录工作中使用的分析函数或是语法点,不做其他用处. (1) with as 先举个例子吧: 有两张表,分别为A.B,求得一个字段的值先在表A中寻找,如果A表中存在数据,则输出A表的值:如果A表中 ...

  4. 关于controller中调用多个service方法的问题

    一般service方法是有事务的,把所有操作封装在一个service方法中是比较安全的. 如果在controller中调用多个service方法,只有查询的情况下是可以这样的.

  5. bzoj2242: [SDOI2011]计算器 BSGS+exgcd

    你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值:(快速幂) 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数:(exgcd) 3.给 ...

  6. 秒杀多线程第三篇 原子操作 Interlocked系列函数

    上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...

  7. dp练习(1)——马走日字

    3328: 马走日字 时间限制: 1 Sec  内存限制: 128 MB提交: 35  解决: 5[提交][状态][讨论版] 题目描述 一次外出旅游,你路上遇到了一个骑着马的强盗,你很害怕,你需要找一 ...

  8. BZOJ1299 [LLH邀请赛]巧克力棒

    怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n ...

  9. css 设置背景色

    设置背景图 background:url($!{rc.contextPath}/assets/images/bady/date.png)repeat 50px center background:ur ...

  10. sgu187&&spoj7734

    题解: splay翻转(只有翻转 sgu ac,spoj tle 代码: #pragma GCC optimize(2) #include<cstdio> #include<cstr ...