/etc/shadow
100%

用户管理 · 第 4 课

/etc/shadow

学习本地 shadow 记录如何表示密码哈希和期限策略,同时避免暴露敏感数据。

/etc/shadow 存储受保护的本地密码哈希和密码期限字段。把这些值与通常可读的 /etc/passwd 数据库分开,可以降低它们暴露于离线密码猜测攻击的风险。

保护 Shadow 数据

密码并不是以可逆“加密”形式存储,等待之后显示。本地密码条目通常包含单向密码哈希,并编码算法标识符、盐和参数。获得哈希的攻击者可以离线猜测候选密码,因此该数据库应保持受限。

确切的所有权和权限细节因系统而异,但访问通常仅限 root 和少数获准的系统组件。不要只为了检查账户状态就打印、复制、记录或分享 shadow 内容。

为什么本地 shadow 数据通常不允许一般读取访问?

阅读九字段格式

本地 shadow 记录包含九个冒号分隔字段。以下是一个示意记录,其中有意省略了哈希:

alice:<password-field>:20000:0:90:7:14:20500:

各字段为:

  1. 登录名
  2. 密码哈希或特殊密码标记
  3. 上次更改密码的日期,以自 1970-01-01 起的天数表示;在常见工具中,0 会要求用户在下次使用密码认证登录时更改密码。
  4. 最短密码期限,单位为天。
  5. 最长密码期限,单位为天。
  6. 密码过期前的警告期,单位为天。
  7. 密码过期后的非活动期,单位为天。
  8. 账户过期日期,以自 1970-01-01 起的天数表示。
  9. 保留字段

空字段和特殊数值都有既定含义,具体可能随字段和工具而异。请使用账户管理命令,不要凭目测编辑数值。

哪个 shadow 字段把账户过期日期存储为自 1970-01-01 起的天数?

谨慎解释密码字段

字段 2 中的有效哈希支持本地 Unix 密码验证。以 ! 开头的值通常会锁定该密码哈希,而 * 或其他无效哈希标记会阻止通过该字段成功验证密码。空值具有安全敏感性,并可能根据 PAM 策略允许无密码行为。

这些标记描述本地密码路径,而不是所有可能的认证方式。SSH 公钥、证书、令牌和应用特定凭据可能仍然可用,除非另行限制。字段 8 中的账户过期也不同于密码锁定。

对于以 ! 开头的 shadow 密码字段,可以安全得出什么结论?

区分密码日期和账户日期

字段 3 至 7 涉及密码期限:上次更改时间、何时允许再次更改、何时过期、何时开始警告,以及密码过期后还能在多长时间内登录。字段 8 会在绝对日期让账户过期,不受密码期限影响。

例如,最长密码期限为 90 天,并不等同于账户过期日期。前者相对于上次密码更改而移动,后者在管理员更改前是固定日期。

shadow 字段 5 和字段 8 有什么区别?

通过工具检查和更改策略

管理员应只查询任务所需的信息:

$ sudo passwd -S alice
$ sudo chage -l alice

passwd -S 汇总本地密码状态,chage -l 以可读形式列出期限信息。输出格式和授权要求可能随发行版而异。

使用 passwdchageusermod 和相关账户工具进行更改。如果无法避免手工修复本地 shadow 数据库,vipw -s 会提供锁定;请使用 pwck 验证账户数据库。远程更改认证前应保留恢复会话。

哪个命令专门用于列出本地账户 alice 的可读密码期限信息?

PAM 和 NSS 可以整合本地 shadow 文件之外的认证与身份来源。因此,系统账户可能没有本地 shadow 记录,也可能通过其他服务认证。

要在受控环境中练习账户状态和期限策略,可以尝试以下动手实验:

  1. 使用 useradd、usermod 和 userdel 管理 Linux 用户账户 - 练习用户管理的完整生命周期,从使用 useraddpasswd 创建并保护新账户,到修改和删除账户。
  2. 在 Linux 中配置用户账户和 Sudo 权限 - 学习管理用户账户和 sudo 权限的重要技术,包括实施密码策略和保护账户。

课程已完成

你已完成 /etc/shadow

现在,你可以在不暴露完整密码数据库的情况下解释 shadow 策略。

  • 把密码哈希视为受限认证材料。

  • 按用途阅读九个 shadow 字段。

  • 区分密码锁定与禁用每一种登录方式。

  • 区分密码期限和绝对账户过期。

  • 通过范围明确的账户工具检查和更改策略。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 用户管理