如何通过PAM禁止部分用户登录

如何通过 PAM 限制对 SSH 服务的根访问

如题。客户提出这样一个需求:限制和允许部分账号的SSH登录,限制名单可调。乍一看,这需求完全不合理啊?这又要改多少代码?但——PAM从脑海中一闪而过,想到一个办法,不改代码,也有办法。

PAM是如何运作的?

在这里插入图片描述

Linux-PAM(从Unix-PAM架构演变而来的可插拔身份验证模块的缩写)是一套功能强大的共享库,用于对Linux系统中的应用程序(或服务)动态验证用户。

它将多个低级身份验证模块集成到一个高级 API 中,为应用程序提供动态身份验证支持。这允许开发人员编写需要身份验证的应用程序,独立于基础身份验证系统。

许多现代Linux发行版默认支持Linux-PAM(以下简称“PAM”)。在本文中,我们将解释如何在 Ubuntu 和 CentOS 系统中配置高级 PAM。

在我们继续之前,请注意:

  1. 作为系统管理员,最重要的是掌握 PAM 配置文件如何定义应用程序(服务)和执行实际身份验证任务的可插拔身份验证模块 (PAM) 之间的连接。您不一定需要了解 PAM 的内部工作原理。
  2. PAM有可能严重改变Linux系统的安全性。错误的配置可能会部分或完全禁用对系统的访问。例如,意外删除 /etc/pam.d/*//etc/pam.conf 下的配置文件可能会将您锁定在自己的系统之外!

如何检查程序是否可识别 PAM

要使用 PAM,应用程序/程序需要“识别 PAM”;它需要专门编写和编译才能使用 PAM。要确定程序是否“PAM 感知”,请使用 ldd 命令检查它是否已使用 PAM 库编译。例如sshd:

$ sudo ldd /usr/sbin/sshd | grep libpam.so................libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)................

在这里插入图片描述

如何在 Linux 中配置 PAM

PAM 的主配置文件是 /etc/pam.conf/etc/pam.d/ 目录包含每个 PAM 感知应用程序/服务的 PAM 配置文件。如果目录存在,PAM 将忽略该文件。

主配置文件的语法如下。该文件由写在一行上的规则列表组成(您可以使用 “\” 转义字符扩展规则),注释前面带有 “#” 标记并延伸到行的下一端。

每个规则的格式都是以空格分隔的标记集合(前三个不区分大小写)。我们将在后续部分中解释这些令牌。

service type control-flag module module-arguments

  1. service:服务:实际应用程序名称。
  2. type:类型:模块类型/上下文/接口。
  3. control-flag:指示模块在其身份验证任务中失败时 PAM-API 的行为。
  4. module:PAM 的绝对文件名或相对路径名。相对路径的根一般是/lib
  5. module-arguments:用于控制模块行为的空格分隔的标记列表。若模块本身不接收参数则可以忽略。

/etc/pam.d/ 中每个文件的语法类似于主文件的语法,由以下形式的行组成:

type control-flag module module-arguments

这是在 /etc/pam.d/sshd 文件中找到的规则定义(没有模块参数)的示例,当 /etc/nologin 存在时,该文件不允许非 root 登录:

account required pam_nologin.so

了解 PAM 管理组和控制标志

PAM 身份验证任务分为四个独立的管理组。这些组管理典型用户对受限服务的请求的不同方面。模块与以下管理组类型之一相关联:

  1. account:提供账号验证服务:用户密码是否过期?是否允许此用户访问请求的服务?
  2. authentication:对用户进行身份验证并设置用户凭据。
  3. password:负责更新用户密码并与身份验证模块协同工作。
  4. session:管理在会话开始时和会话结束时执行的操作。即登录成功时和注销退出时。用的最多的是在登录成功时创建用户的HOME目录。

PAM 可加载对象文件(模块)应位于以下目录中:/lib/security//lib64/security,具体取决于体系结构。支持的控件标志包括:

  1. requisite:必要条件:故障立即将控制权返回给应用程序,指示第一个模块故障的性质。
  2. required:PAM认证要求所有这些模块成功才能成功,全部成功后才能将成功返回给应用程序,无视两个模块中间的返回操作。有的同学的某些配置不起作用,原因就是在这里了。
  3. sufficient:足够:假设前面的所有模块都已成功,则此模块的成功会导致立即成功返回到应用程序(忽略此模块的失败)。
  4. optional:可选:此模块的成功或失败一般不记录。

除了上述关键字之外,还有另外两个有效的控制标志:includesubstack:包括指定为此控件的参数的配置文件中给定类型的所有行。

如何通过 PAM 限制对 SSH 服务的根访问

例如,我们将配置如何使用 PAM 禁用根用户通过 SSH 和登录程序对系统的访问。在这里,我们希望通过限制对登录和 sshd 服务的访问来禁用 root 用户对系统的访问。

我们可以使用 /lib/security/pam_listfile.so 模块,它在限制特定帐户的权限方面提供了极大的灵活性。在 /etc/pam.d/ 目录中打开并编辑目标服务的文件,如下所示。

$ sudo vim /etc/pam.d/sshd
OR
$ sudo vim /etc/pam.d/login

在两个文件中添加此规则:

auth    required       pam_listfile.so \onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

再详细解释上述规则中的令牌:

  1. auth:身份验证:是模块类型(或上下文)。
  2. required:必需:是一个控制标志,表示如果使用模块,则无论其他模块的状态如何,它都必须通过,否则总体结果都将失败。
  3. pam_listfile.so:一个模块,它提供了一种基于任意文件拒绝或允许服务的方法。
  4. onerr=succeed:模块参数。出错返回成功。防止操作失误:文件不存在导致所有账号都无法登录。
  5. item=user:模块参数,指定文件中列出并应检查的内容。
  6. sense=deny:模块参数,指定在文件中找到时要执行的操作,如果在文件中找不到该项,则请求相反的操作。此操作就是客户需求的关键实现。
  7. file=/etc/ssh/deniedusers:模块参数,指定每行包含一个项目的文件。

接下来,我们需要创建文件 /etc/ssh/deniedusers 并在其中添加名称 root:从现在开始,上述规则将告诉 PAM 查阅 /etc/ssh/deniedusers 文件,并拒绝任何列出的用户访问 SSH 和登录服务。

如何在 Linux 中配置高级 PAM

若要编写更复杂的 PAM 规则,可以使用以下形式的有效控制标志:

type [value1=action1 value2=action2 …] module module-arguments

其中 valueN 对应于为其定义行的模块中调用的函数的返回代码。您可以从在线 PAM 管理员指南中找到支持的值。特殊值是默认值,这意味着所有值 N 都没有明确提及。操作 N 可以采用以下形式之一:

  1. ignore:忽略:如果此操作用于模块堆栈,则模块的返回状态不会对应用程序获取的返回代码产生影响。
  2. bad:错误:指示应将返回代码视为模块失败的指示。如果此模块是堆栈中第一个失败的模块,则其状态值将用于整个堆栈的状态值。
  3. die:等同于坏,但可能会终止模块堆栈,PAM 会立即返回到应用程序。
  4. ok:确定:这指示 PAM 系统管理员认为此返回代码应直接影响整个模块堆栈的返回代码。
  5. done:等效于 ok,但可能会终止模块堆栈,PAM 会立即返回到应用程序。
  6. N(无符号整数):等效于 ok,但可能会跳过堆栈中接下来的 N 个模块。
  7. reset:重置:此操作将清除所有内存中的模块堆栈状态,并使用下一个堆叠模块重新启动。

四个关键字中的每一个: required; requisite; sufficient; optional,在 [...] 语法方面有一个等效的表达式,它允许您编写更复杂的规则,它们是:

  1. required: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  2. requisite: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  3. sufficient: [success=done new_authtok_reqd=done default=ignore]
  4. optional: [success=ok new_authtok_reqd=ok default=ignore]

以下是现代 CentOS 7 系统的示例。让我们从 /etc/pam.d/postlogin PAM 文件中考虑这些规则:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

下面是 /etc/pam.d/smartcard-auth PAM 文件中的另一个示例配置:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.soaccount     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.sopassword    required      pam_pkcs11.sosession     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

总结

在这里插入图片描述

PAM 是一个功能强大的高级 API,它允许依赖于身份验证的程序向 Linux 系统中的应用程序提供真实用户。它功能强大,但理解和使用起来非常具有挑战性。在本文中,我们已经解释了如何在 Ubuntu 和 CentOS 中配置 PAM 的高级功能。如果您有任何问题或意见要分享,欢迎留言评论。

作者:岬淢箫声
日期:2023年10月24日
版本:1.0
链接:http://caowei.blog.csdn.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松管理Web服务器:Linux Apache技巧与技术

1 Apache的基本介绍 1.1 Apache的作用 curl -I www.qq.com # 可以查看使用的服务器类型以上服务器都是提供超文本传输协议的软件。常用的服务器类型&#xff1a;Apache、nginx、stgw、Tengine 1.2 Apache的安装 dnf install httpd.x86_64 -y1.3 Apache的启用 systemctl en…

云计算要学习哪些技术?

学习云计算需要涉及多个技术领域和相关的工具、平台和框架。以下是一个详细的介绍&#xff0c;帮助您了解学习云计算所需的技术。 1. 虚拟化技术 虚拟化是云计算的基础&#xff0c;因此了解虚拟化技术至关重要。学习虚拟化技术时&#xff0c;需要掌握以下知识点&#xff1a; …

Ajax 笔记/练习

Ajax 异步JavaScript和XML 作用 实现 HTML 在不整体刷新的情况下&#xff0c;通过后台服务器&#xff0c;请求数据并局部更新页面内容 操作流程 Ajax 使用 XMLHttpRequest 通过new 关键字可以创建XMLHttpRequest() 对象。 var req new XMLHttpRequest();方法和属性说明req.…

CI2454 2.4g无线MCU芯片应用

Ci2454集成MCU芯片 | Ci2454是一款集成无线收发器和 8 位 RISC&#xff08;精简指令集&#xff09;MCU 的SOC芯片。 #Ci2454芯片 集成MCU芯片# 中国芯片# 无线收发器特性&#xff1a; 工作在 2.4GHz ISM 频段 调制方式&#xff1a;GFSK/FSK 数据速率&#xff1a;2Mbps/1Mbps…

虚拟世界游戏定制开发:创造独一无二的虚拟体验

在游戏开发领域&#xff0c;虚拟世界游戏定制开发是一项引人注目的任务&#xff0c;旨在满足客户独特的需求和愿景&#xff0c;创造一个完全个性化的虚拟世界游戏。这种类型的游戏开发需要专业的技能、深刻的游戏开发知识和密切的与客户合作&#xff0c;以确保游戏满足客户的期…

金蝶云星空企业版v8.0内网穿透配置详解:实现便捷的异地远程访问

文章目录 前言1. 金蝶云星空企业版v8.0安装下载1.1 登录金蝶官网下载安装包1.2 常见的安装下载问题 2. 金蝶云星空配置SQL Sever数据库2.1 创建数据管理中心2.2 创建完成后在服务器登录管理站点 3. 下载安装注册cpolar3.1 公网访问测试 4. 固定连接公网地址 前言 金蝶云星空专注…

统信UOS技术开放日:四大领域全面接入AI大模型能力

1024是程序员的节日&#xff0c;10月24日&#xff0c;统信举办2023统信UOS技术开放日暨deepin Meetup北京站活动&#xff0c;发布与大模型同行的UOS AI、浏览器AI助手、邮箱AI助手、自然语言全局搜索、畅写在线等多项最新AI技术与产品应用。 统信软件高级副总经理、CTO、深度社…

Bootstrap的列表组相关知识

目录 01-列表组的相关基础知识02-一个简单的列表组示例03-激活或禁用列表组的一行或多行04-设置列表项的颜色05-给列表项添加徽章 01-列表组的相关基础知识 Bootstrap的list-group是一个用于创建列表组件的CSS类&#xff0c;通常用于显示一个项目列表&#xff0c;如导航菜单或…

DataX 数据迁移

1、前期准备 Linux系统 Python&#xff08;最好是2&#xff09; Jdk 1.8以上 2、安装Python2 --更新软件包 sudo apt update --安装python2 sudo apt install python2 --查看python版本 python2 --version 3、下载DataX Linux下载DataX wget http://datax-opensource.o…

制药企业固体制剂设备管理及维护要点

在制药企业的生产过程中&#xff0c;固体制剂设备是至关重要的一环。有效管理和维护这些设备对于确保生产质量、提高生产效率以及延长设备寿命至关重要。本文将从以下三个方面介绍制药企业固体制剂设备的主要类型、常见管理问题以及设备维护的关键要点。 制药企业固体制剂设备主…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进&#xff0c;跨文化交流变得越来越重要。在学术领域&#xff0c;英文论文的质量对于研究成果的传…

订水商城H5实战教程-03用户协议

目录 1 创建页面2 为文本组件增加事件3 检查用户协议是否勾选最终效果 我们上一篇介绍了打开首页时弹出登录窗口的功能&#xff0c;本篇我们实现一下用户协议。 1 创建页面 功能是点击用户协议的时候打开具体的协议内容&#xff0c;需要先创建一个页面。打开自定义应用&#x…

【FPGA】IIC协议通用主机接口的设计与实现详解

一、认识IIC IIC&#xff08;I2C&#xff09;协议是一种串行通信协议&#xff0c;用于连接微控制器和外围设备。IIC协议只需要两根信号线&#xff08;时钟线SCL和数据线SDA&#xff09;就能完成设备之间的通信&#xff1b;支持多主机和多从机通信&#xff0c;通过设备地址区分不…

C++栈、队列、优先级队列模拟+仿函数

目录 一、栈的模拟和deque容器 1.deque 1.1deque结构 1.2deque优缺点 2.stack模拟 二、队列的模拟 三、priority_queue优先级队列 1.优先级队列模拟 2.添加仿函数 一、栈的模拟和deque容器 在之前&#xff0c;我们学过了C语言版本的栈&#xff0c;可以看这篇文章 栈和…

java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0c;彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式&#xff0c;智…

香飘飘的想象空间:全面创新驱动外延与内涵双增长,未来可期

面对时常会发生代际更替的消费者主力群体&#xff0c;创新已经成为一种商业上的必须。 日前&#xff0c;香飘飘发布了三季报&#xff0c;数据显示&#xff0c;第三季度&#xff0c;香飘飘营业收入8.08亿元&#xff0c;同比增长20.41%。前三季度&#xff0c;香飘飘营收19.79亿元…

视频号视频提取小程序,快速下载视频号视频

​视频号提取小程序可以帮助用户方便地从视频号视频平台获取到自己喜欢的视频号内容。通过这个小程序&#xff0c;你可以快速搜索并提取出视频号&#xff0c;并进行相关的操作。 据悉视频下载bot小程序目前已经更名为【提取下载小助手】 使用视频号提取小程序有以下几个步骤&…

Kubernetes 通过 Deployment 部署Jupyterlab

概要 在Kubernetes上部署jupyterlab服务&#xff0c;链接Kubernetes集群内的MySQL&#xff0c;实现简单的数据开发功能。 前置条件 镜像准备&#xff1a;自定义Docker镜像--Jupyterlab-CSDN博客 MySQL-Statefulset准备&#xff1a;StatefulSet 简单实践 Kubernetes-CSDN博客…

学习vue3

一、入门 1.引入外部库 ①直接将所有的js都通过script标签引入到html文件中&#xff0c;所有的js资源在web页面中都能通用。 ②使用js引用js&#xff08;ES6&#xff09;&#xff0c;模块导入与导出 2.模块是只读引用 这段话是在解释 Vue.js 中的概念和用法。在 Vue.js 中&a…

从实时数据库转战时序数据库,他陪伴 TDengine 从 1.0 走到 3.0

关于采访嘉宾 在关胜亮的学生时代&#xff0c;“神童”这个称号如影随形&#xff0c;很多人初听时会觉得这个称谓略显夸张&#xff0c;有些人还会认为这是不是就是一种调侃&#xff0c;但是如果你听说过他的经历&#xff0c;就会理解这一称号的意义所在了。 受到教师母亲的影…