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

关于Linux PAM模块下的pam_listfile

讲《Linux下禁止root远程登录访问》故事的时候,说好会另开一篇讲讲pam_listfile。我们先看看pam_listfile的man文档怎么介绍的。

下面这些就好比人物的简介,甚是恼人;让人看得不明就里,反正“他大舅他二舅都是他舅”。可以直接跳到下面的示例环节,看如何使用的,直接参考就行了。

名称

pam_listfile - 基于任意文件允许或拒绝服务

概要

pam_listfile.so item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]

描述

pam_listfile 是一个 PAM(可插拔认证模块)模块,它提供了一种基于任意文件来允许或拒绝服务的方法。

该模块会根据指定的类型获取项目:

  • user:指定用户名,对应 PAM_USER;
  • tty:指定请求所经过的终端名称,对应 PAM_TTY;
  • rhost:指定发起请求的远程主机名称(如果有),对应 PAM_RHOST;
  • ruser:指定发起请求的远程用户名(如果可用),对应 PAM_RUSER;
  • group:指定用户所属的组;
  • shell:指定用户的登录 shell。

然后在 file=filename 中查找该项目。filename 文件中每行列出一个项目。如果找到了该项目,则根据 sense 参数决定操作:

  • 如果 sense=allow,则返回 PAM_SUCCESS,使授权请求成功;
  • 如果 sense=deny,则返回 PAM_AUTH_ERR,使授权请求失败。

如果遇到错误(例如,文件不存在或参数构造不良),则根据 onerr 参数决定处理方式:

  • 如果 onerr=succeed,则返回 PAM_SUCCESS
  • 如果 onerr=fail,则返回 PAM_AUTH_ERR 或 PAM_SERVICE_ERR(视情况而定)。

额外的参数 apply= 可以用来限制上述规则的应用范围,仅对特定用户 (apply=username) 或特定组 (apply=@groupname) 生效。此限制仅在使用 ttyrhost 和 shell 项目时有意义。

除了最后一个参数外,所有参数都应该是明确指定的;不要依赖任何默认行为。

此模块不会授予任何凭据。

选项

  • item=[tty|user|rhost|ruser|group|shell] 要在文件中列出并检查的项目。

  • sense=[allow|deny] 如果在文件中找到项目时应采取的操作;如果未找到项目,则执行相反的操作。

  • file=/path/filename 包含每个项目一行的文件。文件需要是普通文件,并且不能是世界可写的。

  • onerr=[succeed|fail] 如果发生异常情况(如无法打开文件)时应采取的操作。

  • apply=[user|@group] 限制应用规则的用户类别。对于 item=[user|ruser|group],这没有意义,但对于 item=[tty|rhost|shell],它有意义。

  • quiet 不将服务拒绝或缺少列表文件视为需要记录的错误。

提供的模块类型

提供所有模块类型(auth, account, password 和 session)。

返回值

  • PAM_AUTH_ERR 认证失败。

  • PAM_BUF_ERR 内存缓冲区错误。

  • PAM_IGNORE 规则不适用于 apply 选项。

  • PAM_SERVICE_ERR 服务模块中的错误。

  • PAM_SUCCESS 成功。

示例-vsftpd黑名单:禁止某些用户访问ftp服务

# 拒绝 /etc/ftpusers 文件中列出的用户访问 ftp 服务
auth    required       pam_listfile.so \onerr=succeed item=user sense=deny file=/etc/vsftpd/ftpusers

注意,/etc/vsftpd/ftpusers 文件中列出的用户不允许访问 vsftp 服务。

示例-login白名单:只允许某些用户可以console登录用户

在 /etc/pam.d/login 中使用如下条目:

# 允许 /etc/loginusers 文件中列出的用户登录
auth    required       pam_listfile.so \onerr=fail item=user sense=allow file=/etc/loginusers

在这个例子中,所有被允许使用登录服务的用户都应该列在 /etc/loginusers 文件中。除非你明确尝试锁定 root 用户,否则确保将 root 列入 /etc/loginusers 文件,或者列出能够切换到 root 账户的用户。

示例-sshd黑名单:不允许某些用户通过ssh登录

前提:当前sshd配置了UsePAM yes。

在 /etc/pam.d/sshd中使用如下条目:

#%PAM-1.0
auth       required     pam_sepermit.so
auth        required pam_listfile.so item=user sense=deny file=/etc/ssh/sshd.deny onerr=succeed
auth       include      password-auth

该文件禁止访问ssh的黑名单列表:/etc/ssh/sshd.deny

在/var/log/secure日志文件中会记录相关日志(如下是在auth和session模块分别实验的日志记录,都有效!):

pam_listfile(sshd_bak:session): Refused user user1 for service sshd
pam_listfile(sshd_bak:auth): Refused user user1 for service sshd

示例-su目标用户白名单:只允许su到某些用户

在 /etc/pam.d/sshd中使用如下条目:

auth           required pam_wheel.so use_uid group=groupa
auth           required pam_listfile.so item=user sense=allow onerr=fail file=/etc/security/su-groupa-access

该文件允许su切的白名单列表:/etc/security/su-groupa-access

如果文件中添加root,则只允许su切到root,如果su切到其他用户(包含本用户)也是不被允许的。

相关文章:

关于Linux PAM模块下的pam_listfile

讲《Linux下禁止root远程登录访问》故事的时候,说好会另开一篇讲讲pam_listfile。我们先看看pam_listfile的man文档怎么介绍的。 下面这些就好比人物的简介,甚是恼人;让人看得不明就里,反正“他大舅他二舅都是他舅”。可以直接跳…...

OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218

原因分析 通过OkHttp请求网络,结果请求下来的数据一直无法解析并且报错,因解析时String res response.body().toString() 将toString改为string即可!...

弱电与电力工程领域,如何通过工程项目管理软件提升效率

在弱电与电力工程领域,通过益企工程云等工程项目管理软件提升效率的方法主要体现在以下几个方面: 1.智能化管理 自动化流程:益企工程云通过自动化处理日常任务和流程,减少手动操作,提高工作效率。 智能预警&#xff…...

引领实时数据分析新时代:阿里云实时数仓 Hologres

在数字化和智能化转型的浪潮中,数据已成为企业决策和运营优化的重要资产。传统的数据仓库解决方案虽然在一定程度上能够帮助企业管理数据,但随着业务需求的不断变化,实时数据处理和高效分析的能力显得愈加重要。为了应对这一挑战,…...

什么是中间件中间件有哪些

什么是中间件? 中间件(Middleware)是指在客户端和服务器之间的一层软件组件,用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件,它可以在两个系统之间传递、处理、转换数据,以达到协…...

css中的部分文字特性

文章目录 一、writing-mode二、word-break三、word-spacing;四、white-space五、省略 总结归纳常见文字特性,后续补充 一、writing-mode 默认horizontal-tbwriting-mode: vertical-lr; 从第一排开始竖着排,到底部再换第二排,文字与文字之间从…...

PyQt5 UI混合开发,控件的提升

PromoteLabelTest.py 提升的类 import sys from PyQt5.QtWidgets import QApplication, QWidget,QVBoxLayout,QTextEdit,QPushButton,QHBoxLayout,QFileDialog,QLabelclass PromoteLabel(QLabel):def __init__(self,parent None):super().__init__(parent)self.setText("…...

IP查询于访问控制保护你我安全

IP地址查询 查询方法: 命令行工具: ①在Windows系统中,我们可以使用命令提示符(WINR)查询IP地址,在弹窗中输入“ipconfig”命令查看本地网络适配器的IP地址等配置信息; ②在Linux系统中&…...

SpringBoot数据层解决方案

文章目录 1. 数据层解决方案2. 数据源技术 1. 数据层解决方案 现有数据层解决方案技术选型:Druid MyBatis-Plus MySQL 数据源:DruidDataSource持久化技术:MyBatis-Plus / MyBatis数据库:MySQL 下面的研究就分为三个层面进行研…...

前端数据模拟器 mockjs 和 fakerjs

功能:帮助前端生成随机数据,独立于后端单独开发 一、mockjs 安装:npm install mockjs 优点:官网是中文。 缺点:目前该库已经无人维护,也没人解决github上的bug。 官网 github地址 二、fakerjs 安装&#xf…...

Python 类 Class

在 Python 中,类(Class)是一种创建对象(Object)的模板,它允许我们定义对象的属性和方法。类是 Python 中实现面向对象编程(OOP)的核心结构。 定义一个类 定义一个类的基本语法如下…...

PHP语言的并发编程

PHP语言的并发编程 引言 随着互联网技术的迅速发展,Web 应用的复杂性和用户并发请求的增加,要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务,这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...

小米智能哑铃上市,代理 IP 视角下的智能健身新篇

在智能科技与健康生活深度融合的时代,小米以其敏锐的市场洞察力和强大的创新能力,不断拓展智能生态版图。米家智能哑铃的发布,无疑是其在智能健身领域的又一重要举措。而当我们从代理 IP 的独特视角来审视这一产品,会发现其中蕴含…...

业务日志设计

当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集 设计一个统计系统的日志记录机制时,主要需要…...

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年,在高阶智驾进入快速上车的同时,座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示,2024年1-10月,中国市场(不含进出口)乘用…...

【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: QLoRA: Efficient Finetun…...

计算机网络之---物理层的基本概念

物理层简介 物理层(Physical Layer) 是 OSI(开放系统互联)模型 中的第 1 层,它主要负责数据在物理媒介上的传输,确保原始比特(0 和 1)的传输不受干扰地从一个设备传送到另一个设备。…...

Burpsuite20241102macM1版安装

1、安装jdk11 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install openjdk11 echo export PATH"/opt/homebrew/opt/openjdk11/bin:$PATH" >> ~/.zshrc source ~/.zshrc j…...

缓存常见问题

缓存问题: 1. 缓存穿透:访问一个不存在的缓存 2. 缓存击穿:大批用户访问热点数据的时候,热点数据缓存失效,大量访问数据库 3. 缓存雪崩:大批量缓存全部失效 Redis和Memcached区别: 1. Redi…...

C++ 入门第25天:线程池(Thread Pool)基础

往期回顾: C 学习第22天:智能指针与异常处理-CSDN博客 C 入门第23天:Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天:C11 多线程基础-CSDN博客 C 入门第25天:线程池(Thread Pool)基础 前…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...