Linux系统中/etc/passwd和/etc/shadow是管控用户账号与密码的核心配置文件,很多新手容易混淆两者作用,甚至误以为passwd文件存放用户密码。核心区别十分明确:/etc/passwd专门存放所有用户的基础账号信息,全员可读无密码哈希;/etc/shadow单独加密存储用户密码哈希及密码安全策略,权限严格加密保密。本文通俗拆解两个文件的权限、字段、核心作用、安全机制,对比差异、讲解工作原理与运维规范,帮助大家彻底弄懂Linux用户密码存储机制,规避账号安全风险。
一、核心结论一句话总结
先记住最核心、最实用的标准答案,所有Linux运维场景通用:
-
/etc/passwd:系统用户信息清单,存放用户名、UID、GID、家目录、登录Shell等基础数据,不存真实密码,全员可读。
-
/etc/shadow:系统密码安全仓库,唯一存放密码哈希值的文件,同时记录密码有效期、过期策略、锁定状态,权限极高,仅root可查看。
简单类比:passwd是用户“身份档案表”,shadow是密码“加密保险柜”,两者配合完成Linux用户账号与密码的安全管控。
二、为什么Linux要分成两个文件?安全设计原理
早期老旧Linux系统中,用户信息和密码哈希统一存放在/etc/passwd文件中。但该文件默认对所有用户可读,普通用户均可查看文件内容,攻击者可离线暴力破解密码哈希,存在极大安全漏洞。
为解决该安全缺陷,Linux引入影子密码机制(Shadow Password),将用户信息与密码数据拆分存储:
把公开的用户基础信息保留在/etc/passwd,把敏感的密码哈希、安全策略单独剥离至/etc/shadow,同时严格收紧shadow文件权限,彻底杜绝普通用户读取密码哈希,从底层提升系统账号安全性,这也是双文件分工的核心设计初衷。
三、/etc/passwd 详细解析(用户信息文件)
3.1 文件权限与特性
/etc/passwd 默认权限为 644,所有用户均可读取,仅root用户可编辑修改。文件对系统所有用户透明,无任何保密属性,只用于存储公开的用户账号配置信息。
3.2 核心作用
主要用于系统识别用户身份、匹配用户权限、定位用户家目录与登录环境,系统开机登录、权限校验、用户查询均依赖该文件,是Linux用户体系的基础配置文件。
3.3 字段含义详解(7个字段)
文件每行对应一个用户,用冒号分隔7个固定字段,格式统一:
用户名:密码占位符:UID:GID:注释信息:家目录:登录Shell-
用户名:系统登录账号名称,唯一标识用户
-
密码占位符(x):所有行均显示x,代表密码哈希存放于shadow文件,无实际密码含义
-
UID:用户唯一ID,root为0,系统用户1-999,普通用户1000起步
-
GID:用户所属用户组ID,关联/etc/group配置
-
注释信息:用户备注、描述信息,可自定义填写
-
家目录:用户登录后的默认工作目录,如/home/test
-
登录Shell:用户登录终端程序,默认/bin/bash,禁止登录为/sbin/nologin
四、/etc/shadow 详细解析(密码哈希文件)
4.1 文件权限与特性
/etc/shadow 默认权限为 000/600,仅root超级用户拥有读写权限,普通用户、普通管理员无法查看、无法读取、无法修改,是系统核心敏感文件。
4.2 核心作用
唯一存储Linux用户加密密码哈希值,同时管控密码安全策略,包含密码有效期、修改间隔、过期提醒、锁定状态、失效时间等核心安全配置,是系统密码校验、账号安全管控的核心文件。
4.3 字段含义详解(9个字段)
文件每行对应用户密码配置,9个冒号分隔字段,精准管控密码安全:
用户名:密码哈希:最后修改时间:最小间隔:最大有效期:提醒天数:过期宽限:失效时间:保留字段-
用户名:与passwd文件对应,绑定指定用户
-
密码哈希:核心字段,加密后的密码字符串,非明文;!!或!代表无密码/账号锁定
-
最后修改时间:从1970年至今,密码最后一次修改的天数
-
最小修改间隔:密码最短多久可再次修改,0代表无限制
-
最大有效期:密码最长使用天数,到期必须修改
-
过期提醒天数:密码过期前,提前弹窗提醒用户修改
-
过期宽限天数:密码过期后,可延迟登录的缓冲天数
-
账号失效时间:固定天数后账号永久失效、禁止登录
-
保留字段:预留空白,用于后续系统功能扩展
五、两大文件全方位核心对比
|
对比维度
|
/etc/passwd
|
/etc/shadow
|
|---|---|---|
|
核心存储内容
|
用户基础信息,无真实密码
|
用户密码哈希、密码安全策略
|
|
文件权限
|
644,所有用户可读
|
600,仅root权限可操作
|
|
安全性
|
公开文件,无安全保密机制
|
极高,系统核心保密文件
|
|
字段数量
|
7个基础字段,结构简单
|
9个字段,包含完整密码策略
|
|
核心用途
|
识别用户身份、加载登录环境
|
校验登录密码、管控账号安全周期
|
|
密码标识
|
仅显示占位符x,无哈希值
|
存储加密哈希,区分锁定/正常状态
|
六、日常运维核心实操知识点
6.1 密码修改与文件联动逻辑
使用
passwd 用户名 修改用户密码时,系统会自动加密生成新的密码哈希,同步更新至/etc/shadow文件,passwd文件不会发生任何变化,全程无需手动编辑shadow文件。6.2 账号锁定与解锁原理
执行账号锁定命令后,系统会在shadow文件的密码哈希字段添加!标识,使密码校验失效、账号无法登录,passwd文件数据保持不变,这也是Linux账号安全管控的核心逻辑。
6.3 禁止手动vi编辑文件
严禁直接使用vi/vim手动编辑passwd和shadow文件,一旦字段格式错乱、冒号缺失,会直接导致系统用户登录失效、账号瘫痪。运维修改用户密码、策略,务必使用useradd、userdel、passwd、chage等官方命令。
七、常见运维误区避坑
-
误区1:passwd文件中存放用户密码纠正:彻底错误,passwd仅存用户公开信息,x只是占位符,真实加密密码哈希只存在shadow文件中。
-
误区2:shadow文件可以普通用户查看纠正:shadow权限严格限制为root专属,普通用户无法读取,有效防止密码哈希被离线破解。
-
误区3:两个文件可以单独修改纠正:两个文件用户名一一对应,数据联动,随意删除或修改字段会导致用户账号异常、登录失败。
-
误区4:密码哈希可以反向解密明文纠正:shadow中存储的是单向加密哈希,无法直接解密,仅能通过暴力碰撞破解,安全性极高。八、全文总结/etc/passwd和/etc/shadow的核心分工清晰明确:/etc/passwd是公开用户信息库,存储用户名、UID、家目录等基础数据,全员可读、无密码信息;/etc/shadow是私密密码安全库,唯一存储用户密码哈希值,同时管控密码有效期、账号锁定等安全策略,仅root可访问。Linux通过双文件分离存储的设计,完美兼顾了系统用户识别的公开性与密码数据的私密性,是Linux系统账号安全的核心机制。熟练掌握两个文件的区别、字段含义与运维规范,是Linux系统运维、账号权限管理、安全加固的必备基础能力。
注·部分内容为AI辅助生成
