ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

jc 解析器实战:用 jc 将 /etc/gshadow 组影子文件转换为 JSON

jc 解析器实战:用 jc 将 /etc/gshadow 组影子文件转换为 JSON 开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载本篇技术指南聚焦 jcJSON Convert项目中的gshadow文件解析器讲解如何将 Linux 系统下的/etc/gshadow组影子文件通过 CLI 管道或 Python 模块调用转换为结构化 JSON/YAML 数据并深入解析其底层实现字段拆分、空列表规整、注释过滤等让读者能够将该解析器直接接入系统运维与自动化脚本中。一、/etc/gshadow与 jc 的 gshadow 解析器/etc/gshadow是类 Unix 系统Linux 等中与/etc/group对应的影子文件用于存放组密码哈希、组管理员列表与组成员列表等敏感信息通常仅 root 用户可读。在 jc 项目中gshadow 解析器 将该文本文件逐行解析为 JSON 数组便于通过jq等工具进一步筛选与处理。该解析器在 parser 注册表 中以gshadow名称注册标记为file类型tags兼容linux、aix、freebsd三种平台当前版本为 1.3作者 Kelly Brazil。二、快速上手CLI 用法与模块用法2.1 CLI 管道用法最直接的方式是读取/etc/gshadow并通过--gshadow参数交给 jc 解析$ cat /etc/gshadow | jc --gshadow2.2 Python 模块用法在 Python 脚本中可通过jc.parse()统一入口调用import jc result jc.parse(gshadow, gshadow_file_output)其中gshadow_file_output为/etc/gshadow文件内容的字符串返回值为字典列表List of Dictionaries可直接用于后续业务处理或序列化输出。三、输出 Schema四个结构化字段gshadow解析器输出的每条记录包含 4 个字段schema 定义如下[ { group_name: string, password: string, administrators: [ string ], members: [ string ] } ]字段含义与/etc/gshadow每行的四个冒号分隔段一一对应字段类型来源段说明group_namestring第 1 段组名对应/etc/group中的组passwordstring第 2 段组密码字段通常为空、*、!或加密哈希administrators字符串数组第 3 段组管理员用户名列表按逗号拆分members字符串数组第 4 段组成员用户名列表按逗号拆分四、输出示例普通模式与原始模式对比4.1 普通输出-p美化打印$ cat /etc/gshadow | jc --gshadow -p [ { group_name: root, password: *, administrators: [], members: [] }, { group_name: adm, password: *, administrators: [], members: [ syslog, joeuser ] }, ... ]4.2 原始输出-p -r保留未处理数据$ cat /etc/gshadow | jc --gshadow -p -r [ { group_name: root, password: *, administrators: [ ], members: [ ] }, { group_name: adm, password: *, administrators: [ ], members: [ syslog, joeuser ] }, ... ]两种模式的核心差异原始模式-r即rawTrue直接返回fields[2].split(,)与fields[3].split(,)的结果——当某组没有管理员或成员时第三、四段为空字符串.split(,)会产生[]这样的含一个空字符串的列表而普通模式经过 gshadow.py 中的_process()后处理会将[]规整为空数组[]使输出更符合直觉。这正是测试 fixture 中 ubuntu-18.04/gshadow.json 与 centos-7.7/gshadow.json 里administrators与members均为[]的原因。五、parse() 函数 API 详解gshadow解析器对外暴露的核心入口为parse()函数签名如下def parse(data, rawFalse, quietFalse)参数说明参数类型默认值作用datastring必填待解析的/etc/gshadow文件文本内容rawbooleanFalse为True时返回未处理的原始结构化数据保留[]quietbooleanFalse为True时抑制警告消息如平台兼容性提示返回值字典列表List of Dictionaries即上文 Schema 所示结构。从源码看parse()的第一步会调用jc.utils.compatibility(__name__, info.compatible, quiet)检查当前运行平台是否在linux/aix/freebsd兼容列表中并调用jc.utils.input_type_check(data)校验输入类型随后才进入实际的文本解析流程。六、源码级解析流程从文本到结构化数据jc/parsers/gshadow.py的解析流程非常清晰可拆解为以下步骤按行拆分data.splitlines()将整个文件内容按换行拆分为行列表过滤空行list(filter(None, cleandata))剔除空行避免空行产生脏记录跳过注释以#开头的行被continue跳过/etc/gshadow中的注释行不会进入输出冒号分段entry.split(:)将每行拆为group_name、password、administrators、members四个字段逗号拆分列表fields[2].split(,)与fields[3].split(,)将管理员与成员分别拆成字符串数组空列表规整非 raw 模式下_process()将[]替换为[]。其中第 3 步的注释过滤、第 5 步的多值拆分使该解析器能够正确处理包含syslog,joeuser这类多成员记录与#注释行的真实系统文件。七、真实数据验证CentOS 与 Ubuntu 平台差异仓库的测试 fixture 提供了两个真实平台的/etc/gshadow样例可直接验证解析器行为centos-7.7/gshadow.out大量系统组密码段为空字符串root:::形式服务类组为!如joeuser:!!::joeuserubuntu-18.04/gshadow.out系统组密码段多为*如root:*::且包含带成员的组如adm:*::syslog,joeuser。两种平台在解析后均统一输出为一致的 JSON 结构tests/test_gshadow.py 中test_gshadow_centos_7_7与test_gshadow_ubuntu_18_4两个测试用例即断言解析结果与对应 fixture JSON 完全一致此外test_gshadow_nodata验证空输入parse(, quietTrue)返回空列表[]保证了解析器对无数据场景的健壮性。八、实战场景与扩展用法将/etc/gshadow解析为 JSON 后可借助 jq 进行各类组管理审计# 列出所有含成员的组及其成员 $ cat /etc/gshadow | jc --gshadow | jq .[] | select(.members ! []) # 统计组数量 $ cat /etc/gshadow | jc --gshadow | jq length # 筛选密码字段为 !锁定的组 $ cat /etc/gshadow | jc --gshadow | jq .[] | select(.password !)若需 YAML 输出可在 jc 命令后追加-y参数转换在 Python 侧jc.parse(gshadow, data)返回的字典列表可直接用于脚本内逻辑判断或写入数据库。该解析器与 jc 项目中的 group 解析器/etc/group互为补充可共同覆盖 Linux 组管理场景的自动化分析需求。注意/etc/gshadow通常需要 root 权限读取实际使用时请结合系统权限与安全策略合理访问该文件。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc os_release 解析器将 /etc/os-release 转为 JSON 字典的别名解析器实现详解jc os_release 解析器将 /etc/os release 转为 JSON 字典的别名解析器实现详解 os_release 是 jcJSON Co开发工具jc 流式解析器 ping_s 实战将 ping / ping6 输出实时转换为 JSON Linesjc 流式解析器 ping_s 实战将 ping / ping6 输出实时转换为 JSON Lines jcJSON Convert提供了流式strea开发工具jc lsof 解析器详解将进程打开文件列表lsof转换为结构化 JSONjc lsof 解析器详解将进程打开文件列表lsof转换为结构化 JSON 本文以 jc/parsers/lsof.py https://link.git开发工具上一篇amd/realesrgan-256x256-tiles-amdnpu性能优化256x256 tile设计如何平衡速度与画质下一篇LibreNMS Docker性能优化7个提升监控效率的技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表