PAM认证机制

本文深入解析了Pluggable Authentication Modules (PAM) 认证机制,包括PAM的起源、核心组件、工作原理及配置文件结构。通过具体示例展示了PAM模块如pam_shells.so和pam_securetty.so的使用方法,帮助读者理解如何为不同服务配置灵活的认证策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PAM介绍

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

Sun公司于1995 年开发的一种与认证相关的通用框架机制

PAM 是关注如何为服务验证用户的 API, 通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开

使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无

需更改服务程序。

一种认证框架,自身不做认证

它提供了对所有服务进行认证的中央机制,适用于login,远程登录( telnet,rlogin,fsh,ftp,点对点协议( PPP)), su等应用程序中。

PAM相关文件

主配置文件:/etc/pam.conf,默认不存在;使用/etc/pam.d 作为主配置文件

/etc/pam.d                                                 主配置文件

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

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

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

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

[root@localhost ~]# rpm -ql pam	##其中每一个.so文件就代表给一个pam模块
/etc/security
/etc/security/access.conf
/etc/security/chroot.conf
/lib64/security
/lib64/security/pam_access.so
/lib64/security/pam_chroot.so
/etc/security/time.conf
/lib64/security/pam_time.so
...............

PAM认证原理

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

2、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认证机制

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

1、type(模块类型) 2、control(控制) 3、module-path(模块路径) 4、arguments(参数复杂的调用配置文件)

说明:

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

模块类型( module-type)

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

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

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

1、模块类型( module-type)

Auth 账号的认证和授权

Account 与账号管理相关的非认证类的功能

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

Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,

2、control(控制)

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

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

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

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

3、module-path: 模块路径

相对路径:

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

如: pam_shells.so、 pam_limits.so

绝对路径:

           /etc/security/*.conf

pam文档说明

          pam文档中详细说明了pam每个模块的使用方法:

          URL:http://www.linux-pam.org/                      ###此文档中详细介绍了Linux系统中的pam.d模块的使用方法

PAM模块pam_shells示例

模块: pam_shells

功能:检查有效shell

man pam_shells

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

命令执行如下:

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

用户登陆默认不会调用pam.d中的login登陆模块,所以用户的登陆是不会收pam认证的影响

下面我们使用系统中wang用户来做PAM认证的过程。

[root@localhost ~]# getent passwd wang ###查看wang用户的shell类型

wang:x:500:500::/home/wang:/bin/bash

用户登陆的shell类型都在/etc/shells 目录中;

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash                     ###wang用户使用的shell是/bin/bash
/sbin/nologin
/bin/dash
/bin/csh
[root@localhost ~]# usermod -s /bin/csh wang ###修改wang用户的shell类型
[root@localhost pam.d]# su - wang ###切换的用户
[wang@localhost ~]$ echo $SHELL

/bin/csh

目前wang用户的登陆不受shell的改变而受影响

[wang@localhost ~]$ exit ###退出回到root用户
[root@localhost ~]# vim /etc/shells

# /bin/csh                  ###注释掉/bin/csh 在次登陆

因为wang使用的shell还没有调用shell模块,所以wang用户还是可以登陆的

现在我们修改登陆的配置文件

[wang@localhost ~]$ exit
[root@localhost ~]# cd /etc/pam.d/
[root@localhost pam.d]# vim login ##修改登陆文件
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth

加入 auth required pam_shells.so  ###以上的第五行代码

在次登陆wang用户的时候就会失败;因为用户登陆的时候用的shell类型必须是在/etc/shells可用的shell类型,而wang用的是/bin/csh类型。所以wang用户登陆失败。

注意:在这里我们用 su - wang 切换的时候 ,我们是可以登陆的因为su使用的是pam.d中的su认证模块,而非login认证模块。所以wang用户可以登陆切换。

su 认证模块可以做pam用户切换认证

[root@localhost pam.d]# vim su

加入 auth required pam_shells.so

再次使用su - wang 时也会失败

改完之后记着恢复配置文件噢!!!

PAM模块pam_securetty.so示例

模块: 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

PAM模块示例

模块: pam_nologin.so

功能:

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

如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin

文件内容,并拒绝登陆

[root@localhost ~]# touch /etc/nologin

所有普通用户将不能登陆

[root@localhost ~]# rm -f /etc/nologin

 删除后普通用户可以正常登陆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值