打造更安全的Linux系统:玩转PAM配置文件

在Linux系统中,用户认证是确保系统安全的关键步骤。PAM(可插拔认证模块)为我们提供了一个非常灵活的框架,帮助我们管理各种服务的认证过程。其中,/etc/pam.d目录是PAM配置的核心部分,这里存放了每个服务所需的认证规则文件。在这篇文章里,我们将一起探索 /etc/pam.d的重要性,并学习如何通过调整这些文件来进一步增强系统的安全性。

什么是PAM?

PAM是一种模块化的认证机制,允许管理员自定义系统和服务的认证流程。PAM的设计特点包括:

  • 灵活性: 各种认证功能通过模块实现,可以按需启用或禁用。
  • 模块化: 不同服务可以共享通用模块,减少重复配置。
  • 安全性: 支持多种安全策略,例如密码复杂性、多因素认证等。

/etc/pam.d的作用

/etc/pam.d目录存放了PAM 的配置文件,每个文件对应一个服务或程序,例如 sshdsudologin 等。这些文件定义了服务的认证规则,包括密码验证、账户检查、会话管理等内容。

常见文件和用途

文件名功能描述
login控制通过终端登录的认证方式
sshd控制SSH服务的认证方式
sudo控制使用 sudo提升权限时的认证方式
common-auth通用的身份验证模块,很多服务会引用它
common-password通用的密码规则模块,定义密码策略
common-account通用的账户管理模块,定义账户权限相关规则
common-session通用的会话管理模块,定义会话生命周期规则

如下图是Ubuntu 20.04/etc/pam.d目录下的文件:

PAM配置文件结构

每个 /etc/pam.d 配置文件由多行规则组成,格式如下:

模块类型  控制标志  模块路径  模块参数

字段解释

  1. 模块类型

    • auth:认证规则,如密码验证。

    • account:账户管理规则,如账户锁定检查。

    • password:密码管理规则,如密码复杂性要求。

    • session:会话管理规则,如资源限制或登录记录。

  2. 控制标志

    • required:必须成功,失败不会立即终止,但最终结果会失败。

    • requisite:必须成功,失败会立即终止认证。

    • sufficient:成功则认证通过,后续模块不再执行。

    • optional:成功或失败对整体认证无影响。

  3. 模块路径 通常为 /lib/security//usr/lib/security/ 下的PAM模块文件。

  4. 模块参数 用于定义模块的具体行为。

示例配置:/etc/pam.d/sshd

以下是一个典型的 sshd 配置文件:

auth       required     pam_env.so
auth       required     pam_unix.so
auth       required     pam_tally2.so deny=5 unlock_time=300
account    required     pam_unix.so
password   required     pam_unix.so
session    required     pam_limits.so
session    optional     pam_motd.so
session    required     pam_unix.so
配置解读
  • pam_env.so:加载用户环境变量。

  • pam_unix.so:使用传统的UNIX密码验证。

  • pam_tally2.so:限制登录失败次数(如连续 5 次失败锁定账户5分钟)。

  • pam_limits.so:加载系统资源限制。

  • pam_motd.so:显示登录时的消息。

如何增强系统安全性?

通过合理配置 /etc/pam.d 文件,可以显著提升系统安全性。以下是一些推荐的实践:

1. 限制登录失败次数

使用 pam_tally2 模块限制登录失败次数,防止暴力破解。

auth required pam_tally2.so deny=5 unlock_time=300
  • deny=5:连续失败5次后锁定账户。

  • unlock_time=300:5分钟后自动解锁。

2. 强制密码复杂性

使用 pam_pwquality 模块强制密码复杂性要求。

password requisite pam_pwquality.so retry=3 minlen=12 difok=4
  • retry=3:用户有3次机会输入合格密码。

  • minlen=12:密码至少12个字符。

  • difok=4:新密码与旧密码至少有4个字符不同。

还有一些其他比较少用的参数:

  • dcredit=N:定义用户密码中必须包含多少个数字;

  • ucredit=N:定义用户密码中必须包含多少个大写字母;

  • lcredit=N:定义用户密码中必须包含多少个小些字母;

  • ocredit=N:定义用户密码中必须包含多少个特殊字符(除数字、字母之外)

3. 限制资源使用

通过 pam_limits.so 限制用户的系统资源使用,防止资源滥用。

session required pam_limits.so

结合 /etc/security/limits.conf 文件,可以配置用户的最大文件数、进程数等。

4. 显示警告信息

通过 pam_motd.so 显示登录警告或公告信息。

session optional pam_motd.so

将警告信息写入/etc/motd,如:

Unauthorized access is prohibited.

排查 PAM 配置问题

错误的PAM配置可能导致用户无法登录或服务异常。以下是一些排查建议:

  1. 检查日志文件PAM的错误信息会记录在 /var/log/auth.log/var/log/secure中。
tail -f /var/log/auth.log
  1. 使用调试模式 某些服务支持调试模式,可以输出详细的 PAM 调用信息。例如:
sshd -ddd
  1. 备份配置文件 在修改 /etc/pam.d 文件之前,务必先备份原始文件。
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak

总结

/etc/pam.d 是Linux系统认证的核心,通过合理配置这些文件,可以有效提升系统的安全性和可控性。从限制登录失败次数到强制密码复杂性,PAM提供了丰富的功能来保护系统。希望本文能帮助你掌握 /etc/pam.d 的配置技巧,为你的Linux系统打造更加坚固的安全防线!

推荐阅读


  • Ansible实战:如何正确选择command和shell模块?
  • 运维效率倍增!Ansible Copy 模块必知必会操作
  • 如何在Ansible中轻松实现复杂SSH跳转?这个参数搞定
  • Ansible Setup模块实战,如何使用Setup模块收集主机信息
  • 从入门到精通:Ansible Shell 模块的应用与最佳实践
  • 深入了解Ansible配置与主机清单:轻松管理自动化任务

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

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

相关文章

LLM - 大模型 ScallingLaws 的 Causal/Masked (PLM) 目标系数差异 教程(2)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

本地部署Web-Check网站检测与分析利器并实现远程访问实时监测

文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 本文我们将详细介绍如何在Ubuntu系统上使用Docker部署Web-Check&#xf…

森林网络部署,工业4G路由器实现林区组网远程监控

在广袤无垠的林区,每一片树叶的摇曳、每一丝空气的流动,都关乎着生态的平衡与安宁。林区监控正以强大的力量,为这片绿色家园筑起一道坚固的防线。 工业 4G 路由器作为林区监控组网的守护者,凭借着卓越的通讯性能,突破…

Django框架:python web开发

1.环境搭建: (a)开发环境:pycharm (b)虚拟环境(可有可无,优点:使用虚拟环境可以把使用的包自动生成一个文件,其他人需要使用时可以直接选择导入包&#xff…

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 :VMware Workstation 17 Pro ubuntu版本:ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware,点击顶部的“编辑"菜单,打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…

【Unity】unity3D 调用LoadSceneAsync 场景切换后比较暗 部门材质丢失

解决方法:两个场景使用同样灯光 现象 直接进入第二个场景是可以正常显示 调用LoadSceneAsync来切换后,第二个场景出现比较暗的情况 解决方法:两个场景使用同样灯光,在loading 的场景中加入灯光。 Light—Directional Light 如果…

R5天气识别学习笔记

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 LSTM-天气识别预测 雨天百分比数据预处理模型训练结果可视化个人总结 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyp…

SpringMVC (1)

目录 1. 什么是Spring Web MVC 1.1 MVC的定义 1.2 什么是Spring MVC 1.3 Spring Boot 1.3.1 创建一个Spring Boot项目 1.3.2 Spring Boot和Spring MVC之间的关系 2. 学习Spring MVC 2.1 SpringBoot 启动类 2.2 建立连接 1. 什么是Spring Web MVC 1.1 MVC的定义 MVC 是…

【混合开发】CefSharp+Vue 解决Cookie问题

问题表现 使用Element-admin架构搭建Vue前端项目,在与CefSharp搭配时,出现无法使用cookie的问题。 无法将token存入cookiecookie无法被读取 如下图,Cookies下显示file://。 正常的Cookies显示,Cookies显示为http://域名&#x…

jmeter事务控制器-勾选Generate Parent Sample

1、打开jmeter工具,添加线程组,添加逻辑控制器-事务控制器 2、在事务控制器,勾选Generate parent sample:生成父样本;说明勾选后,事务控制器会作为父节点,其下面的请求作为子节点 3、执行&#…

【Linux】进程间通信IPC

目录 进程间通信 IPC 1. 进程间通信方式 2. 无名管道 2.1 特点 2.2 函数接口 2.3 注意事项 3. 有名管道 3.1 特点 3.2 函数接口 3.3 注意事项 3.4 有名管道和无名管道的区别 4. 信号 4.1概念 4.2信号的响应方式 4.3 信号种类 4.4 函数接口 4.4.1 信号发送和挂…

SpringMVC——原理简介

狂神SSM笔记 DispatcherServlet——SpringMVC 的核心 SpringMVC 围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器(即不同的Servlet)。根据请求的url,分配到对应的Servlet接口。 当发起请求时被前置的控制…

openssl s_server源码剥离

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

算法库里的heap算法,仿函数和模版进阶(续)

文章目录 算法库里面的heap仿函数模版非类型模版参数array特化函数模版的特化类模版的特化 分离编译 算法库里面的heap sort_heap是算法库里的函数,前提要求是堆才能排序is_heap判断是否是堆make_heap建堆算法 int main() {int a[5] { 10,19,27,39,19 };std::vec…

具身导航如何利用取之不尽的网络视频资源!RoomTour3D:基于几何感知的视频-指令训练调优

作者:Mingfei Han, Liang Ma, Kamila Zhumakhanova, Ekaterina Radionova, Jingyi Zhang, Xiaojun Chang, Xiaodan Liang, Ivan Laptev 单位:穆罕默德本扎耶德人工智能大学计算机视觉系,中山大学深圳校区,悉尼科技大学ReLER实验室…

解决报错:未定义标识符 “M_PI“

问题&#xff1a; 使用C编译&#xff0c;已经用#include <cmath>包含了头文件&#xff0c;但是在使用M_PI时依旧报错说未定义 原因&#xff1a; 在某些编译器中&#xff0c;<cmath> 库中的 M_PI 是一个条件宏&#xff0c;需要 _USE_MATH_DEFINES 宏被定义才能使用。…

TensorFlow深度学习实战(5)——神经网络性能优化技术详解

TensorFlow深度学习实战&#xff08;5&#xff09;——神经网络性能优化技术详解 0. 前言1. 识别 MNIST 手写数字1.1 MNIST 数据集1.2 独热编码1.3 定义神经网络1.4 训练神经网络 2. 构建深度神经网络3. 添加 Dropout 提高模型泛化能力4. 不同优化器对模型性能的影响5. 训练 ep…

代码随想录算法训练营day31

代码随想录算法训练营 —day31 文章目录 代码随想录算法训练营前言一、 56. 合并区间二、738. 单调递增的数字三、968.监控二叉树总结 前言 今天是算法营的第31天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#xff1a; ● 56. 合并区间 ● 738.单调递增的数字 …

通过maven命令上传jar包至nexus v3.7.1

1 nexus和maven的简介 1.1 nexus ‌Nexus‌是由Sonatype公司开发的一款强大的制品仓库管理软件&#xff0c;主要用于搭建和管理各种类型的仓库&#xff0c;包括Maven、NuGet、npm等。Nexus支持多种仓库类型&#xff0c;如代理仓库&#xff08;代理互联网中的中央仓库&#xf…