当前位置: 首页 > 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 &…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...