【Linux】what is pam?PAM模块学习笔记
文章目录
- 1. pam模块简介
- 2. pam验证的工作流程
- 3. pam模块配置文件
- 3.1 配置文件的格式
- 3.1.1 验证类别type
- 3.1.2 验证的控制标识 control flag
- 3.1.3 pam模块
- 4. login的PAM验证机制流程
- 5. 补充:其他pam相关文件
- 6. 参考内容
1. pam模块简介
PAM: Pluggable Authentication Modules, 插入式验证模块。
可以将PAM理解为一套应用程序编程接口,PAM提供一系列的验证机制,用户将验证阶段的需求告知pam,pam给用户返回验证的结果。
PAM以一个独立的API存在,任何程序都可以向PAM发送验证要求的通知,PAM经过一系列的验证后将验证结果返回给程序。
2. pam验证的工作流程
PAM通过一个与调用程序同名的配置文件来完成一系列的认证分析需求。
以passwd命令调用PAM为例:
- 用户执行
/usr/bin/passwd
程序,输入密码; - passwd调用pam模块进行验证
- pam模块到
/etc/pam.d/
目录下,找与程序passwd同名的配置文件; - 根据配置文件
/etc/pam.d/passwd
内的设置信息,引用相关pam模块逐步进行验证分析(PAM用来进行验证的数据称为模块modules。); - 将验证结果返回给程序passwd;
- pam模块到
- passwd程序根据pam返回的结果决定下一个操作。
3. pam模块配置文件
在章节2的验证流程中,可知验证流程的重点是:
/etc/pam.d/
下的配置文件;- 配置文件所调用的PAM模块。
章节3主要讨论配置文件的格式和内容含义。
3.1 配置文件的格式
配置文件的每一行可分为三个字段,分别代表的含义:
- 验证类别type;
- 控制标准flag;
- PAM的模块与该模块的参数。
3.1.1 验证类别type
验证类别主要分为4种:(这四个验证的类别通常是有顺序的)
- auth
- 这种类别主要用来验证用户身份;
- auth类别通常需要密码来检验,所以后边儿接的模块是用来验证用户的身份。
- account
- account类别大部分用于进行授权;
- 这种类别主要检验用户是否具有正确的权限。
- session
- session,会话期间的意思,session管理的是用户此次登录(或使用这个命令)期间,PAM所给予的环境设置。
- session类别通常用于记录用户登录和注销时的信息。
- password
- password类别主要在提供验证的修订任务,例如修改密码。
3.1.2 验证的控制标识 control flag
control flag是验证通过的标准,该字段用于管控该验证的控制方式。主要分为4种:
- required
- 验证成功则带有success标志;失败则带有failure标志。
- 不论验证成功还是失败都会继续后续的验证流程。
- requisite
- 验证失败则给原程序返回failure标志,并终止后续验证流程;
- 验证成功则给原程序返回success标志,并继续后续验证流程。
- sufficient
- 验证成功则立即给原程序返回success标志,并终止后续验证流程;
- 验证失败则带有failure标志,并继续后续验证流程。
- optional
- 该模块控件大多只在显示信息,而不用在验证方面。
3.1.3 pam模块
常用的pam模块:
- pam_securetty.so
- 限制系统管理员(root)只能从安全的终端登录(tty:本地中断;pts:远程终端);
- 安全的终端设置在文件
/etc/securetty
中。
- pam_nologin.so
- 该模块可限制一般用户能否登录主机;但该模块对root以及已经登录系统的一般账号无影响。
- 若文件
/etc/nologin
存在,则一般用户均无法再登录系统了(与文件/etc/nologin.txt
不同)
- pam_loginuid.so
- 该模块用来验证用户的UID是否符合规范,一般要求账号的UID大于1000。
- pam_env.so
- 用来设置环境变量的一个模块;
- 若需额外设置环境变量,可参考文件
/etc/security/pam_env.conf
的详细说明。
- pam_unix.so
- 该模块功能很丰富,可用在验证阶段的认证功能、授权阶段的账号许可证管理、会话阶段的日志文件记录等。
- pam_pwquality.so
- 该模块用来检验密码的强度,包括密码是否在字典中、密码连续输错几次就断掉连接等功能;
- 文件
/etc/security/pwquality.conf
可以额外指定默认值,较容易处理修改。
- pam_limits.so
- 可参考文件
/etc/security/limits.conf
- 可参考文件
4. login的PAM验证机制流程
- 验证阶段:auth
- 先经过pam_securetty.so判断,若用户为root,则会参考
/etc/securetty
的设置; - 之后经过pam_env.so设置额外的环境变量
- 然后通过pam_unix.so检验密码,若通过则返回login程序;
- 若不通过,则通过pam_succeed_if.so判断UID是否合规,不合规返回失败;否则以pam_deny.so拒绝连接。
- 先经过pam_securetty.so判断,若用户为root,则会参考
- 授权阶段:account
- 先经过pam_nologin.so判断
/etc/nologin
是否存在,若存在则不允许一般用户登录; - 然后以pam_unix.so和pam_localuser.so进行账号管理;
- 再以pam_succeed_if.so判断UID是否合法,合法则不记录登录信息;
- 最后以pam_permit.so允许该账号登录。
- 先经过pam_nologin.so判断
- 密码阶段:password
- 先以pam_pwquality.so设置密码仅能试错3次;
- 然后以pam_unix.so通过sha512、shadow等功能进行密码检验,若通过则返回login程序;若不通过则以pam_deny.so拒绝登录。
- 会话阶段:session
- 先以pam_selinux.so暂时关闭SELinux;
- 使用pam_limits.so设置好用户能操作的系统资源;
- 登录成功后开始将相关信息记录在日志中;
- 以pam_loginuid.so规范不同的UID权限;
- 开启pam_selinux.so功能
总结:根据验证类别type,先由login设置的值去查看,若出现include system-auth
则转到system-auth
文件中的相同类别,获取额外的验证流程,然后到下一个验证类别,最终将所有的验证跑完,结束此次PAM验证。
5. 补充:其他pam相关文件
/etc/security/limits.conf
日志文件:/var/log/secure
和/var/log/messages
PAM模块都会将数据记录在/var/log/secure
文件中,若发生任何无法登录或是产生错误时,可查看日志定位问题。
6. 参考内容
Linux下PAM模块学习总结 - 散尽浮华 - 博客园
相关文章:
【Linux】what is pam?PAM模块学习笔记
文章目录 1. pam模块简介2. pam验证的工作流程3. pam模块配置文件3.1 配置文件的格式3.1.1 验证类别type3.1.2 验证的控制标识 control flag3.1.3 pam模块 4. login的PAM验证机制流程5. 补充:其他pam相关文件6. 参考内容 1. pam模块简介 PAM: Pluggable Authentica…...
5.1 GitHub订阅监控系统实战:FastAPI+SQLAlchemy高效架构设计与核心源码揭秘
GitHub Sentinel Agent 分析报告功能设计与实现 关键词:订阅管理 API 设计、GitHub API 集成、SQLAlchemy ORM、JWT 认证、单元测试框架 1. 订阅管理功能架构设计 订阅管理模块采用分层架构设计,通过 FastAPI 构建 RESTful 接口,结合 SQLAlchemy ORM 实现数据持久化: #me…...
【BEPU V1物理】BEPUphysics v1 入门指南 汉化笔记#1
BEPUphysics v1 入门指南 前言下载获取库工程1.创建物理模拟环境2.添加物理实体3.与物理系统交互4.发射物体5.构建环境6.事件处理7. 进阶学习 前言 本文档记录完成 BEPUphysics 物理引擎的基础设置。 文档链接:https://github.com/bepu/bepuphysics1/blob/master/Documentatio…...
方法加事务在多线程中注意事项
方法加事务在多线程中注意事项 redission分布式锁释放异常问题 https://www.jianshu.com/p/055ae798547a https://blog.csdn.net/cheng__yu/article/details/122625649 虽然文章 https://blog.csdn.net/cheng__yu/article/details/122625649 和 redission锁是没关系的&#…...
开源 2D 横版跳跃游戏 SuperTux
官网 https://www.supertux.org/ 正文 在游戏的世界里,开源游戏以其独特的魅力吸引着众多玩家和开发者。今天要介绍的 SuperTux,便是一款备受瞩目的开源 2D 横版跳跃游戏,风格类似经典的超级马里奥系列。 2024 年,SuperTux 开发团…...
基于HASM模型的高精度建模matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 本课题主要使用HASM进行高精度建模,主要对HASM模型进行介绍以及在实际中如何进行简化实现的。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行…...
C++多线程编程时的伪共享问题及其定位和解决
一、引言 在多线程编程和共享内存系统中,为了提高程序性能,常常需要对共享数据进行处理。然而,在并发环境下,一种名为“伪共享(False Sharing)”的问题可能会悄然出现,它虽然不像传统的多线程同…...
高并发短信系统设计:基于SharingJDBC的分库分表、大数据同步与实时计算方案
高并发短信系统设计:基于SharingJDBC的分库分表、大数据同步与实时计算方案 一、概述 在当今互联网应用中,短信服务是极为重要的一环。面对每天发送2000万条短信的需求,我们需要一个能够处理海量数据(一年下来达到数千万亿级别&…...
【HTML】html文件
HTML文件全解析:搭建网页的基石 在互联网的广袤世界里,每一个绚丽多彩、功能各异的网页背后,都离不开HTML文件的默默支撑。HTML,即超文本标记语言(HyperText Markup Language),作为网页创建的基…...
5.11 GitHub API调试五大高频坑:从JSON异常到异步阻塞的实战避坑指南
GitHub API调试五大高频坑:从JSON异常到异步阻塞的实战避坑指南 关键词:GitHub API 调试、JSON 解析异常、提示工程优化、异步任务阻塞、数据清洗策略 5.5 测试与调试:调试常见问题 问题1:GitHub API 调用异常 现象: requests.exceptions.HTTPError: 403 Client Error…...
协程的原生挂起与恢复机制
目录 🔍 一、从开发者视角看协程挂起与恢复 🧠 二、协程挂起和恢复的机制原理:核心关键词 ✅ suspend 函数 ≠ 普通函数 ✅ Continuation(协程的控制器) 🔧 三、编译器做了什么?࿰…...
机器学习中的数学(PartⅡ)——线性代数:2.2矩阵
概述 本节内容也相对简单,首先介绍了矩阵的定义,矩阵的表示方法;然后介绍了矩阵的加法和乘法,与标量的乘法,以及一些矩阵相关算数运算的性质,包括满足结合律、交换律;矩阵的逆和转置࿱…...
泉涌未来:科技与生态的共生诗篇-济南
故事背景 故事发生在中国山东济南的未来城市环境,这里不再是单纯的自然景观与现代建筑的堆砌,而是科技与生态深度融合的奇妙世界。泉水,这一济南的灵魂元素,在未来科技的赋能下,成为连接城市各个角落的纽带。量子态泉水…...
用AI生成系统架构图
DeepSeek+Drawio+SVG绘制架构图-找到一种真正可行实用的方法和思路 1、使用DeepSeek生成SVG文件,导入drawio工具的方法 🔥 问题根源分析 错误现象: • 导入时报错包含 data:image/SVG;base64 和 %20 等 URL 编码字符 • 代码被错误转换为 Base64 格式(适用于网页嵌入,但…...
网络基础1
目录 初识协议 协议分层 软件分层的好处 OSI七层模型 TCP/IP 五层(或四层)模型 再谈协议 为什么要有 TCP/IP 协议? TCP/IP 协议与操作系统的关系 所以究竟什么是协议? 网络传输基本流程 认识 MAC 地址 局域网(以太网为例)通信原理 报文的传…...
免费且好用的PDF水印添加工具
软件介绍 今天要给大家推荐一款超实用的PDF添加水印工具,它能够满足用户给PDF文件添加水印的需求,而且完全免费。 这款PDF添加水印的软件有着简洁的界面,操作简便,无需安装,解压后即可使用。 在使用前,先…...
C++Primer对象移动
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
互联网三高-数据库高并发之分库分表ShardingJDBC
1 ShardingJDBC介绍 1.1 常见概念术语 ① 数据节点Node:数据分片的最小单元,由数据源名称和数据表组成 如:ds0.product_order_0 ② 真实表:再分片的数据库中真实存在的物理表 如:product_order_0 ③ 逻辑表:…...
七、自动化概念篇
自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的过程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人…...
python操作mongodb
1、安装包 pyMongo是MongoDB官方推荐的Python驱动程序,它提供了访问MongoDB数据库所需的接口。安装PyMongo非常简单,可以通过pip包管理工具来安装最新版本: pip install pymongo 安装完成后,我们可以使用以下Python代码来检查是否…...
IS-IS中特殊字段——OL过载
文章目录 OL 过载位 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2025年04月13日20点12分 OL 过载位 路由过载 使用 IS-IS 的过载标记来标识过载状态 对设备设置过载标记后ÿ…...
行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)
行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第一部分)-CSDN博客 Propagation of Interplanetary Shocks in the Heliosphere [ Chapter 3 ] [PDF: arXiv] 本文保留原文及参考文献,参…...
紫光同创FPGA实现HSSTLP光口视频点对点传输,基于Aurora 8b/10b编解码架构,提供6套PDS工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的 GT 高速接口解决方案Xilinx系列FPGA实现GTP光口视频传输方案推荐Xilinx系列FPGA实现GTX光口视频传输方案推荐Xilinx系列FPGA实…...
正则表达式使用知识(日常翻阅)
正则表达式使用 一、字符匹配 1. 普通字符 描述:直接匹配字符本身。示例: abc 匹配字符串中的 “abc”。Hello 匹配字符串中的 “Hello”。 2. 特殊字符 .(点号): 描述:匹配任意单个字符(…...
CSS padding(填充)学习笔记
CSS 中的 padding(填充)是一个非常重要的属性,它用于定义元素边框与元素内容之间的空间,即上下左右的内边距。合理使用 padding 可以让页面布局更加美观、清晰。以下是对 CSS padding 的详细学习笔记。 一、padding 的作用 padd…...
Python中的字符串、列表、字典和集合详解
Python是一门强大的编程语言,其内置的数据结构丰富多样。其中,字符串、列表、字典和集合是最常用的数据类型。本文将对它们的区别、用法和使用场景进行详细介绍,帮助大家更好地理解和应用这些数据结构。 1. 字符串(String…...
【CUDA编程】CUDA Warp 与 Warp-Python 对比文档
相关文档: Nvidia-Warp GitHub:nvidia/warp CUDA Warp 和 Warp-Python 库 的对比与统一文档,涵盖两者的核心概念、区别、使用场景及示例: 1. CUDA Warp(硬件/编程模型概念) 1.1 定义与核心概念 定义: C…...
中厂算法岗面试总结
时间:2025.4.10 地点:上市的电子有限公司 面试流程: 1.由负责人讲解公司文化 2,由技术人员讲解公司的技术岗位,还有成果 3.带领参观各个工作位置,还有场所 4.中午吃饭 5.面试题,闭卷考试…...
Losson 4 NFS(network file system(网络文件系统))
网络文件系统:在互联网中共享服务器中文件资源。 使用nfs服务需要安装:nfs-utils 以及 rpcbind nfs-utils : 提供nfs服务的程序 rpcbind :管理nfs所有进程端口号的程序 nfs的部署 1.客户端和服务端都安装nfs-utils和rpcbind #安装nfs的软件rpcbind和…...
自动化运行后BeautifulReport内容为空
一、问题描述 自动化程序运行后发现运行目录下生成的html报告文件内容为空,没有运行结果。 二、测试环境 操作系统:Windows 11 家庭版BeautifulReport:0.1.3Python:3.11.9Appium-Python-Client:5.0.0Appium Server:2.…...
CTF-WEB排行榜制作
CTF-WEB排行榜制作 项目需求: 现在14道题对应有14个flag,我需要使用dockerfile搭建一个简单的,能够实现验证这些题目对应的flag来计分的简单网站(要求页面比较精美) 前十题设置为10分 11-14题设置为20分 1. flag{5a3…...
架构生命周期(高软57)
系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么?二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么? 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…...
STM32单片机定时器的输入捕获和输出比较
目录 一、定时器的输入捕获 1、工作原理 2、示例代码 二、定时器的输出比较 1、工作原理 2、示例代码 三、总结 在STM32单片机中,定时器是一个非常重要的外设,广泛应用于时间管理、事件计时、波形生成等多种场景。其中输入捕获和输出比较是两个基…...
计算机组成原理-系统总线
1. 系统总线的定义 系统总线是计算机系统中各功能部件(CPU、存储器、I/O设备等)之间传递信息的公共通路,遵循统一的电气规范和时序协议,是计算机硬件互联的基础。 核心作用:实现数据、地址和控制信号的传输ÿ…...
【android bluetooth 框架分析 02】【Module详解 3】【HciHal 模块介绍】
1. 背景 我们在 gd_shim_module 介绍章节中,看到 我们将 HciHal 模块加入到了 modules 中。 modules.add<hal::HciHal>();在 ModuleRegistry::Start 函数中我们对 加入的所有 module 挨个初始化。 而在该函数中启动一个 module 都要执行那下面几步ÿ…...
Git 远程仓库
Git 入门笔记 远程仓库 Git 远程仓库 Git 远程仓库是一个托管在网络服务器上的代码仓库,它是团队协作开发的核心。 通过远程仓库,开发者可以共享代码、同步更新,实现分布式协作。 SSH 密钥 SSH 密钥可以让你在使用 Git 时安全地连接远程…...
209.长度最小的子数组- 力扣(LeetCode)
题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1:…...
符号右移“ >>= “ 与 无符号右移“ >>>= “ 的区别
符号右移" >> " 与 无符号右移" >>> " 的区别 一、符号右移" >> " 与 无符号右移" >>> " 的区别1. 符号右移(>>)与无符号右移(>>>)的区别…...
山东大学软件学院项目实训-基于大模型的模拟面试系统-专栏管理部分
本周我的主要任务是关于专栏管理部分的完善。 专栏图片的显示问题 问题分析 根据代码可知:图片URL来自于portfolio.headImgUrl,而且如果URL不存在的话,应该显示的是无图片,而网页中显示加载失败说明portfolio.headImgUrl应该是存…...
从 SYN Flood 到 XSS:常见网络攻击类型、区别及防御要点
常见的网络攻击类型 SYN Flood、DoS(Denial of Service) 和 DDoS(Distributed Denial of Service) 是常见的网络攻击类型,它们的目标都是使目标系统无法正常提供服务。以下是它们的详细说明: 1. SYN Flood…...
ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程
文章目录 前言(Introduction)搭建开发环境(Setup Development Environment)在window中安装Unity(Install Unity in window)创建Docker容器,并安装相关软件(Create Docker containers…...
01_通过调过api文字生成音频示例
第1 第2 第3,测试音色 第4 第5 第6 第7生成api_key 第8代码 import requestsurl "https://api.siliconflow.cn/v1/audio/speech"payload {"input": "在中国传统文化中,谦让被视为一种美德,但过度的让步…...
使用PyTorch实现目标检测边界框转换与可视化
一、引言 在目标检测任务中,边界框(Bounding Box)的坐标表示与转换是核心基础操作。本文将演示如何: 实现边界框的两种表示形式(角点坐标 vs 中心坐标)之间的转换 使用Matplotlib在图像上可视化边界框 验…...
QEMU学习之路(8)— ARM32通过u-boot 启动Linux
QEMU学习之路(8)— ARM32通过u-boot 启动Linux 一、前言 参考文章: Linux内核学习——内核的编译和启动 Linux 内核的编译和模拟执行 Linux内核运行——根文件系统 Linux 内核学习——使用 uboot 加载内核 二、构建Linux内核 1、获取Linu…...
flutter 桌面应用之右键菜单
在 Flutter 桌面应用开发中,context_menu 和 contextual_menu 是两款常用的右键菜单插件,各有特色。以下是对它们的对比分析: 🧩 context_menu 集成方式:通过 ContextMenuArea 组件包裹目标组件,定义…...
系统设计面试总结:高性能相关:CDN(内容分发网络)、什么是静态资源、负载均衡(Nginx)、canal、主从复制
以下为本人自学回顾使用,请支持javaGuide原版。 1.CDN概述 CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。 你可以将 CDN 看作是服务上一层的特殊缓存服务,分布…...
从红黑树到哈希表:原理对比与典型场景应用解析(分布式以及布隆过滤器)
在数据结构的世界里,红黑树一直以「自平衡二叉查找树」的身份备受赞誉。凭借红黑节点的精妙设计,它能将插入、删除、查找的时间复杂度稳定控制在 ( log n ) (\log n) (logn),成为处理有序数据的经典方案。然而,当业务场景对「…...
动手学深度学习:手语视频在VGG模型中的测试
前言 其他所有部分同上一篇AlexNet一样,所以就不再赘诉,直接看VGG搭建部分。 模型 VGG是第一个采取块进行模块化搭建的模型。 def vgg_block(num_convs,in_channels,out_channels):layers[]for _ in range(num_convs):layers.append(nn.Conv2d(in_ch…...
微信小程序实战案例 - 餐馆点餐系统 阶段 4 - 订单列表 状态
✅ 阶段 4 – 订单列表 & 状态 目标 展示用户「我的订单」列表支持状态筛选(全部 / 待处理 / 已完成)支持分页加载和实时刷新使用原生组件编写 ✅ 1. 页面结构:文件结构 pages/orders/├─ index.json├─ index.wxml├─ index.js└─…...
深度学习理论-直观理解 Attention
本文首先介绍 Attention 的原始公式,然后以 Self-Attention 为例,简化后逐步分析 Attention 计算结果表达的含义 Attention Attention 公式如下: A t t e n t i o n s o f t m a x ( Q ⋅ K T d k ) ⋅ V Attention softmax(\frac{Q \cd…...