- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
本篇指南围绕 Linux 系统中的
pwconv命令展开,深入讲解"投影密码"(影子密码)机制的原理、启用与关闭流程、/etc/shadow与/etc/gshadow文件格式,并结合pwunconv、grpconv、grpunconv、pwck、grpck等配套命令给出完整的实战操作方案。读完本文,你将掌握 Linux 用户与群组密码从明文走向加密隔离的完整链路,以及影子密码文件损坏时的校验与修复方法。
什么是投影密码(影子密码)
在 Linux 系统中,用户与群组的基本信息分别存放在/etc/passwd和/etc/group两个文件中。由于系统运行需要读取用户信息(如登录校验、文件属主解析等),这两个文件必须对系统中所有进程开放读取权限,任何人都可以查看其内容。这就造成了严重的安全破绽:若密码直接存放在这些世界可读的文件中,任何能接触到系统的用户都能看到密文甚至明文密码。
投影密码(Shadow Password)机制正是为解决这一破绽而设计:它把密码从世界可读的passwd/group文件中剥离,改存到仅允许系统管理者(root)读取的/etc/shadow和/etc/gshadow文件中,同时在原文件中将密码字段替换为字符x,从而有效强化系统的安全性。
pwconv命令(password convert 的缩写)就是用来开启用户投影密码的工具,它属于 shadow-utils 工具集的一部分,与仓库中的 pwunconv(关闭投影密码)、grpconv(开启群组投影密码)、grpunconv(关闭群组投影密码)共同构成完整的影子密码转换体系。
pwconv 命令语法
pwconv命令语法非常简单,执行时不需要任何参数:
pwconv需要注意的是,开启影子密码会改写系统关键的认证文件,因此必须以 root 权限执行,例如通过sudo pwconv。运行过程大致如下:
- 读取
/etc/passwd与现有的/etc/shadow; - 将
passwd中的密码字段迁移到shadow文件; - 将
passwd中对应字段替换为x; - 设置
shadow文件权限,仅允许 root 读写。
实例演示:开启用户投影密码
下面通过仓库 pwconv 文档中的完整示例,演示整个迁移过程。
首先查看某个测试用户test在/etc/passwd中的记录:
cat /etc/passwd | grep test test:x:3001:3001::/home/test:/bin/sh此时可以发现密码段已经显示为x,说明该系统的影子密码已处于开启状态,真正的密码密文存放在/etc/shadow中:
cat /etc/shadow | grep test test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:15022:0:99999:7:::可以看到,/etc/shadow中test用户记录中的密码字段是一串以$6$开头的密文,这是 SHA-512 加密算法的标志($1$为 MD5,$5$为 SHA-256)。/etc/shadow文件默认权限为 000 或 600,仅 root 可读,普通用户无法查看任何用户的密码密文。
在未开启影子密码的系统上使用 pwconv
如果你的系统尚未启用影子密码,/etc/passwd中会直接显示密码密文,例如:
test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:3001:3001::/home/test:/bin/sh此时执行sudo pwconv,密码密文会被迁移到/etc/shadow,而/etc/passwd中的密码段则被替换为x:
sudo pwconv cat /etc/passwd | grep test test:x:3001:3001::/home/test:/bin/sh/etc/shadow 文件格式详解
/etc/shadow中的每一行对应一个用户,字段之间用冒号:分隔,共 9 个字段。以仓库 passwd 文档中的字段说明为参考,结合上文示例展开:
| 字段位置 | 含义 | 示例值 |
|---|---|---|
| 1 | 用户名(login name) | test |
| 2 | 加密后的密码(不可逆,$6$表示 SHA-512) | $6$nYOEWamm$bz07nlv/... |
| 3 | 最近一次修改密码的日期(自 1970-01-01 起的天数) | 15022 |
| 4 | 密码最短使用期限(多少天内不可再改) | 0 |
| 5 | 密码最长使用期限(多少天后必须修改) | 99999 |
| 6 | 密码过期前多少天开始提醒用户 | 7 |
| 7 | 密码过期后多少天禁用该账户 | (空) |
| 8 | 账户失效日期(自 1970-01-01 起的天数,为空表示永不过期) | (空) |
| 9 | 保留字段 | (空) |
对于需要长期管理的场景,管理员可借助chage、passwd -S等命令查看和调整这些策略字段,而无须直接编辑shadow文件。
反向操作:pwunconv 关闭投影密码
pwunconv命令与pwconv功能相反,用于关闭用户的投影密码,它会把密码从shadow文件内重新存回passwd文件中。参见仓库 pwunconv 文档中的完整示例:
pwunconv # 关闭影子密码 cat /etc/passwd | grep test # 发现密码已经在passwd文件中了 test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:3001:3001::/home/test:/bin/sh ls /etc/shadow # 查看影子文件,提示没有这个文件或目录 ls: cannot access /etc/shadow: No such file or directory执行后shadow文件被移除,密码密文重新暴露在/etc/passwd中。由于该文件世界可读,任何用户都能读取密码密文,这为离线暴力破解提供了素材。在正式生产环境中,强烈建议保持影子密码开启状态,仅在系统迁移或排障等特殊场景下临时执行pwunconv,操作完成后应立即重新执行pwconv恢复。
群组的投影密码:grpconv 与 grpunconv
与用户密码类似,群组也有对应的影子密码机制。/etc/group与/etc/gshadow是群组信息的两个文件(参见仓库 passwd 文档的知识扩展部分)。grpconv 用于开启群组投影密码,将/etc/group中的密码迁移到/etc/gshadow。
实例:为群组设置密码并开启影子机制
首先使用groupmod为群组cdy设置一个测试密码(参见仓库 groupmod 文档,-p选项用于设置组密码):
groupmod --password 123456 cdy cat /etc/group | grep cdy cdy:123456:1000: # 看出密码是123456执行grpconv启动影子系统后,密码从/etc/group迁移至/etc/gshadow:
grpconv cat /etc/group | grep cdy cdy:x:1000: # 看出密码段已经被x替代 cat /etc/gshadow | grep cdy cdy:123456:: # 已经移到影子文件了注意:gshadow、shadow文件只有 root 权限才可以查看,这正是投影密码机制的安全核心。
关闭群组投影密码:grpunconv
grpunconv 命令会把密码从gshadow文件内回存到group文件里。未关闭前密码位于影子文件:
cat /etc/gshadow | grep cdy cdy:123456::关闭影子密码后,/etc/gshadow文件被移除,密码复制回/etc/group:
cat /etc/gshadow cat: /etc/gshadow: 没有那个文件或目录 cat /etc/group | grep cdy cdy:123456:1000:影子密码文件的完整性校验:pwck 与 grpck
影子密码机制让认证信息分散在passwd/shadow(用户)与group/gshadow(群组)两组文件中,一旦文件被误编辑或部分损坏,可能导致登录异常。此时可以使用校验命令进行检查。
pwck:验证用户认证文件
pwck 命令用来验证系统认证文件/etc/passwd和/etc/shadow的内容和格式的完整性,语法为:
pwck(选项)(参数)常用选项:
-q:仅报告错误信息;-s:以用户 id 排序文件/etc/passwd和/etc/shadow;-r:只读方式运行指令;-R:在指定的 chroot 环境下检查密码文件。
参数方面,可指定密码文件与影子文件的路径,不指定时默认检查/etc/passwd与/etc/shadow。
执行示例:
pwck user 'ftp': directory '/var/ftp' does not exist pwck: no changespwck会检查每条记录是否包含足够字段、用户名是否唯一、密码字段格式是否正确、用户主目录是否存在等。对于提示"主目录不存在"这类问题,可采取三种处理方式:
- 如果确定这些用户不会被使用,可以使用
userdel命令删除这些用户; - 如果这些用户需要被使用,应创建相应目录并修正属主:
# 创建目录 sudo mkdir /var/ftp # 将目录的所有权赋给相应的用户 sudo chown ftp:ftp /var/ftp- 如果这些用户对应的软件包还未安装,可以安装它们,软件包管理器(如
yum或apt)通常会自动创建必要的用户和目录。
grpck:验证组文件完整性
grpck 命令用于验证组文件的完整性,在验证之前会先锁定(lock)组文件/etc/group和/etc/gshadow。它检查数据是否正确存放、每条记录是否包含足够的信息、是否拥有唯一的组名、是否包含正确的用户、是否正确设置组的管理员等。若发现错误,会在命令行提示用户是否删除错误记录;如果用户没有明确回答删除记录,grpck会终止运行。
常用选项:
-r:只读模式;-s:排序组 id。
验证示例(必须管理员身份运行,无输出即无错误):
grpck # 必须以管理员身份运行 grpck /etc/group /etc/gshadow # 显式指定组文件与影子文件错误处理示例:若group文件被追加了 GID 为空的错误行check_user:x:,grpck会提示并询问是否删除:
grpck /etc/group invalid group file entry delete line 'check_user:x:'? y # 提示是否删除 grpck: the files have been updated # 已经删除了错误的行,文件已更新 cat /etc/group | grep check_user # 没有查到,已经删除与影子密码配套的密码管理工具
理解pwconv后,将其与仓库中其他认证工具配合使用,可以构建完整的密码管理闭环:
- passwd:设置与修改用户密码(含
-l锁定、-u解锁、-d删除密码、-S查看状态等),并给出了/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件逐字段的解析说明,是理解影子密码机制的基础文档。 - chpasswd:批量更新用户口令,把
username:password格式的文件内容重定向写入/etc/shadow,适合批量初始化用户密码的场景;-e选项可指定输入为加密后的密文,-m选项在密码未加密时改用 MD5 代替 DES。 - groupmod:通过修改组数据库(
/etc/group与/etc/gshadow)的相应条目来更改组定义,其中-p选项用于设置组密码(crypt 加密后的密文)。 - gpasswd:工作组文件
/etc/group和/etc/gshadow的管理工具,支持-a添加用户到组、-A指定组管理员、-r删除组密码、-R限制非成员登入组等操作,也是groupmod在部分发行版上缺少-a/-U选项时的替代方案。
安全实践建议
基于上述机制,在生产环境中建议遵循以下实践:
- 保持影子密码开启:通过
cat /etc/passwd检查密码段是否为x,若显示密文则执行sudo pwconv恢复;对群组执行sudo grpconv。 - 保护影子文件权限:确认
/etc/shadow与/etc/gshadow的权限仅为 root 可读写(通常为 000 或 600),这是投影密码机制安全性的物理保障。 - 定期校验文件完整性:将
pwck与grpck纳入例行巡检脚本,在批量修改用户、导入账户或系统迁移后立即执行。 - 避免明文密码:使用
passwd、chpasswd设置密码时应使用加密方式传输与存储,配合-e选项传入已加密密文。 - 谨慎使用反向转换:
pwunconv与grpunconv只在排障等必要场景下临时使用,完成后立即恢复。
总结
pwconv是 Linux 影子密码机制的核心入口,它把用户密码从世界可读的/etc/passwd迁移到仅 root 可读的/etc/shadow,与pwunconv、grpconv、grpunconv组成完整的双向转换工具链。结合pwck、grpck的完整性校验以及passwd、chpasswd、groupmod、gpasswd等配套命令,管理员可以系统性地保障用户与群组认证信息的安全性与一致性。本文全部实例与字段说明均可在仓库 command 目录下对应的独立文档中进一步查阅原文。
- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
相关推荐
grpconv 命令详解:Linux 群组投影密码(影子密码)实战指南
grpconv 命令详解:Linux 群组投影密码(影子密码)实战指南 grpconv 是 Linux 系统安全管理中的关键命令,用于开启群组投影密码(影子密码
文档教程Linux 影子密码关闭详解:pwunconv 命令原理与实战(linux-command 项目)
Linux 影子密码关闭详解:pwunconv 命令原理与实战(linux command 项目) 导读 本文围绕 linux command 开源仓库中收录的
文档教程StarRocks SET PASSWORD 详解:用户登录密码修改命令与认证机制剖析
StarRocks SET PASSWORD 详解:用户登录密码修改命令与认证机制剖析 SET PASSWORD 是 StarRocks 中用于修改用户登录密码
数据库OLAP数据仓库大数据湖仓一体数据分析
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考