Shadow Password 文件

2025年3月17日 | 阅读 14 分钟

什么是影子密码文件?

在 Linux 操作系统中,/etc/shadow 是一个系统文件,用于存储加密的用户密码,以增强安全性。此文件的访问权限仅限于 root 用户,限制了未经授权的访问,并降低了被恶意实体入侵的风险。

传统上在 /etc/passwd 文件中存储密码的方式存在安全漏洞,这使得 Linux 系统成为未经授权访问的潜在目标。为避免此风险的方法是,现代 Linux 系统现在以更安全的方式利用 /etc/shadow 文件存储用户密码。

加密密码通常存储在 /etc/shadow 中,而 /etc/passwd 通常存储用户账户信息但不包含密码。

/etc/passwd 和 /etc/shadow 的身份验证

通过使用 /etc/shadow 文件,可以防止 Linux 系统中的身份验证违规,该文件在账户级别上加强了访问控制。该文件作为安全密码的权威来源,存储其散列值以及其他与密码相关的元素。

在任何密码学系统中,明文首先通过哈希函数(单向函数)转换为哈希数据。存储为长字符串(即密码)的内容包含哈希算法、哈希密码和用于防止学习哈希密码可能性的可选盐值。

在旧的 Linux 系统方式下,密码写在名为 /etc/passwd 的文件中,其中包含用户名和密码。此 Linux AS 因此提供服务,默认情况下,这些服务是待办事项列表、好友、联系人和约会跟踪。它属于 root 账户,因此只能由 root 或具有 sudo 权限的用户进行更改,并且所有系统用户都可以读取其内容。

在 /etc/passwd 文件中,每个密码都表示为加密字符串。这些密钥通过哈希函数进行哈希处理,没有嵌入密钥特征,使其无法解码。在这方面,登录时,系统会将 /etc/password 文件中的内容与使用密钥或盐值以及密码哈希进行加密进行比较。

如果另一用户在达到容量限制时尝试访问系统,系统会自动拒绝其他用户访问。因此,解决密码重用这一长期存在的安全问题以及恶意行为者日益增加的彩虹表使用以破解密码哈希至关重要。用户必须了解缓解这些风险并防止潜在安全漏洞的解决方案。

/etc/shadow 文件是身份验证机制级别账户的重要工具,它对文件级别的更严格的访问控制产生影响。在此,完整的实际密码集安全地以加密形式保存,并提供辅助密码数据,例如复杂密码和大写密码的提示。

哈希函数通过明文密码的单向哈希使其成为可能。存储的密码是长问题的字符序列,每个问题都涉及数学算法、该密码的数学解决方案,以及可选的盐值,盐值在寻址过程中引入了额外的随机性。

/etc/shadow 只有 root 用户(可以称为 Linux 管理员或超级用户账户)拥有,并且其所属的 shadow 组有权访问它。相反,/etc/passwd 通常被普遍认为是任何人都可以访问的文件,它被各种工具用来验证所有权和身份验证日期。

相反,由于密码不是以明文形式存储,因此解密密码需要了解哈希字符串和涉及的哈希算法。因此,坏人将不得不进行暴力破解攻击,他一次尝试所有组合,并随着每一次尝试成比例地移动,一旦获得合适的哈希值,就应该与数据库中存储的哈希值匹配。

对影子密码文件的需求

这是最繁琐和复杂的机制之一,它作为阻止非法访问的特性,在很大程度上削弱了旧的 '/etc/passwd' 文件未经授权删除的能力。

/etc/passwd 文件本身已经存在一个安全的存储密码信息的机制。对影子密码文件的需求源于将密码存储在此文件中的风险。虽然 /etc/passwd 中的密码使用随机生成的密钥或加密进行加密,但此密钥可以与编码密码以及哈希函数一起存储,总共包含一到 4096 字节的密钥。

尽管如此,尽管 /etc/passwd 努力提高安全性,但它仍然容易受到未经授权的更改。最重要的规则是通过密码哈希实现的。但是,可供所有人读取的 /etc/passwd 文件对黑客来说很有吸引力。更重要的是,用于加密的 (DES) 算法是一个基础算法,它在过去也被淘汰了,将主要的安全性问题抛到了一边。

在使用密码破解工具时,黑客能够识别 DES 密码的漏洞,尤其是在它们是由于密码使用不当或简单而导致的。使用字典攻击等元素,他们使用一种硬猜策略,该策略涵盖了所有可能的哈希变体,这些变体都是同样常见的密码,并已经转换了 2,197 次。

当黑客攻击使用弱密码(例如“1234567”或“password”)的系统时,他们可以在几小时内登录。

为了尽量减少风险,运行者可以使用 /etc/passwd 文件并将密码无限转移到 /etc/shadow,这仅允许拥有系统 root 目录访问权限的人。传统的 /etc/passwd 文件将被保留,因为它包含了大量用户的信息,例如用户名、用户标识符、组标识符以及用户主目录的绝对路径。

作为此讨论的一部分,下一个重点是加密密码的情况,以及附加的详细信息,包括密码有效期、两次密码更改之间的最小天数以及密码的最大有效期,这些也存储在影子密码文件中。

root 用户和属于该用户的进程可以访问影子密码文件,以及从私营公司到其他地方的位置。这种严格的安全协议加强了防火墙,以防止入侵//篡改//查找指向 /etc/passwd 的用户的 I//IP 地址列表。

影子密码文件的格式

Shadow Password 文件结构是每行一个密码行(每个用户账户),类似于 /etc/passwd 上的用户密码文件。通常,第一行是创始人账户,然后是操作系统、常规用户账户和其他账户。

文件中的每一行都包含九个字段,用冒号分隔

  1. 用户名:这代表实际的用户账户,也是系统识别的名称。
  2. 加密密码:这象征着以 $type$salt$hashed 格式存储的哈希密码,其长度范围为八到十二个字符。
  3. 上次更改密码日期:显示上次更改密码的时间 - 自 1970 年 1 月 1 日起。显示年龄和该日期是识别密码强度的一种便捷方式。
  4. 最小密码年龄:表示密码更改后防止账户被未经授权使用的所需天数。
  5. 最大密码年龄:表示在用户必须更改密码之前的天数。
  6. 警告期:指定密码的登录日期,从该日期开始,用户将在几天内收到更改密码的提醒,直到过期。
  7. 不活动期:推断自 1970 年 1 月 1 日以来已过天数。从该计数中减去用户账户不活动的数量。
  8. 过期日期:指示账户过期的日期或关闭日期。
  9. 未使用:该区域标为空白,而未来可能会有用途。
  • 应该注意的是,应避免对影子密码文件进行更改,例如手动编辑。
  • 下面是对影子密码文件格式中每个字段的详细解释。

/etc/shadow 文件的格式结构如下:每行代表一个单独的用户账户,包含九个字段,用冒号分隔

让我们详细了解 /etc/shadow 文件的每个字段。这些字段包括

  1. 用户名
  2. 加密密码
  3. 密码更改频率。
  4. 设备将不要求更改密码的最小期间。
  5. 密码不允许更新的天数。
  6. 显示更多天数以提醒用户其密码即将过期。
  7. 密码自动过期前的天数,账户将被禁用。
  8. 账户过期日期
  9. 保留字段

1. 用户名

  • 此字段代表登录字段,也是链接 /etc/shadow 文件和 /etc/passwd 文件的字段。
  • 与用户相关的其他登录信息已编码并存储在 /etc/passwd 字段下,但不包括密码。
  • 当创建一个新用户账户时,它们的用户名字段信息会同时包含在 /etc/passwd 和 /etc/shadow 文件中。

2. 加密密码

  • 此存储通过加密形式的编码来保护密码。
  • /etc/shadow 文件中用于密码加密的哈希算法通常是 SHA-512,但具体算法可能因系统配置和安全策略而异。
  • SHA-512 对密码以及随机生成的盐值进行哈希处理,这一过程类似于一种古老的语言技术,确保即使相同的密码也会产生唯一的加密哈希值。

3. 控制登录

Linux 系统在登录时不会允许您输入空白密码。如果任何未经授权的用户或服务尝试在没有密码身份验证或拥有空密码的情况下登录,系统将拒绝该用户访问。此字段可以仅用于表示用户登录,其值为非密码。后者是加密的。例如,如果此属性包含一个像 (!) 这样的令牌,则相应的账户将被明确锁定,因此用户或服务将无法登录到资源或位置。

正如代码中的两行所暗示的,它们的作用(写成字符 ! 和行 *)代表开放式密码。但是,它们之间存在区别:对全球问题的误解可能导致国际摩擦,甚至可能发生战争冲突。作为用户账户解锁的预防性常见事件,可以通过 passwd 命令为这个可选字段设置密码。

Shadow Password File

锁定的服务账户

上次更改密码的日期

有关每个用户上次更改密码的信息存储在 /etc/shadow 文件中,以自 1970 年 1 月 1 日用户密码更新以来经过的天数为单位进行加密。例如,将用户密码更改为 2022 年 3 月 10 日,时间戳字段中记录的天数将为 18979(这是通过从 1970 年 1 月 1 日到 2022 年 3 月 10 日的天数计算得出的)。

要从日期转换为天数或从天数反推到日期,您将使用的命令取决于操作系统。

此命令会清除所有参数,立即完全显示当前日期。

要在 Unix/Linux 系统上计算从 1970 年 1 月 1 日到当前日期的天数,您可以使用此命令

下图显示了上述命令及其输出

Shadow Password File

两次密码更改之间的最短所需天数

“设置两次密码更改之间的最短所需天数”字段确定了用户密码不能更改的最短天数。登录表单应用程序提供到期期限,以防用户不允许在指定此处的期限内更改密码。因此,如果该值设置为 0(零),用户将有机会立即更改密码。

两次密码更改之间的最大允许天数

“两次密码更改之间的最大允许天数”参数设置了密码修改之间的最大可接受持续时间。在用户更改密码后,他/她必须在为此目的分配的字段中规定的期限到期之前再次更改密码。它字面意思是一个密码可以授予网站/应用程序访问权限的有限时间。它不会对用户施加任何强制性限制,要求用户保留密码一段时间。

显示密码过期消息之前的日数

此参数通过提前特定天数弹出密码的过期消息来充当截止标记。当更改密码的天数等于或低于当前字段中指定的日数时,用户将收到一个弹出窗口,提醒他/她更改密码。

密码过期后帐户可以禁用多少天

前者将以密码被视为有效的月份结束,帐户将被禁用。系统不允许用户在 7 天后不更改旧密码,而是将旧密码标记为过期密码。此类具有过期密码的用户帐户将在此不活动期届满后自动被系统禁用。这将有助于防止未经授权访问数据和应用程序。

账户过期日期

此变量用于在指定时间终止帐户。日期转移后,用户将无法再从此字段登录。日期表示自 1970 年 1 月 1 日起的绝对值。例如,将帐户过期日期设置为 2018 年 6 月 28 日,则数字为 17710。如果未设置过期日期,则帐户将保持活动状态。

保留字段

最后一个字段用作占位符,以供将来可能使用。虽然目前它仍然是空的,但它包含在文件结构中,以适应任何即将来的数据或功能。该字段在文件格式化过程中通常留空,为系统增强或未来的更新保持灵活性。

通常在影子密码文件中使用的命令包括 -

将建立与支持小组和精神科医生的联系,以确保可持续的康复。

为了设置密码过期,“root”用户使用“chage”命令。

我们使用 pwck 工具来检查我们用户的密码文件的真实性。此命令执行以下任务

  1. 确保数据来自授权用户和经过身份验证的人员。
  2. 确保 /etc/passwd 和 /etc/shadow 中的条目保持正常格式并包含正确的信息。
  3. 要求删除格式不正确或包含无法修复的事实错误日志条目。

/etc/shadow 文件在 Linux 中的解释及示例

本文档概述了 Linux 中 /etc/shadow 文件的通用解释,并提供了示例。它解释了 /etc/shadow 文件的概念以及它到底存储什么。熟悉 /etc/shadow 文件是高效执行 Linux 账户管理的基本组成部分。

过去,'/etc/passwd' 文件是 Linux 系统上所有登录信息存储的地方。然而,由于多种原因,这种做法被采用 /etc/shadow 文件所取代。

/etc/passwd 的局限性

  1. 然而,/etc/passwd 文件只为密码数据提供一个字段;因此,容纳其他与密码相关信息的空间受到阻碍。
  2. 事实上,像 DES 这样的基本加密技术是可以被破解的,黑客可以利用这一点来破解密码。
  3. /etc/passwd 文件对任何本地用户都开放查看,这意味着所有这些用户都可以窥探加密的密码,从而暴露用户的敏感信息。

/etc/shadow 的优点

  1. /etc/shadow 文件比只有两个字段的 /etc/passwd 结构更健壮,因为它能够存储九个字段的加密密码和其他密码信息。
  2. 通过实施先进的加密算法和可更新的功能,它确保安全可靠的交易和服务。
  3. 最重要的一点是,/etc/shadow 文件只能由 root 用户读取,因此密码数据受到保护,未经授权的用户无法访问。

/etc/shadow 文件的权限

与 /etc/passwd 文件相比,/etc/shadow 文件的权限集有所不同。用户可以编辑 /etc/passwd 中的信息,但 /etc/shadow 文件甚至不是所有用户都可以访问的。它仅限于 root 用户或超级用户。在这些限制中,个人享有 root shell 的权利并执行以下命令。

在 Ubuntu Linux 中,root 账户的永久锁定默认启用。因此,在基本命令的情况下,需要通过执行以下命令来访问超级用户 shell,前提是如果您在 Ubuntu Linux 上遵循脚本。

Shadow Password File

作为攻击的一部分,恶意脚本试图访问存储密码加密的 /etc/shadow 文件,但 shell 失败。此外,这一步甚至构成了一个显著的安全特性,确保入侵者和软件密码破解者无法访问敏感数字信息,例如密码。但当从 root 用户或具有扩展权限的超级用户执行时,允许授予类似的标题。系统架构优于非特权用户,因为它限制了对 /etc/shadow 文件的访问。因此,未经授权访问的风险更为恶意,整体安全态势可以得到加强。

我如何更改我的账户密码?

使用下面的语法更改您自己的密码

首先,您需要提供旧密码。然后,您可以输入新密码两次,如下面的图所示

Shadow Password File

passwd 命令显示 SUID 设置(安全用户 ID)。这导致了一个事件,即当执行 passwd 命令时,当时的活动 EUID 被复制到通常属于 root 的保存用户 ID。因此,这种能力增加了普通用户尝试通过此技术更新密码的机会。有相关的教程可以进一步指导您使用该命令。

结论

总而言之,/etc/shadow 文件可以被视为 Linux 中用于用户身份验证和密码安全的基础。它通过利用更高容量的加密技术和提供访问限制来解决 /etc/passwd 文件经典特性的难题。通过系统地基于哈希算法和指定权限设置,/etc/shadow 文件确保敏感密码的信息保持未解密且不被非特权用户接触。

通过说明 /etc/shadow 文件中每个字段的结构和目标,用户可以清楚地了解 Linux 操作系统中的密码处理方式。从上次密码更改日期到帐户过期日期,每个参数都为确保系统安全通过实施密码策略的机制做出了小贡献。

此外,/etc/shadow 文件中的密码存储过程以及其他安全优势有助于防止未经授权访问数据和密码相关的弱点。它的使用方式更加主动,反映了用于保护敏感信息和防止错误输入的工具的发展。

总而言之,/etc/shadow 文件在 Linux 用户身份验证领域中起着主导作用,因为它揭示了强大的加密技术和维护用户密码机密性和完整性所必需的控制。