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

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

中南大学无人机智能体的全面评估!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.…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...