shadow在服务器中通常指Linux系统里的影子口令文件/etc/shadow,它把用户密码的加密哈希单独存放,普通权限无法读取,是服务器账号安全的第一道隔离墙。下文先用登录流程解释这个词的来龙去脉,再给出查看命令、格式拆解和排障方法。
shadow在服务器中是什么意思:从登录流程看影子文件
用户登录Linux服务器时,系统要做两件事:先确认用户名存在,再验证密码是否正确,用户名、用户ID、家目录这些信息放在/etc/passwd里,这个文件必须被很多普通程序读取,如果把密码哈希也塞进/etc/passwd,等于把加密后的密码暴露给所有能读passwd的本地用户,于是系统把密码相关数据单独抽出来,放进/etc/shadow。
所以运维口中“看下shadow”,基本就是在说查看这个影子口令文件。
服务器shadow文件作用是什么
shadow最主要的作用是隔离密码哈希,它承担三类信息:
- 密码哈希本身
- 密码生命周期:最短使用天数、最长使用天数、过期提醒
- 账号过期与锁定状态
普通用户对/etc/shadow没有读取权限,多数Linux发行版将权限设置为-rw-r-----或-rw-------,仅root或shadow组可读,这样即使攻击者拿到一个普通账号,也不能直接拖走全部密码哈希做离线爆破。
Linux shadow文件查看方法
服务器影子文件怎么查看
前提是拥有root或sudo权限,普通用户执行cat /etc/shadow会直接得到Permission denied,这是正常现象,不代表文件损坏。
常用操作步骤:
- 查看整个文件:
sudo cat /etc/shadow - 分页查看:
sudo less /etc/shadow - 只看某个用户:
sudo grep '^root:' /etc/shadow - 查看权限:
ls -l /etc/shadow - 查看某用户密码状态:
sudo passwd -S 用户名
- 查看密码有效期详情:
sudo chage -l 用户名
这些命令在CentOS、Ubuntu、Debian以及多数云服务器镜像上都可以直接使用,容器环境如果做了用户隔离,路径也通常是/etc/shadow。
/etc/shadow格式详解:九个冒号字段不能搞混
/etc/shadow每一行对应一个用户,字段用冒号分隔,看懂一行,就能判断账号是否被锁、密码是否过期。
基本格式:
用户名:密码哈希:上次修改日期:最小天数:最大天数:警告天数:不活动天数:过期日期:保留字段
字段拆解如下表:
| 字段位置 | 含义 | 常见值 |
|---|---|---|
| 第1字段 | 登录名 | root、ubuntu、www-data |
| 第2字段 | 密码哈希 | $6$...、、 |
| 第3字段 | 上次修改密码日期 | 从1970-01-01起的天数 |
| 第4字段 | 密码最小使用天数 | 0 |
| 第5字段 | 密码最大使用天数 | 99999 |
| 第6字段 | 过期前警告天数 | 7 |
| 第7字段 | 过期后宽限天数 | 空或数字 |
| 第8字段 | 账号过期日期 | 空或从1970-01-01起天数 |
| 第9字段 | 保留字段 | 通常为空 |
第二字段前缀直接反映哈希算法:
$1$表示MD5$5$表示SHA-256$6$表示SHA-512- 开头表示该账号密码登录被锁定
- 表示该账号不能通过密码登录
如果你看到第二字段是!$6$...,说明用户原先有密码哈希,但当前被管理员锁定了密码,这不等于删号,用户仍可能通过SSH密钥登录。

shadow和passwd区别:为什么服务器要拆成两个文件
一张表看懂两者分工
| 对比项 | /etc/passwd | /etc/shadow |
|—|—|—|| 用户名、UID、GID、家目录、登录shell | 密码哈希、密码有效期、锁定状态 |
| 权限 | 全局可读 | 仅root或shadow组可读 |
| 能否被普通程序读取 | 可以 | 不可以 |
| 典型用途 | 用户信息解析、ls显示属主 | PAM认证、密码过期判断 |
用一个具体场景说明:Ubuntu云服务器上运行着Nginx和数据库进程,这些进程需要根据UID判断文件属主,所以它们要读passwd,但它们完全不需要知道密码哈希,如果密码也放在passwd里,等于把哈希暴露给每个本地进程,拆分后,普通进程照常读passwd,只有认证模块在root权限下读shadow,攻击面明显缩小。
两个文件不同步怎么办
有时手工改过passwd或从旧机器迁移用户,可能出现passwd里能查到用户,shadow里却缺少对应行,这种情况用户登录会失败,可以用sudo pwconv命令根据passwd重建shadow条目,反过来,如果shadow里有行但passwd里没用户,也会导致异常,需要对照/etc/passwd和/etc/shadow检查。
服务器shadow文件异常排查:登录失败的三种情况
密码正确但SSH拒绝登录
先查shadow第二字段:
- 如果是或开头,密码已被锁定。
- 解锁命令:
sudo passwd -u 用户名
再查第八字段是否已超过账号过期日期,过期后即使用户密码正确也无法登录,需要管理员修改账号过期时间。
系统提示密码过期
shadow的第5、6、7字段一起控制密码生命周期,比如第5字段是90,表示密码使用满90天后就不能继续使用原密码登录,第6字段是提前几天警告,第7字段是过期后宽限几天,用sudo chage -l 用户名可以直观看到这些时间点。
新建用户后无法登录

新建用户时如果使用了某些批量脚本只写passwd、没有同步shadow,登录认证会失败,执行sudo grep '^新用户名:' /etc/shadow确认是否存在对应行,缺少时用sudo pwconv修复。
shadow在服务器中是什么意思相关问答
shadow在服务器中是什么意思?和Windows服务器的shadow副本是一回事吗?
答:在Linux服务器语境下,shadow一般指/etc/shadow影子口令文件,用来存密码哈希和密码有效期,在Windows服务器里,shadow常指卷影副本(Volume Shadow Copy),用于磁盘快照和备份恢复,两者只是英文同名,技术场景完全不一样,判断方式:提到密码、用户登录、passwd,基本就是Linux的shadow文件;提到备份、快照、盘符,则是Windows的VSS。
服务器shadow文件可以手动编辑吗?
答:不建议直接编辑,哈希、日期和锁定字段写错一个,都可能导致用户无法登录或密码策略失效,正常修改应使用passwd、chage、usermod等命令,应急情况下如需手动修改,应先备份,再用sudo vipw -s或sudoedit /etc/shadow操作,改完后检查权限是否仍然只有root可读。
普通用户读不到shadow,系统是怎么验证密码的?
答:密码验证由PAM模块完成,PAM在认证阶段以root权限读取/etc/shadow,取出该用户的密码哈希,再与登录者输入的密码进行哈希比对,普通用户和普通进程不需要直接读shadow,这种设计正好防止普通账号被攻破后,攻击者顺手拖走全部密码哈希。
shadow在服务器中的核心含义始终围绕/etc/shadow这个影子口令文件,它把密码哈希从全局可读的passwd中隔离出来,配合权限控制和生命周期字段,成为Linux账号安全的基础结构,运维排查登录问题时,先看shadow第二字段是否锁定、第八字段是否过期,往往能快速定位原因。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/814741.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是字段部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于字段的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!