linux哪个目录用于存放用户密码信息
Linux 中用于存放用户密码信息的目录是 /etc,但准确说密码信息不是放在某个“目录文件夹”里,而是主要由 /etc/passwd 和 /etc/shadow 两个文件保存。真正的用户密码哈希通常保存在 /etc/shadow,/etc/passwd 主要保存用户名、UID、GID、家目录和登录 Shell 等账户基础信息。
直接判断:看 /etc 下的两个关键文件
搜索“linux哪个目录用于存放用户密码信息”时,最简答案是:看 /etc 目录,重点文件是 /etc/shadow 和 /etc/passwd。现代 Linux 系统通常不会把明文密码放在任何位置,而是把密码转换成哈希字符串后写入 /etc/shadow。

可执行检查:在终端运行:
ls -l /etc/passwd /etc/shadow
getent passwd root
sudo getent shadow root
判断标准:如果 /etc/passwd 第二个字段是 x,说明真实密码哈希不在该文件中,而在 /etc/shadow。如果 sudo getent shadow 用户名 能看到以 $y$、$6$、$5$ 等开头的长字符串,那就是该用户的密码哈希。
场景差异:本地账户一般会在 /etc/passwd 和 /etc/shadow 中有记录;LDAP、AD、SSSD 等集中认证账户可能通过 NSS/PAM 查询,未必直接存放在本机 /etc/shadow。
注意事项:不要把 /etc/shadow 理解为“密码明文库”。它保存的是不可逆哈希和密码有效期信息,泄露后仍有被离线破解的风险,因此必须严格限制读取权限。
/etc/passwd 保存什么
/etc/passwd 是系统账户索引文件,几乎所有用户和程序都需要读取它,用来把 UID 映射为用户名、找到用户家目录、确定默认 Shell。它的典型格式是:
用户名:密码占位符:UID:GID:注释字段:家目录:登录Shell
例如:
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
可执行检查:查看某个用户的账户基础信息:
getent passwd 用户名
判断标准:第二个字段如果是 x,代表密码哈希转移到了 /etc/shadow;如果是 *、! 或不可用标记,通常表示该账户不能用普通密码登录;如果为空字段,则风险很高,可能意味着无密码登录,需立即核查 PAM 配置和账户状态。
场景差异:普通登录用户通常有真实家目录和可登录 Shell,如 /home/alice、/bin/bash;服务账户常见 /usr/sbin/nologin 或 /bin/false,用于运行进程而不是人工登录。
注意事项:/etc/passwd 通常允许普通用户读取,但只应允许 root 写入。不要用普通编辑器随意修改该文件;确实需要人工编辑时,优先使用 sudo vipw,它会做锁定和基础格式检查,减少把系统账户文件改坏的概率。
/etc/shadow 才是密码哈希的主要位置
/etc/shadow 是保存本地账户密码哈希和密码老化策略的安全文件。它通常只有 root 或特权进程可读,普通用户不能直接查看。每一行对应一个账户,常见格式是:
用户名:密码哈希:上次修改日期:最小天数:最大天数:警告天数:宽限天数:账户过期日期:保留字段
可执行检查:查看某个用户的 shadow 记录和密码策略:
sudo getent shadow 用户名
sudo chage -l 用户名
判断标准:第二个字段为长哈希,表示该用户有密码哈希;以 ! 或 * 开头,通常表示密码登录被锁定;为空字段要高度警惕。第三个字段是自 1970-01-01 起的天数,表示上次改密日期;最大天数字段控制密码多久过期。
场景差异:个人电脑可能长期不启用密码过期;企业服务器常设置 90 天或 120 天过期、提前 7 到 14 天提醒;一次性账号或外包账号还可能设置账户过期日期。
注意事项:不要复制其他机器的 /etc/shadow 覆盖当前系统。不同发行版、不同哈希算法和不同认证配置可能不兼容,轻则用户无法登录,重则造成安全事故。
如何从哈希前缀判断密码算法
/etc/shadow 中的密码字段通常类似 $id$salt$hash。开头的标识可以帮助判断算法。常见前缀包括:$y$ 代表 yescrypt,$6$ 代表 SHA-512,$5$ 代表 SHA-256,$1$ 代表 MD5。
可执行检查:只查看哈希前缀,不暴露完整哈希:
sudo getent shadow 用户名 | awk -F: '{print $2}' | cut -d'$' -f2
判断标准:新系统优先看到 y 或 6 较常见;如果仍大量看到 1 或传统 DES 风格短哈希,说明密码哈希策略偏旧,建议评估升级认证配置并要求用户重新设置密码。
场景差异:Debian、Ubuntu、Fedora、Arch 等较新的发行版可能默认使用 yescrypt;较老系统常见 SHA-512;遗留系统可能还有 MD5 或 DES。旧哈希通常不会因系统升级自动变新,用户重新执行 passwd 后才会按当前策略生成新哈希。
注意事项:哈希算法不是唯一安全标准。弱密码即使用较新的哈希算法也容易被猜中;强密码、最小长度、失败锁定、SSH 密钥策略和多因素认证需要一起考虑。
本地用户、域用户和容器环境的区别
并不是所有 Linux 登录身份都一定把密码哈希放在本机 /etc/shadow。当系统接入 LDAP、Active Directory、FreeIPA、SSSD 或云厂商 IAM 时,本地文件可能只保存系统服务账户,真实身份数据由外部认证源管理。
可执行检查:判断用户来自哪里:
getent passwd 用户名
getent shadow 用户名
grep '^passwd:' /etc/nsswitch.conf
systemctl status sssd
判断标准:getent passwd 能查到用户但 /etc/passwd 里找不到,通常说明 NSS 从外部来源返回了账户信息;getent shadow 查不到域用户密码哈希,也可能是正常现象,因为域密码不保存在本机 shadow 文件中。
场景差异:物理机和传统虚拟机一般有完整本地账户文件;Docker 容器里的 /etc/passwd 只描述容器内部用户,不代表宿主机用户;WSL 中的账户文件属于该 Linux 子系统,不等同于 Windows 本地账户数据库。
注意事项:排查登录问题时,不要只看 /etc/passwd。应同时检查 /etc/nsswitch.conf、PAM 配置、SSSD 状态、SSH 配置和外部身份源。
修改、重置和锁定密码的正确方式
日常管理用户密码时,不建议手工改 /etc/shadow。标准命令会同步更新哈希、老化字段和必要的系统状态,出错概率更低。
可执行操作:
passwd # 修改当前用户密码
sudo passwd 用户名 # root 为指定用户重置密码
sudo passwd -l 用户名 # 锁定用户密码登录
sudo passwd -u 用户名 # 解锁用户密码登录
sudo chage -l 用户名 # 查看密码有效期
sudo chage -M 90 用户名 # 设置 90 天后密码过期
判断标准:改密后,/etc/shadow 中该用户的第二个字段应变化,第三个字段也应更新;锁定后,密码字段前通常会出现 !;设置过期策略后,chage -l 应能看到对应的最大天数和过期提示。
场景差异:服务器上的 root 或 sudo 用户应避免共享密码,优先使用个人账号加 sudo;批量运维场景应通过配置管理工具下发策略,而不是逐台手工编辑;临时账号应设置账户过期日期,而不只是口头约定删除。
注意事项:锁定密码登录不一定等于彻底禁用账户。用户可能仍通过 SSH Key、已有会话、计划任务或服务进程产生影响。需要禁用账户时,应结合 usermod -L、调整 Shell、移除密钥、停用服务和审计进程一起处理。
权限与安全基线
用户密码信息安全的第一道线是文件权限。/etc/passwd 需要可读但不应随意可写,/etc/shadow 则必须避免普通用户读取。
可执行检查:
stat -c '%a %U %G %n' /etc/passwd /etc/shadow
sudo pwck
sudo grpck
判断标准:/etc/passwd 常见权限是 644 root root;/etc/shadow 常见权限可能是 600 root root、640 root shadow 或发行版指定的等效安全配置。关键判断是:普通用户不能读取 /etc/shadow,非 root 用户不能写这两个文件。
场景差异:不同发行版对 /etc/shadow 的组属主和权限略有差异,不应机械套用一个数字;安全加固基线、容器镜像和最小化系统也可能有不同默认值。
注意事项:发现 /etc/shadow 可被普通用户读取时,应立即修复权限、排查是否已泄露、强制关键账户改密,并检查日志中是否有异常读取、提权或打包传输行为。
常见误区
误区一:以为 Linux 密码放在 /home。用户家目录保存个人文件和配置,不是系统密码数据库。
误区二:以为 /etc/passwd 里的 x 是密码。它只是占位符,真实哈希通常在 /etc/shadow。
误区三:以为拿到 /etc/shadow 就能直接看到密码。shadow 中保存的是哈希,不是明文,但攻击者可以离线暴力猜解。
误区四:以为删除 shadow 行能删除用户。删除或破坏账户文件可能造成系统异常;删除用户应使用 userdel,修改密码应使用 passwd。
可执行处理:如果怀疑账户文件异常,先备份,再用检查工具:
sudo cp -a /etc/passwd /etc/passwd.bak
sudo cp -a /etc/shadow /etc/shadow.bak
sudo pwck
判断标准:pwck 没有严重错误、用户能正常解析、root 能正常 sudo 或登录维护环境,才说明账户文件基本可用。
注意事项:生产环境修改账户文件前,应确认有控制台、快照或救援模式入口,避免 SSH 会话断开后无法恢复。
常见问答
Linux 用户密码到底在哪个目录?
在 /etc 目录下。准确文件是 /etc/shadow 保存密码哈希,/etc/passwd 保存账户基础信息。现代 Linux 一般不会在 /etc/passwd 中保存真实密码哈希。
/etc/passwd 可以随便打开看吗?
通常可以读,因为很多系统工具需要它解析用户名和 UID。但它不应被普通用户写入。查看建议使用 getent passwd 用户名,不要直接手工改文件。
为什么 /etc/passwd 里密码位置只有 x?
x 表示密码哈希已经放到 /etc/shadow。这是 shadow password 机制的常见表现,用来避免所有用户都能读到密码哈希。
忘记 Linux 用户密码怎么办?
如果还能用 root 或 sudo 权限登录,运行 sudo passwd 用户名 重置。若 root 权限也不可用,需要通过云控制台、救援模式、单用户模式或系统安装介质进入维护环境后重置。
能不能直接修改 /etc/shadow 改密码?
不建议。正确方式是使用 passwd、chage、usermod 等命令。必须人工修复时,用 vipw -s,并确保有备份和回滚方式。
参考文献
原创文章,作者:武鸿淑,如若转载,请注明出处:https://www.wanglitou.cn/article_71865.html
微信扫一扫