PAM(Pluggable Authentication Modules)即可插拔式认证模块,一种用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。

PAM认证原理:参考资料来自http://blog.51cto.com/tyjhz/1436175

  一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib/security下)进行安全认证。认证原理图如下图所示:

  用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证,可以用ls /etc/pam.d/命令进行查看,例如查看查看sshd是不是支持PAM模块认证,如下图所示:

PAM配置文件

1、/etc/pam.conf,但centos6之后的系统中,这个文件就没有了。
2、/etc/pam.d/*,每个文件对应一个应用如:/etc/pam.d/sshd

PAM配置文件格式

由上图可以将配置文件分为四列,依次是:模块类型、控制标记、模块路径、模块参数。

第一列代表模块类型:四种常见认证类型(module type)

认证类型(module type) 说明
认证管理(authentication management) 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等.
帐户管理(account management) 对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等。
密码管理(password management) 主要是用来修改用户的密码。
会话管理(session management) 这个模块用来定义用户登录前的及用户退出后所要进行的操作,主要是提供对会话的管理和记账(accounting)。如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.

第二列代表控制标记“Control Flags”:参考资料来自http://blog.51cto.com/tyjhz/1436175

验证控制类型也可以称做Control Flags,用于PAM验证类型的返回结果,具体有以下四种:

1、required验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)。

2、requisite验证失败则立即结束整个验证过程,返回Fail。

3、sufficient验证成功则立即返回,不再继续,否则忽略结果并继续。

4、optional无论验证结果如何,均不会影响(通常用于session类型)。

PAM验证类型返回结果如下所示:

为了方便大家理解举两个例子,如下图所示:

从上面两个图可以看出当required失败后续还要继续,但最后仍是失败。requisite验证失败则立即结束。而sufficient则是验证成功则立即结束。

第三列代表调用模块路径:参考资料来自http://blog.51cto.com/tyjhz/1436561

下面是Linux提供的PAM模块列表(只是其中一部分),这其中包含模块文件、模块功能描述和相关配置文件,具体如下:

pam_access 提供logdaemon风格登录控制 /etc/security/access.conf

pam_chroot 提供类似chroot命令的功能

pam_cracklib 对密码的强度进行一定的检查 库文件libcrack和字典文件

/usr/lib/cracklib_dict

pam_deny 总是无条件地使认证失败

pam_env 设置取消环境变量 /etc/security/pam_env.conf

pam_filter 对输入输出流进行过滤 filters

pam_ftp.so 对匿名ftp用户进行认证

pam_group 当用户在指定的终端上请求指定的 /etc/security/group.conf

服务时赋予该用户相应的组权限

pam_issue 在提示用户输入用户名之前显示 /etc/issue

/etc/issue文件的内容

pam_krb4 对用户密码进行Kerberos认证相应的Kerberos库文件

pam_lastlog 在用户登录成功后显示关于 /var/log/lastlog

用户上次登录的信息,并维护

/var/log/lastlog文件。

pam_limits 限制用户会话所能使用的系统资源 /etc/security/limits.conf

pam_listfile 根据指定的某个文件决定是否 例如/etc/ftpusers

允许或禁止提供服务

pam_mail 检查用户的邮箱中是否有新邮件 /var/spool/mail/xxxx

pam_mkhomedir 为用户建立主目录 /etc/skel/

pam_motd 显示/etc/motd文件的内容 /etc/motd

pam_nologin 根据/etc/nologin文件的存在与否 /etc/nologin

来决定用户认证是否成功

pam_permit 总是无条件地使认证成功

pam_pwdb 作为pam_unix_xxxx模块的一个替代。/etc/pwdb.conf

使用Password Database通用接口进行认证。

pam_radius 提供远程身份验证拨入用户服务(RADIUS)的认证

pam_rhosts_auth 利用文件~/.rhosts和/etc/hosts.equiv和~/.rhosts

/etc/hosts.equiv对用户进行认证。

pam_rootok 检查用户是否为超级用户,如果是超级用户(uid=0)则无条件地通过认证。

pam_securetty 提供标准的Unix securetty检查 /etc/securetty

pam_time 提供基于时间的控制,比如限制 /etc/security/time.conf

用户只能在某个时间段内才能登录

pam_unix 提供标准的Unix认证 /etc/passwd和/etc/shadow

pam_userdb 利用Berkeley DB数据库来检查用户/密码

pam_warn 利用syslog( )记录一条告警信息

pam_wheel 只允许wheel组的用户有超级用户的存取权限

第四列代表模块参数:非必要可不填

pam认证的应用

1、案例1(pam_access.so)

现有一账号user1 只允许192.168.2.1 ssh登录

(1)安装pam

[root@huangzhong ~]# mount /dev/cdrom /media/cdrom/

[root@huangzhong ~]# cd /media/cdrom/Packages/

[root@huangzhong Packages]# ll |grep pam  //过滤与pam相关的包

[root@huangzhong Packages]# yum install pam-1.1.1-13.el6.x86_64.rpm

(2)因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

[root@huangzhong ~]# cd /etc/pam.d/

[root@huangzhong pam.d]# vim sshd

(3)编辑access.so模块的配置文件

[root@huangzhong pam.d]# vim /etc/security/access.conf

(4)测试验证

//新建user1用户

[root@huangzhong ~]# useradd user1

[root@huangzhong ~]# passwd user1

Changing password for user user1.

New password:

BAD PASSWORD: it is WAY too short

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

//在本地ssh登录测试结果如下:

//在192.168.2.1上ssh登录,结果如下:

在这里也可以通过查看日志信息,查看登录的结果,所要查看的日志是:

[root@huangzhong ~]# tail -f /var/log/secure

2、案例2(pam_listfile.so)

在对Linux服务器进行管理时,只允许manager组的用户可以管理,是通过ssh管理。

(1) 因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

[root@huangzhong ~]# cd /etc/pam.d/

[root@huangzhong pam.d]# vim sshd

(2) 创建manager组,并编辑一些用户

[root@huangzhong pam.d]# vim /etc/manager

//创建用户user2和user3,并给予口令

(3) 登录测试

使用user1登录测试

使用user2和user3登录测试结果如下:

3、案例3(pam_limts.so)

限制user1,ssh在线的登陆次数为2次

(1) 因为限制ssh登录,所以这里要用到sshd模块,因此要编辑/etc/pam.d/

[root@huangzhong ~]# cd /etc/pam.d/

[root@huangzhong pam.d]# vim sshd

(2) 编辑/etc/security/limits.conf  文件

[root@huangzhong pam.d]# vim /etc/security/limits.conf

(3) 登录测试

使用user1登录3次测试结果如下:

查看日志信息如下:

[root@huangzhong pam.d]# tail -f /var/log/secure

linux-PAM的更多相关文章

  1. Linux PAM&&PAM后门

    Linux PAM&&PAM后门 我是壮丁 · 2014/03/24 11:08 0x00 PAM简介 PAM (Pluggable Authentication Modules )是 ...

  2. linux pam 控制模式

    工作类别(type).流程栈(stack)和控制模式(control) Linux-PAM 工作的"类别"(type) PAM 的具体工作主要有以下四种类别(type):accou ...

  3. Linux PAM 之cracklib模块

       如何在Linux系统中限制密码长度的同时对密码的复杂程度也进行管理,最近发现有人的密码符合长度规则,但是却很简单很容易被猜出来,查了相关资料后发现了PAM中的pam_cracklib模块就是用来 ...

  4. Linux Pam后门总结拓展

    首发先知社区: https://xz.aliyun.com/t/7902 前言 渐渐发现pam后门在实战中存在种植繁琐.隐蔽性不强等缺点,这里记录下学习pam后门相关知识和pam后门的拓展改进. 0x ...

  5. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程

    PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...

  6. Linux下PAM模块学习总结

    在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等.在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM( ...

  7. [Linux] 关于Centos6中ulimit nproc用户进程数的限制

    一.缘由: 在启动mongodb的时候,有Warning提示soft rlimits too low,就是用户使用进程数过小,遂调高系统资源关于用户最大进程数的限制ulimit -u. 先暂时使设置生 ...

  8. linux资源使用配置文件 /etc/security/limits.conf和ulimit

    limits.conf文件实际上是linux PAM中pam_limits.so的配置文件,而且只针对于单个会话. limits.conf的格式如下: <domain> <type& ...

  9. linux配置文件的一些调优

    Linux中所有东西都是文件,一个socket就对应着一个文件描述符,因此系统配置的最大打开文件数以及单个进程能够打开的最大文件数就决定了socket的数目上限:但是linux是有文件句柄限制的,而且 ...

  10. Linux登录验证机制、SSH Bruteforce Login学习

    相关学习资料 http://files.cnblogs.com/LittleHann/linux%E4%B8%AD%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E8%AE% ...

随机推荐

  1. 使用IDEA开发Spark程序

    一.分布式估算圆周率 1.计算原理 假设正方形的面积S等于x²,而正方形的内切圆的面积C等于Pi×(x/2)²,因此圆面积与正方形面积之比C/S就为Pi/4,于是就有Pi=4×C/S. 可以利用计算机 ...

  2. 如何在chrome使用vue-devtool?

    1.在应用中安装 2.去查找文件 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhd ...

  3. JAVA中锁的解决方案

    前言 在上一节中,我们给大家介绍了什么是锁,以及锁的使用场景,我相信大家对锁的定义,以及锁的重要性都有了比较清晰的认识.在这一节中,我们会给大家继续做深入的介绍,介绍JAVA为我们提供的不同种类的锁. ...

  4. Web for pentester_writeup之Code injection篇

    Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...

  5. 小白学 Python(19):基础异常处理

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. 使用Typescript重构axios(二十七)——添加请求状态码合法性校验

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. CF600E Lomsat gelral——线段树合并/dsu on tree

    题目描述 一棵树有$n$个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. 这个题意是真的窒息...具体意思是说,每个节点有一个颜色,你要找的是每个子树中颜色的众数 ...

  8. Promise对象及它在js中的执行顺序

    关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...

  9. Python实现王者荣耀小助手(一)

    简单来说网络爬虫,是指抓取万维网信息的程序或者脚本,Python在网络爬虫有很大优势,今天我们用Python实现获取王者荣耀相关数据,做一个小助手: 前期准备,环境搭建: Python2.7 sys模 ...

  10. 思科获取DHCP过程

    主机如何获取DHCP的过程? 地址请求: 客户端发布一个DHCP请求信息,该信息会发给网内所有主机,非DHCP服务器会丢弃信息. 地址提供: DHCP服务端收到该信息后,会从地址池内挑选一个未被使用的 ...