PAM 模块详解

pam 适用场景

Pluggable Authentication Module,PAM. 插入式验证模块

PAM 是关注如何为服务验证用户的 API。在使用 PAM 之前,诸如 login(和 rlogin、telnet、rsh)之类的应用程序在 /etc/passwd 中查找用户名,然后将两者相比较并验证用户输入的名称。所有应用程序使用了这些共享服务,但是并未共享实现细节和配置这些服务的权限。 
pam 通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活的根据需要给不同的服务配置不同的认证方式,而无需更改服务程序

pam 认证过程

用户使用与验证有关的服务程序时,应用程序通过 PAM 的API (PAM 的应用编程接口 )与PAM 的动态链接库进行通信。PAM 模块通过PAM 的SPI (PAM 的服务提供者接口)与PAM 库进行通信。通过这种方式,PAM 库可使应用程序和模块互相进行通信

例如passwd 这个程序::

1、用户登录时执行 /usr/bin/passwd 这个程序,并输入密码; 
2、passwd 程序开始呼叫PAM模块,PAM块会搜寻passwd 程序的PAM 相关设定文件,这个设定文件一般是在 /etc/pam.d/ 里边的与程序同名的文件,即PAM 会搜寻/etc/pam.d/passwd 这个设置文件 ; 
3、根据/etc/pam.d/passwd 中的设定,会调用PAM 所提供的相关模块(位于/lib64/security)来进行验证,在/etc/pam.d/passwd 文件中会定义要调用哪个pam 的相关模块文件 ; 
4、将验证结果回传给passwd 这个程序,而passwd 这个程序会根据PAM 回传的结果决定下一个动作(重新输入密码或者通过验证)。

pam 相关文件说明

/lib64/security/*.so

pam 模块的动态链接库.

/etc/security

环境相关的设置的配置文件 : pam 使用的动态库文件对应使用的配置文件.

/etc/pam.conf

主配置文件 : 默认不存在 #不推荐直接修改其主配置文件,所以默认不存在.

/etc/pam.d/APP_NAME

对于使用 PAM 的各项服务,目录中都有一个对应的文件,其中包含应当如何获取该服务的验证及帐户信息的规则或说明。用户也可根据需要在此目录下定义自己想要针对的某程序的pam 的配置文件.

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

应用程序的pam 模块文件说明–/etc/pam.d/APP_NAME

每行定义一种检查规则 
格式 :type control module——path module-arguments

1、type :pam 模块是按模块类型归类的。pam 模块主要有4类 :

  • auth 验证模块 。与账号认证和授权相关的检查;
  • account 帐户管理模块。将执行与账号管理相关非认证功能,例如是否为有效账号,有效期限、限制用户的访问时间等;
  • password 密码管理模块。执行与密码更改/更新有关的操作。
  • session 会话管理模块。用于初始化和终止会话,以及一些附加性操作,如,记录打开/关闭数据的信息,监视目录等

2、control :同一种功能的多个检查之间如何进行组合。如auth功能的第一个检查完成之后,第二个怎么办等。PAM库如何处理与该服务相关的PAM模块成功或失败情况。有两种机制 : 简单和复杂。这里只说明简单机制(使用一个关键词来定义)。

  • required 
    “一票否决“,表示本模块必须返回成功才能通过认证。是如果该模块返回失败,将不再执行同一功能内的任何模块,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序;
  • sufficient 
    “一票通过”,表明本模块返回成功则通过身份认证的要求,且通过同一type 内的模块,则不必再执行同一type内的其它模块,而是去执行下一个模块。但如果本模块返回失败则可忽略;
  • optional 
    表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略 ;
  • include 
    用其他的配置文件中定义的配置信息;
  • requisite 
    一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。

3、 module——path

调用的模块文件的路径位置

4、module-arguments

模块参数 (一般不会用到)

常用pam 模块示例

1、pam_securetty.so

  • 功能 
    只允许root用户在 /etc/securetty 列出的安全终端上登录, /etc/securetty 文件里面定义了用户可登录的终端名
  • 注意 
    /etc/securtty 在此文件中定义的终端是允许root 登录的,ssh 登录是不受此文件定义的终端限制的,但是诸如telnet 是受限制的,而且telnet 默认是不允许使用root登录的

2、pam_time 认证模块

  • 功能 
    对用户访问服务提供时间控制,即控制用户能够访问服务的时间
  • 配置文件 
    /etc/security/time.conf 
    主要设置 : services;ttys;users;times
  • 示例 
    只允许 centos 这个用户在工作时间通过ssh 远程连接到本机

vim /etc/security/time.conf 
ssh ;IP ;centos ;Wd0000-24000

3、pam_nologin.so

  • 功能 
    1、如果/etc/nologin 文件存在,将导致非root 用户不能登录,且如果/etc/nologin 文件里面存在一些内容时,则非root用户被拒绝时,还会显示文件里面的内容。su 可以登录; 
    2、如果用户shell 是/sbin/nologin 时,当该用户登录时,会被拒绝登录;

4、模块 :pam_limit.so

  • 功能 
    在用户级别实现对其可使用的资源的限制,例如: 可打开的文件的数量,可运行的进程的数量,可用内存空间
  • 限制用户可使用的资源的方式:2种 
    1、ulimit 命令 :立即生效,但无法保存

-n # 最多的打开的文件的描述符的个数,例如可通过此限制其他主机对本机httpd 的压力测试 
-u # 最大用户进程数,针对所有用户。只能调小,不能调大 
-S # 使用的(软)资源限制 
-H # 使用的(硬)资源限制 
-a # 列出所有的限制值

2、修改配置文件 
/etc/security/limits.conf 
/etc/security/limits.d/*.conf #limit 通过专门的配置文件来进行设置

  • 格式 
    < domain> < type> < item> < value>

1、< domain> : 应用于哪些对象

  • username : 指明某单个用户
  • @group : 某组内所用用户
  • * : 所有用户

2、< type> : 限制的类型

  • Soft : 软限制,普通用户自己可以修改
  • Hard 硬限制,由root用户设定,且通过kernel强制生效
  • - 二者同时限定

3、< item> : 限制哪些资源

  • nofile :所能够同时打开的最大文件数量,默认为1024
  • nproc 所能够同时运行的进程的最大数量,默认为1024
  • rss 实际分配给进程的物理内存
  • maxlogin 某用户的最多登录次数

4、< value> 指定具体值

  • 示例 
    apache 用户可打开10240 个文件;student 用户不能运行超过20个进程

vim /etc/security/limits.conf 
apache - nofile 1024 
student hard nproc 20

4、模块 :pam_shells

  • 功能 
    检查有效的shell ,仅允许在/etc/shells 中列出的sehll 登录
  • 示例 
    禁止shell 类型为csh 的用户使用ssh 或者su 进行登录

vim /etc/pam.d/login 
auth required pam_shells.so 
或者 
vim /etc/pam.d/su 
auth required pam_shells.so 
vim /etc/shells 
注释掉此文件里面的/bin/csh

时间: 2024-11-09 00:42:30

PAM 模块详解的相关文章

Linux中pam认证详解(下)

Linux中pam认证详解(下) 在上一篇中详细的介绍了pam的介绍.pam认证原理.pam认证构成以及pam验证控制类型,下面向大家详细介绍一下常用的pam服务模块,以及pam认证的应用. 一.常用的pam服务模块 下面是Linux提供的PAM模块列表(只是其中一部分),这其中包含模块文件.模块功能描述和相关配置文件,具体如下: pam_access 提供logdaemon风格登录控制 /etc/security/access.conf pam_chroot 提供类似chroot命令的功能 p

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we

nginx的配置及模块详解

nginx: nginx是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件,nginx采用了模块化.事件驱动.异步.单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制来实现高并发和高性能,解决C10K的问题,主要功能就是提供http和反向代理服务,以及邮件服务及反向代理等,并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力. 在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loo

python的logging模块详解

日志级别 >>>import logging >>>logging.NOTSET 0 >>>logging.DEBUG 10 >>>logging.INFO 20 >>>logging.WARN 30 >>>logging.ERROR 40 >>>logging.CRITICAL 50 >>>logging._levelNames {0:'NOTSET', 10:

Ceph Monitor基础架构与模块详解

转自:https://www.ustack.com/blog/ceph-monitor/ Ceph rados cluster离不开Monitor,如果没有Monitor,则Ceph将无法执行一条简单的命令.Monitor由于其特殊性,了解它,对于我们深入理解Ceph,保证Ceph的稳定性,有很大帮助. Monitor 基本架构介绍 Monitor的基本架构图: Monitor的主要任务就是维护集群视图的一致性,在维护一致性的时候使用了Paxos协议,并将其实例化到数据库中,方便后续的访问.所以

nodejs QueryString模块 详解

QueryString模块 "QueryString" 模块用于实现URL参数字符串与参数对象的互相转换 此类一共包括4个方法: querystring.stringify(obj, [sep], [eq]) querystring.parse(str, [sep], [eq], [options]) querystring.escape querystring.unescape 一:querystring.stringify(obj,[sep],[eq]) 对象格式化成参数字符串 ,

(转)python time模块和datetime模块详解

python time模块和datetime模块详解 原文:http://www.cnblogs.com/tkqasn/p/6001134.html 一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共有九个元素组. c.format time 格式化时间,已格式化的结构使时间更具可读性.包括自定义格式和固定格式. 1.时间格式转换图: 2.主要ti