拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pwconv 命令详解:Linux 影子密码(Shadow Password)机制与安全实践

pwconv 命令详解:Linux 影子密码(Shadow Password)机制与安全实践
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

本篇指南围绕 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。运行过程大致如下:

  1. 读取/etc/passwd与现有的/etc/shadow;
  2. 将passwd中的密码字段迁移到shadow文件;
  3. 将passwd中对应字段替换为x;
  4. 设置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 changes

pwck会检查每条记录是否包含足够字段、用户名是否唯一、密码字段格式是否正确、用户主目录是否存在等。对于提示"主目录不存在"这类问题,可采取三种处理方式:

  1. 如果确定这些用户不会被使用,可以使用userdel命令删除这些用户;
  2. 如果这些用户需要被使用,应创建相应目录并修正属主:
# 创建目录 sudo mkdir /var/ftp # 将目录的所有权赋给相应的用户 sudo chown ftp:ftp /var/ftp
  1. 如果这些用户对应的软件包还未安装,可以安装它们,软件包管理器(如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选项时的替代方案。

安全实践建议

基于上述机制,在生产环境中建议遵循以下实践:

  1. 保持影子密码开启:通过cat /etc/passwd检查密码段是否为x,若显示密文则执行sudo pwconv恢复;对群组执行sudo grpconv。
  2. 保护影子文件权限:确认/etc/shadow与/etc/gshadow的权限仅为 root 可读写(通常为 000 或 600),这是投影密码机制安全性的物理保障。
  3. 定期校验文件完整性:将pwck与grpck纳入例行巡检脚本,在批量修改用户、导入账户或系统迁移后立即执行。
  4. 避免明文密码:使用passwd、chpasswd设置密码时应使用加密方式传输与存储,配合-e选项传入已加密密文。
  5. 谨慎使用反向转换: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

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表