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

打造更安全的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.kler.cn/a/506802.html

相关文章:

  • LabVIEW与WPS文件格式的兼容性
  • Git学习笔记
  • UDP报文格式
  • Autodl转发端口,在本地机器上运行Autodl服务器中的ipynb文件
  • C 语言中二维数组的退化
  • Unity搭配VS Code使用
  • 为Hugo/Hexo设计的在线Markdown编辑器
  • Flutter 多终端测试 自定义启动画面​​​​​​​ 更换小图标和应用名称
  • RK3568-Linux应用学习记录
  • 复用类(2):代理、结合使用组合和继承
  • 三数之和力扣--15
  • Unity3d 实时天气系统基于UniStorm插件和xx天气API实现(含源码)
  • 音视频文件提供流式传输之HTTP Live Streaming (HLS)
  • SUN的J2EE与微软的DNA
  • 【设计模式】6大设计原则和23种设计模式
  • 【Linux】10.Linux基础开发工具使用(3)
  • mysql community server社区版M2 macbook快速安装
  • 安卓与苹果系统安全性之比较
  • ip属地是根据手机号还是位置
  • MySQL中like模糊查询如何优化?
  • 【伪随机数】关于排序算法自测如何生成随机数而引发的……
  • C语言变长嵌套数组常量初始化定义技巧
  • 【排错记录】免密、nginx、cgroup、sshd
  • css 原子化
  • iOS页面设计:UIScrollView布局问题与应对策略
  • 【promethues 9090占用端口】没有网络,如何杀掉9090端口暂用的进程