【PAM】Linux登录认证限制
PAM(Pluggable Authentication Modules,可插拔认证模块)是一种灵活的认证框架,用于在 Linux 和其他类 Unix 系统上管理用户的身份验证。PAM 允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式,而不需要修改这些应用程序的源代码。
0、PAM 介绍
PAM 的核心概念
PAM 提供了一个模块化的认证系统,它由一系列模块和规则组成,来决定用户如何被认证、账户如何管理、密码如何处理以及如何管理用户会话。PAM 系统的设计使得它可以根据需要轻松增加或修改认证方式,而不会影响系统上的应用程序。
PAM 的主要功能:
- 身份验证(Authentication):验证用户身份,通常通过密码或其他认证方式(如指纹、双因素认证等)。
- 账户管理(Account Management):管理用户账户的状态,如账户是否过期、是否被锁定等。
- 密码管理(Password Management):控制密码的设置、修改,以及强制密码策略(如复杂度、到期等)。
- 会话管理(Session Management):管理用户会话的开始和结束,通常用于初始化或清理用户登录/注销时的环境。
PAM 的工作流程
PAM 通过读取位于 /etc/pam.d/ 目录下的配置文件来确定如何对某个服务进行认证。每个应用程序(如 SSH、sudo、login 等)都有自己独立的 PAM 配置文件。例如,SSH 服务的 PAM 配置文件是 /etc/pam.d/sshd,本地登录的配置文件是 /etc/pam.d/login。
每个 PAM 配置文件定义了一组模块,这些模块按照预定顺序执行。根据模块的执行结果,决定用户是否能够通过认证,或者账户是否被允许访问。
PAM 配置文件结构
每个 PAM 配置文件由若干行组成,每行定义了一个模块的使用方式。每行的格式如下:
<模块类型> <控制标记> <模块路径> <可选参数>
-
模块类型(Module Type):定义模块的功能,分为四类:
auth:身份验证模块,用于验证用户身份。account:账户管理模块,用于管理用户账户的状态(如账户是否过期等)。password:密码管理模块,用于控制密码的设置和更新。session:会话管理模块,用于处理用户登录和退出时的操作。
-
控制标记(Control Flag):决定当模块执行成功或失败时该如何处理。常见的控制标记有:
required:模块必须成功执行,如果失败了,会继续执行后续模块,但最终结果为失败。requisite:模块必须成功,如果失败了,立即返回失败,不继续执行其他模块。sufficient:如果该模块成功,则立即返回成功,不再执行其他模块。如果失败了,继续执行其他模块。optional:模块的结果不会影响最终的认证结果,除非它是唯一的模块。
-
模块路径(Module Path):指定要调用的 PAM 模块,通常位于
/lib/security/目录下。 -
可选参数(Optional Arguments):用于传递给模块的配置参数。
PAM 配置文件示例
以下是一个 PAM 配置文件 /etc/pam.d/login 的简单示例:
auth required pam_env.so
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
-
auth:
pam_env.so:在用户登录时设置环境变量。pam_unix.so:通过传统的 Unix 方式(如/etc/passwd和/etc/shadow)验证用户密码。
-
account:
pam_unix.so:检查账户状态,确认用户是否有权限登录,密码是否过期。
-
password:
pam_unix.so:用于更改用户密码。
-
session:
pam_unix.so:管理用户会话的开始和结束,负责登录/注销时的必要操作。
PAM 的灵活性
PAM 的优势在于它的模块化设计。你可以为同一个服务组合多个模块,形成定制的认证方式。例如,你可以通过以下方式配置 SSH 登录:
- 检查
/etc/nologin文件是否存在(维护模式时阻止登录)。 - 使用本地 Unix 密码进行验证。
- 引入多因素认证模块(如
pam_google_authenticator)。 - 使用 LDAP 或 RADIUS 模块进行远程用户认证。
常见 PAM 模块
pam_unix.so:传统 Unix 认证模块,使用/etc/passwd和/etc/shadow进行认证。pam_env.so:设置环境变量。pam_tally2.so:用于限制登录失败次数,防止暴力破解。pam_nologin.so:如果/etc/nologin文件存在,则阻止用户登录。pam_ldap.so:通过 LDAP 进行用户认证。pam_google_authenticator.so:使用 Google Authenticator 进行双因素认证。
1、登录认证限制
有个开发任务限制SSH登录和login(串口)登录的用户名,SSH只允许A用户登录,login只允许B用户登录。需要修改PAM配置。
查看验证文件
发现两个登录方式的验证规则都是/etc/pam_withunix

修改pam_withunix
在/etc/pam_withunix文件的开头写入:
auth required /lib/security/pam_nologin.so
# Configuration for login service
auth [success=1 default=ignore] /lib/security/pam_succeed_if.so service != login
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/defconfig/login_users onerr=fail
# Configuration for sshd service
auth [success=1 default=ignore] /lib/security/pam_succeed_if.so service != sshd
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/defconfig/ssh_users onerr=fail
然后在/etc/defconfig/目录分别添加ssh_users 、login_users 文件,文件中写入各种运行登录的用户的用户名。
/etc/defconfig/ssh_users 和 /etc/defconfig/login_users 是自定义路径名称的文件,可以随意填写。
如果是限制的用户不多,推荐方法:
不需要添加文件,对于编译更友好,无需新增系统文件了
如果login 登录必须是用户a
如果sshd 登录必须是用户b# Configuration for login service
auth [success=1 default=ignore] /lib/security/pam_succeed_if.so service != login
auth requisite /lib/security/pam_succeed_if.so user = a# Configuration for sshd service
auth [success=1 default=ignore] /lib/security/pam_succeed_if.so service != sshd
auth requisite /lib/security/pam_succeed_if.so user = b
相关文章:
【PAM】Linux登录认证限制
PAM(Pluggable Authentication Modules,可插拔认证模块)是一种灵活的认证框架,用于在 Linux 和其他类 Unix 系统上管理用户的身份验证。PAM 允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式,而不…...
Go语言Mutex的优化与TryLock机制解析
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言中的Mutex优化与goroutine调度机制 Go语言的开发团队于2011年6月30日对Mutex进行了重大调整,这次调整主要目的是优化并发场景下的锁竞争,尤其是在多goroutine争抢同一把锁时的处理。这次优化不仅改进了锁…...
基于TSN的实时通信网络延迟评估技术
论文标题:A TSN-based Technique for Real-Time Latency Evaluation in Communication Networks 作者信息: Alberto Morato, Claudio Zunino, Manuel Cheminod, Stefano Vitturi,来自意大利国家研究委员会,CNR-IEIIT。电子邮件:…...
初识ZYNQ——FPGA学习笔记15
一、ZYNQ简介 ZYNQ:Zynq-7000 All Programmable SoC(APSoC),赛灵思公司(AMD Xilinx)推出的新一代全可编程片上系统 PS:Processing System,处理系统 PL:Program Logic&…...
理论-链表的头结点
所为头结点,是为了使空链表和非空链表的处理统一而在链表的头部增加的一个节点,这样无论链表是否为空,头指针都指向头结点,头结点中不存数据而只是存放指向第一个节点的指针。没有头结点的链表,头指针就指向第一个节点…...
oracle 分表代码示例
在Oracle数据库中,分表通常指的是将一个大表分解成多个较小的表,以提高管理和查询效率。这通常是通过分区(Partitioning)来实现的,而不是传统意义上的将表拆分成多个独立的表。不过,如果你确实需要将一个大…...
【MySQL】regexp_replace在MySQL以及regexp extract all在MySQL的用法
一、regexp_replace在MySQL的用法 在MySQL中,REGEXP_REPLACE() 函数用于在字符串中搜索正则表达式模式,并用指定的字符串替换该模式的每个匹配项。以下是其基本用法: 语法 REGEXP_REPLACE(expression, pattern, replace_string[, pos[, oc…...
详解 FFmpeg 中的 -map 选项
FFmpeg 是一个强大的多媒体处理工具,可以处理各种音视频转换、编辑任务。-map 选项是 FFmpeg 中非常重要且灵活的一个功能,它允许用户精确控制输入流如何映射到输出文件中。使用 -map,可以指定视频、音频或字幕等特定流进行处理,这…...
学习threejs,绘制二维线
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言二、🍀绘制二维线1. ☘️…...
跑lvs出现soft connect怎么处理?
首先,我们先了解一下什么是soft connect。简而言之,就是工具会将所有连接在psub上的信号认作soft connect(也就是short)。如图1所示,VSS和AVSS都接到了p上,它们通过psub便有了soft connect。 如果有soft co…...
实验1 Python语言基础一
目录 实验1 Python语言基础一1、下载安装Python,贴出验证安装成功截图2、建立test.py文件,运行后贴出截图,思考if __name”__main__”的意思和作用3、分别运行下面两种代码,分析运行结果产生的原因。记牢python中重要语法“tab”的作用。6、编…...
多线程相关内容
一、进程与线程 (一)进程的概述 进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位。每个进程都有自己独立的内存空间,包括代码、数据和运行时的环境。进程的执行需要系统为其分配各种资源,如 CPU 时间、内存空间、文件描述符…...
mybatis-puls快速入门
1.概述 在真实项目开发中我们的服务模块,一般都要进行数据库操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板的功能,可以一键生成daomin,query,mapper…...
Pool 和 PG 架构(二)
Ceph 的存储架构设计旨在提供高可用性和可扩展性。其中,Pool(存储池)和 PG(放置组)是两个核心概念。下面详细介绍 Ceph 的 Pool 和 PG 架构以及它们之间的关系。 1. Pool池 概念: Pool(存储池…...
客户服务升级指南:如何以细节赢得客户忠诚
在当今这个竞争激烈的市场环境中,客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚,仅凭优质的产品或服务已远远不够,更需要企业在客户服务上下足功夫,从每一个细节入手,打造超越客户期待的服务…...
闲盒支持的组网方式和注意事项
1. 直连光猫拨号 通过光猫拨号,设备直连光猫的设备,需要对光猫开启UPNP并关闭DMZ 如果只接一个盒子,建议直接针对盒子IP开dmz。 2. 直连路由器 通过路由器拨号,设备直连路由器的设备,需要对路由器开启UPNP并关闭…...
828华为云征文|华为云Flexus云服务器X实例之openEuler系统下搭建MaxKB开源知识库问答系统
828华为云征文|华为云Flexus云服务器X实例之openEuler系统下搭建MaxKB开源知识库问答系统 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、MaxKB 介绍2.1 MaxKB简介2.2 MaxKB整体架构…...
[Linux]:信号(上)
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中,信号(…...
浙大数据结构:05-树9 Huffman Codes
这道题难度挺大,写起来较为费劲,这里我依然使用了STL库,使得代码量大幅减少不过百行,便于大家理解。 机翻: 1、条件准备 数组存储字符对应频率,n,student存储输入多少字符,有多少学生测试。 …...
scrapy爬虫基础
一、初识 创建项目: scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去, 后面在里面运行 运行爬虫命令为:scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
