使用 Linux-PAM 增强 Linux 身份验证

2023-10-15

在上一篇文章中,我们讨论了Linux iptables 防火墙,还有人问认证问题。今天我们来聊聊Linux中用于身份验证的强大框架,那就是Linux-PAM。

PAM or 可插拔的身份验证模块是位于 Linux 应用程序和 Linux 本机身份验证系统之间的管理层。

 

 

Linux-PAM 的好处

您的系统上有许多程序使用 PAM 模块,例如 su、passwd、ssh、login 和其他服务。我们将讨论其中的一些。

PAM 的主要重点是验证您的身份users.

Linux 中的身份验证是通过将 /etc/shadow 文件中的加密密码与输入的密码进行匹配来完成的。

我们的系统上有许多服务需要身份验证,例如 SSH、FTP、远程登录、IMAP, 和许多其他服务。因此,除了 /etc/shadow 文件之外,我们还会维护很多身份验证文件,如果这些身份验证文件之间的数据不一致,可能会造成严重的问题。

帕姆来了。 Linux-PAM 为您的服务提供统一的登录系统。

要检查您的程序是否使用 Linux-PAM:


$ ldd /bin/su  

您应该看到 libpam.so 库。

 

Linux-PAM 配置

Linux-PAM的配置位于目录/etc/pam.d/中。

某些 PAM 模块需要具有 PAM 配置的配置文件才能运行。您可以在 /etc/security 中找到配置文件。

如果 PAM 配置错误,可能会导致严重问题。

 

PAM服务

PAM 服务的四种类型:

  • 认证服务模块。
  • 账户管理模块。
  • 会话管理模块。
  • 密码管理模块。

任何需要身份验证的应用程序都可以使用服务名称向 PAM 注册。

您可以列出使用 Linux-PAM 的 Linux 服务。


$ ls /etc/pam.d/  

如果您打开任何服务文件,您将看到该文件分为三列。第一列是管理组,第二列是控制标志,第三列是使用的模块(so文件)。


$ cat /etc/pam.d/sshd  

account    required     pam_nologin.so  

账户为管理组,必填为控制标志,使用的模块为pam_nologin.so。

您可能会发现第四列,用于模块参数。

 

管理组

您将在 PAM 服务文件中看到四个管理组:

  • 授权组:它可以验证用户
  • 账户组:控制对服务的访问,例如您应该使用该服务的次数。
  • 会议组:负责服务环境。
  • 密码组:用于密码更新。

 

控制标志

我们在服务文件中有四个控制标志:

  • 必要条件: 最强的旗帜。如果未找到必需的模块或加载失败,它将停止加载其他模块并返回失败。
  • Required:与 Requirement 相同,但如果模块因任何原因加载失败,则继续加载其他模块,并在执行结束时返回失败。
  • 充足的:如果模块返回成功,则不再需要其他模块的处理。
  • Optional:在失败的情况下,模块堆栈继续执行,并且返回代码被忽略。

 

模块顺序

顺序很重要,因为每个模块都依赖于堆栈中的前一个模块。

如果您尝试使用如下配置登录:


auth required pam_unix.so
auth optional pam_deny.so  

这可以正常工作,但是如果我们像这样改变顺序会发生什么:


auth optional pam_deny.so
auth required pam_unix.so  

没有人可以登录,因此顺序很重要。

 

PAM模块

您的系统上有一些您应该了解的 PAM 内置模块,以便您可以完美地使用它们。

 

pam_succeed_if 模块

该模块允许指定组的访问。您可以像这样验证用户帐户:


auth required pam_succeed_if.so gid=1000,2000  

上面这行表示只允许ID为1000或2000的组中的用户登录。

您可以使用 uid 作为用户 ID。


auth requisite pam_succeed_if.so uid >= 1000  

在本例中,任何大于或等于1000的用户id都可以登录。

您还可以将其与 ingroup 参数一起使用,如下所示:


auth required pam_succeed_if.so user ingroup mygroup  

只有名为 mygroup 的组中的人员才能登录。

 

pam_nologin 模块

该模块仅允许 root 在文件可用时登录。


/etc/nologin  

auth required pam_nologin.so  

您可以使用此行修改登录服务文件并创建/etc/nologin 文件,以便只有root 可以登录。

你可以使用它身份验证、帐户管理组。

 

pam_access 模块

该模块的工作方式与 pam_succeed_if 模块类似,只是 pam_access 模块检查来自网络主机的日志记录,而 pam_succeed_if 模块则不关心。


account required pam_access.so accessfile=/etc/security/access.conf  

您可以在文件中键入规则,如下所示:


/etc/security/access.conf  

+:mygroup
-:ALL:ALL  

上述规则规定只有mygroup用户可以登录,其他用户不能登录。

其中加号表示允许,减号表示拒绝。

该模块与身份验证、帐户、会话、密码管理组。

 

pam_deny 模块

您可以使用此模块来限制访问。它总是会返回一个非OK。

您可以在模块堆栈的末尾使用它来保护自己免受任何错误配置的影响。

如果您在模块堆栈的开头使用它,您的服务将被禁用:


auth required pam_deny.so
auth required pam_unix.so  

你可以使用它身份验证、帐户、会话、密码管理组。

 

pam_unix 模块

您可以使用此模块根据 /etc/shadow 文件检查用户的凭据。


auth required pam_unix.so  

您将看到该模块在系统中的许多服务中使用。

你可以使用它身份验证、会话、密码管理组。

 

pam_localuser 模块

您可以使用此模块检查用户是否在 /etc/passwd 中。


account sufficient pam_localuser.so  

你可以使用它身份验证、会话、密码、帐户管理组。

 

pam_mysql 模块

您可以使用MySQL数据库使用 pam_mysql 模块作为后端。

你可以这样使用它:


auth sufficient pam_mysql.so user=myuser passwd=mypassword host=localhost db=mydb table=users usercolumn=username passwdcolumn=password  

这里我们使用 pam_mysql 的参数验证用户。

如果您的系统上没有,您可以像这样安装:


$ yum install libpam-mysql  

我们使用这个模块身份验证、会话、密码、帐户管理组。

 

pam_cracklib 模块

如今,强密码是必须的。该模块确保您将使用强密码。


password required pam_cracklib.so retry=4 minlen=12 difok=6  

此示例确保:

密码最小长度 = 12

四次选择强密码;否则,它将退出。

您的新密码必须比旧密码有六个新字符。您可以将此模块与password管理组。

 

pam_rootok 模块

该模块检查用户ID是否为0,这意味着只有root用户才能运行该服务。


auth sufficient   pam_rootok.so  

我们使用此模块来确保仅允许 root 用户使用特定服务,并且您可以将其与auth管理组。

 

pam_limits 模块

您可以使用此模块来设置系统资源的限制。它甚至会影响 root 用户。

限制配置位于 /etc/security/limits.d/ 目录中。


session  required  pam_limits.so  

您可以使用此模块来保护您的系统资源,并且可以将其与session管理组。

/etc/security/limits.conf 文件中的限制可以是硬限制,也可以是软限制。

Hard:用户无法更改其值,但 root 可以。

Soft: 普通用户可以更改它。

限制可能是 fsize、cpu、nproc、nproc、数据和许多其他限制。


@mygroup        hard    nproc           50
myuser          hard    cpu           5000  

mygroup 成员的第一个限制,将每个成员的进程数设置为 50。

第二个限制是针对名为 myuser 的用户,将 CPU 时间限制为 5000 分钟。

您可以编辑 /etc/pam.d/ 中的任何 PAM 服务文件,并使用您想要的模块以您想要的方式保护您的服务。

我希望您发现使用 Linux PAM 模块既简单又有用。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linux-PAM 增强 Linux 身份验证 的相关文章

  • 测试您的 Python 应用程序

    测试您的 Python 应用程序 学习路径 技能 测试 Python 代码 PyTest Mocking 没有一个开发人员是完美的 我们都会犯错误 如果不加以控制 其中一些错误可能会导致故障或错误 而恢复成本可能非常昂贵 测试您的代码有助于
  • 学习 Python 编程的 11 个初学者技巧

    目录 Make It Stick 提示 1 每天编码 技巧 2 写下来 提示 3 互动 秘诀 4 休息一下 提示 5 成为 Bug 赏金猎人 Make It Collaborative 提示 6 让自己周围都是正在学习的人 秘诀 7 教学

随机推荐

  • Python 对象的浅复制与深复制

    目录 制作浅副本 制作深层副本 复制任意Python对象 3 件事要记住 Python 中的赋值语句不会创建副本对于对象 它们仅将名称绑定到对象 为了不可变的对象 通常没有什么区别 但对于与可变的对象或可变对象的集合 您可能正在寻找一种方法
  • Pythonic 壁纸包

    通过以下方式表达您对 Python 的热爱 The Pythonic Wallpapers Pack 原价 9 99 美元 今日仅需 4 99 美元 使用这些为您的计算机 手机或平板电脑定制的独特壁纸 向世界展示您是 Python 达人 你
  • 理解 Python print() 函数:超越 Hello World

    您可能想知道 为什么要写一个关于简单打印功能的完整教程 但不要被欺骗 谦卑者print 函数虽然使用简单 但却是 Python 工具库中不可或缺的工具 本教程将引导您了解使用print 函数 探索其语法和参数 然后深入研究更高级的主题 您将
  • 在 Python 中删除字符串中标点符号的 5 种方法

    Python 提供了多种删除标点符号的方法 这里的目标是将字符串中的每个标点字符替换为空字符串 让我们为所有示例考虑以下原始字符串 original string Hello World Let s test some punctuatio
  • PyQt5 教程 – Python GUI 编程示例

    PyQt5 是用 Python 构建 GUI 应用程序时最常用的模块之一 这是因为它的简单性 正如您将看到的那样 鼓励开发人员使用 PyQt5 的另一个重要功能是 PyQt5 设计器 它使得在短时间内开发复杂的 GUI 应用程序变得非常容易
  • Python GUI 示例(Tkinter 教程)

    在本教程中 我们将通过使用 Tkinter 包编写一些 Python GUI 示例来学习如何开发图形用户界面 Tkinter 包作为标准包随 Python 一起提供 因此我们不需要安装任何东西即可使用它 Tkinter 包是一个非常强大的包
  • Python 中的凯撒密码(文本加密教程)

    密码学涉及将一条信息 以纯文本形式 加密或编码为一种看起来乱码且在普通语言中毫无意义的形式 此编码消息 也称为密文然后 目标接收者可以使用传达给最终用户的解码技术 通常与私钥一起 将其解码回纯文本 凯撒密码是我们将在本教程中重点介绍的最古老
  • 安装和使用非 Composer Laravel 包

    如果你想在 Laravel 中使用包 你只需在 Composer json 文件中添加一行即可完成工作 这是因为该包在 packagist org 中可用 如果您要使用的包是非 Composer Laravel 包怎么办 可能在 git 存
  • 文本处理中 Awk 命令的 30 个示例

    在上一篇文章中 我们谈到了sed命令我们看到了许多在文本处理中使用它的例子 我们看到了它在这方面的优点 但它有一些局限性 有时您需要一些强大的功能 让您能够更好地控制数据处理 这是哪里awk 命令进来 awk 命令或具体的 GNU awk
  • 安装、保护、访问和配置 Linux 邮件服务器 (Postfix)

    如果您想发送或接收电子邮件 您应该有一个邮件服务器 在这篇文章中 我们将讨论 Linux 邮件服务器以及 SMTP 简单邮件传输协议 以及其他邮件相关协议 例如邮局协议 POP 和互联网消息访问协议 IMAP 的工作原理以及它们之间的关系他
  • 了解和使用 Linux Subshel​​l(实用指南)

    子shell是由shell启动的子进程 shell本质上是一个命令行解释器 它共享父 shell 的属性 但在单独的进程空间中运行 子 shell 为执行命令和运行脚本提供了隔离性和灵活性 子 shell 通常用于任务自动化 并行执行和模块
  • 加速您的 Python 代码:Numba 实用指南

    Numba 是一个开源 JIT 编译器 可以翻译以下代码的子集Python and NumPy代码转换为快速机器代码 它通过使用行业标准的 LLVM 编译器库并优化执行速度来加速数值计算 在本教程中 我们将探索如何使用 Numba 使 Py
  • Linux 正则表达式教程(Sed 和 AWK)示例

    为了成功地与Linux sed编辑和awk 命令在 shell 脚本中 您必须了解正则表达式或简称正则表达式 由于正则表达式有很多引擎 我们将使用 shell 正则表达式并了解 bash 在使用正则表达式方面的强大功能 首先 我们需要了解什
  • 10 多个在 Linux 中终止进程的示例

    在本教程中 我们将通过多个示例讨论如何终止 Linux 中的进程 在大多数情况下 就像输入 kill 命令然后输入进程 ID 通常缩写为 PID 一样简单 正如你所看到的 我们杀死了一个ID为1813的进程 如果您是 Windows 用户
  • 如何安装和配置 Squid Linux 代理服务器

    Linux代理服务器或代理服务器通常是保存访问过的网页以供以后请求的服务器 因此如果您尝试访问同一个网页或其他任何人 您将从代理服务器获取页面 这非常有用 它使网上冲浪速度更快并减少流量 这意味着成本更低 缓存服务器可以将外部流量减少至 4
  • 使用 Sed 命令进行文本替换的实际示例

    在本教程中 您将深入研究如何使用实际示例sed命令可用于文本替换 在本教程结束时 您将对以下方面有更深入的了解sed及其在文本替换中的实际应用 目录 hide 1 将 URL 中的 HTTP 更改为 HTTPS 2 用下划线替换空格 3 更
  • 数据帧过滤:在 Pandas 查询中使用正则表达式

    The 查询 方法Pandas 中允许您根据查询表达式过滤 DataFrame 行 将正则表达式 regex 的强大功能与query 方法允许更高级和灵活的查询 本教程将指导您完成使用正则表达式的过程query 熊猫中的方法 目录 hide
  • 使用 to_xml 将 Pandas DataFrame 转换为 XML 文件

    The to xml方法允许您将 DataFrame 转换为 XML 格式 在本教程中 我们将逐步完成导出Pandas使用 DataFrame 到 XML 文件to xml method 目录 hide 1 Pandas to xml 语法
  • 使用 to_csv 将 Python Pandas DataFrame 导出到 CSV 文件

    The to csv函数允许您从a写入数据PandasDataFrame 到 CSV 文件 当您需要保存 共享或导出数据以便在不同的环境或应用程序中进一步使用或分析时 这非常有用 它带有多个参数 可帮助您根据需要自定义流程 例如 您可以选择
  • 使用 Linux-PAM 增强 Linux 身份验证

    在上一篇文章中 我们讨论了Linux iptables 防火墙 还有人问认证问题 今天我们来聊聊Linux中用于身份验证的强大框架 那就是Linux PAM PAM or 可插拔的身份验证模块是位于 Linux 应用程序和 Linux 本机