当前位置: 首页 > news >正文

【PAM】Linux登录认证限制

PAM(Pluggable Authentication Modules,可插拔认证模块)是一种灵活的认证框架,用于在 Linux 和其他类 Unix 系统上管理用户的身份验证。PAM 允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式,而不需要修改这些应用程序的源代码。

0、PAM 介绍

PAM 的核心概念

PAM 提供了一个模块化的认证系统,它由一系列模块和规则组成,来决定用户如何被认证、账户如何管理、密码如何处理以及如何管理用户会话。PAM 系统的设计使得它可以根据需要轻松增加或修改认证方式,而不会影响系统上的应用程序。

PAM 的主要功能:

  1. 身份验证(Authentication):验证用户身份,通常通过密码或其他认证方式(如指纹、双因素认证等)。
  2. 账户管理(Account Management):管理用户账户的状态,如账户是否过期、是否被锁定等。
  3. 密码管理(Password Management):控制密码的设置、修改,以及强制密码策略(如复杂度、到期等)。
  4. 会话管理(Session Management):管理用户会话的开始和结束,通常用于初始化或清理用户登录/注销时的环境。

PAM 的工作流程

PAM 通过读取位于 /etc/pam.d/ 目录下的配置文件来确定如何对某个服务进行认证。每个应用程序(如 SSH、sudologin 等)都有自己独立的 PAM 配置文件。例如,SSH 服务的 PAM 配置文件是 /etc/pam.d/sshd,本地登录的配置文件是 /etc/pam.d/login

每个 PAM 配置文件定义了一组模块,这些模块按照预定顺序执行。根据模块的执行结果,决定用户是否能够通过认证,或者账户是否被允许访问。

PAM 配置文件结构

每个 PAM 配置文件由若干行组成,每行定义了一个模块的使用方式。每行的格式如下:

<模块类型>   <控制标记>   <模块路径>   <可选参数>
  • 模块类型(Module Type):定义模块的功能,分为四类:

    1. auth:身份验证模块,用于验证用户身份。
    2. account:账户管理模块,用于管理用户账户的状态(如账户是否过期等)。
    3. password:密码管理模块,用于控制密码的设置和更新。
    4. 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&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;是一种灵活的认证框架&#xff0c;用于在 Linux 和其他类 Unix 系统上管理用户的身份验证。PAM 允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式&#xff0c;而不…...

Go语言Mutex的优化与TryLock机制解析

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言中的Mutex优化与goroutine调度机制 Go语言的开发团队于2011年6月30日对Mutex进行了重大调整,这次调整主要目的是优化并发场景下的锁竞争,尤其是在多goroutine争抢同一把锁时的处理。这次优化不仅改进了锁…...

基于TSN的实时通信网络延迟评估技术

论文标题&#xff1a;A TSN-based Technique for Real-Time Latency Evaluation in Communication Networks 作者信息&#xff1a; Alberto Morato, Claudio Zunino, Manuel Cheminod, Stefano Vitturi&#xff0c;来自意大利国家研究委员会&#xff0c;CNR-IEIIT。电子邮件:…...

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ&#xff1a;Zynq-7000 All Programmable SoC&#xff08;APSoC&#xff09;&#xff0c;赛灵思公司&#xff08;AMD Xilinx&#xff09;推出的新一代全可编程片上系统 PS&#xff1a;Processing System&#xff0c;处理系统 PL&#xff1a;Program Logic&…...

理论-链表的头结点

所为头结点&#xff0c;是为了使空链表和非空链表的处理统一而在链表的头部增加的一个节点&#xff0c;这样无论链表是否为空&#xff0c;头指针都指向头结点&#xff0c;头结点中不存数据而只是存放指向第一个节点的指针。没有头结点的链表&#xff0c;头指针就指向第一个节点…...

oracle 分表代码示例

在Oracle数据库中&#xff0c;分表通常指的是将一个大表分解成多个较小的表&#xff0c;以提高管理和查询效率。这通常是通过分区&#xff08;Partitioning&#xff09;来实现的&#xff0c;而不是传统意义上的将表拆分成多个独立的表。不过&#xff0c;如果你确实需要将一个大…...

【MySQL】regexp_replace在MySQL以及regexp extract all在MySQL的用法

一、regexp_replace在MySQL的用法 在MySQL中&#xff0c;REGEXP_REPLACE() 函数用于在字符串中搜索正则表达式模式&#xff0c;并用指定的字符串替换该模式的每个匹配项。以下是其基本用法&#xff1a; 语法 REGEXP_REPLACE(expression, pattern, replace_string[, pos[, oc…...

详解 FFmpeg 中的 -map 选项

FFmpeg 是一个强大的多媒体处理工具&#xff0c;可以处理各种音视频转换、编辑任务。-map 选项是 FFmpeg 中非常重要且灵活的一个功能&#xff0c;它允许用户精确控制输入流如何映射到输出文件中。使用 -map&#xff0c;可以指定视频、音频或字幕等特定流进行处理&#xff0c;这…...

学习threejs,绘制二维线

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制二维线1. ☘️…...

跑lvs出现soft connect怎么处理?

首先&#xff0c;我们先了解一下什么是soft connect。简而言之&#xff0c;就是工具会将所有连接在psub上的信号认作soft connect&#xff08;也就是short&#xff09;。如图1所示&#xff0c;VSS和AVSS都接到了p上&#xff0c;它们通过psub便有了soft connect。 如果有soft co…...

实验1 Python语言基础一

目录 实验1 Python语言基础一1、下载安装Python&#xff0c;贴出验证安装成功截图2、建立test.py文件,运行后贴出截图&#xff0c;思考if __name”__main__”的意思和作用3、分别运行下面两种代码&#xff0c;分析运行结果产生的原因。记牢python中重要语法“tab”的作用。6、编…...

多线程相关内容

一、进程与线程 (一)进程的概述 进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的一个独立单位。每个进程都有自己独立的内存空间&#xff0c;包括代码、数据和运行时的环境。进程的执行需要系统为其分配各种资源&#xff0c;如 CPU 时间、内存空间、文件描述符…...

mybatis-puls快速入门

1.概述 在真实项目开发中我们的服务模块&#xff0c;一般都要进行数据库操作&#xff0c;并且每个domain都有crud&#xff0c;需多次写重复代码。我们使用MybatisPlus&#xff0c;就不用写重复代码&#xff0c;并且还有模板的功能&#xff0c;可以一键生成daomin,query,mapper…...

Pool 和 PG 架构(二)

Ceph 的存储架构设计旨在提供高可用性和可扩展性。其中&#xff0c;Pool&#xff08;存储池&#xff09;和 PG&#xff08;放置组&#xff09;是两个核心概念。下面详细介绍 Ceph 的 Pool 和 PG 架构以及它们之间的关系。 1. Pool池 概念&#xff1a; Pool&#xff08;存储池…...

客户服务升级指南:如何以细节赢得客户忠诚

在当今这个竞争激烈的市场环境中&#xff0c;客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚&#xff0c;仅凭优质的产品或服务已远远不够&#xff0c;更需要企业在客户服务上下足功夫&#xff0c;从每一个细节入手&#xff0c;打造超越客户期待的服务…...

闲盒支持的组网方式和注意事项

1. 直连光猫拨号​ 通过光猫拨号&#xff0c;设备直连光猫的设备&#xff0c;需要对光猫开启UPNP并关闭DMZ 如果只接一个盒子&#xff0c;建议直接针对盒子IP开dmz。 2. 直连路由器​ 通过路由器拨号&#xff0c;设备直连路由器的设备&#xff0c;需要对路由器开启UPNP并关闭…...

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下搭建MaxKB开源知识库问答系统

828华为云征文&#xff5c;华为云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]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…...

浙大数据结构:05-树9 Huffman Codes

这道题难度挺大&#xff0c;写起来较为费劲&#xff0c;这里我依然使用了STL库&#xff0c;使得代码量大幅减少不过百行&#xff0c;便于大家理解。 机翻&#xff1a; 1、条件准备 数组存储字符对应频率&#xff0c;n,student存储输入多少字符&#xff0c;有多少学生测试。 …...

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...