:用 jc 將 /etc/gshadow 組影子文件轉(zhuǎn)換為 JSON)
開發(fā)工具【免費下載鏈接】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點擊查看免費下載本篇技術(shù)指南聚焦 jcJSON Convert項目中的gshadow文件解析器講解如何將 Linux 系統(tǒng)下的/etc/gshadow組影子文件通過 CLI 管道或 Python 模塊調(diào)用轉(zhuǎn)換為結(jié)構(gòu)化 JSON/YAML 數(shù)據(jù)并深入解析其底層實現(xiàn)字段拆分、空列表規(guī)整、注釋過濾等讓讀者能夠?qū)⒃摻馕銎髦苯咏尤胂到y(tǒng)運維與自動化腳本中。一、/etc/gshadow與 jc 的 gshadow 解析器/etc/gshadow是類 Unix 系統(tǒng)Linux 等中與/etc/group對應(yīng)的影子文件用于存放組密碼哈希、組管理員列表與組成員列表等敏感信息通常僅 root 用戶可讀。在 jc 項目中g(shù)shadow 解析器 將該文本文件逐行解析為 JSON 數(shù)組便于通過jq等工具進一步篩選與處理。該解析器在 parser 注冊表 中以gshadow名稱注冊標(biāo)記為file類型tags兼容linux、aix、freebsd三種平臺當(dāng)前版本為 1.3作者 Kelly Brazil。二、快速上手CLI 用法與模塊用法2.1 CLI 管道用法最直接的方式是讀取/etc/gshadow并通過--gshadow參數(shù)交給 jc 解析$ cat /etc/gshadow | jc --gshadow2.2 Python 模塊用法在 Python 腳本中可通過jc.parse()統(tǒng)一入口調(diào)用import jc result jc.parse(gshadow, gshadow_file_output)其中g(shù)shadow_file_output為/etc/gshadow文件內(nèi)容的字符串返回值為字典列表List of Dictionaries可直接用于后續(xù)業(yè)務(wù)處理或序列化輸出。三、輸出 Schema四個結(jié)構(gòu)化字段gshadow解析器輸出的每條記錄包含 4 個字段schema 定義如下[ { group_name: string, password: string, administrators: [ string ], members: [ string ] } ]字段含義與/etc/gshadow每行的四個冒號分隔段一一對應(yīng)字段類型來源段說明group_namestring第 1 段組名對應(yīng)/etc/group中的組passwordstring第 2 段組密碼字段通常為空、*、!或加密哈希administrators字符串?dāng)?shù)組第 3 段組管理員用戶名列表按逗號拆分members字符串?dāng)?shù)組第 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保留未處理數(shù)據(jù)$ 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(,)的結(jié)果——當(dāng)某組沒有管理員或成員時第三、四段為空字符串.split(,)會產(chǎn)生[]這樣的含一個空字符串的列表而普通模式經(jīng)過 gshadow.py 中的_process()后處理會將[]規(guī)整為空數(shù)組[]使輸出更符合直覺。這正是測試 fixture 中 ubuntu-18.04/gshadow.json 與 centos-7.7/gshadow.json 里administrators與members均為[]的原因。五、parse() 函數(shù) API 詳解gshadow解析器對外暴露的核心入口為parse()函數(shù)簽名如下def parse(data, rawFalse, quietFalse)參數(shù)說明參數(shù)類型默認值作用datastring必填待解析的/etc/gshadow文件文本內(nèi)容rawbooleanFalse為True時返回未處理的原始結(jié)構(gòu)化數(shù)據(jù)保留[]quietbooleanFalse為True時抑制警告消息如平臺兼容性提示返回值字典列表List of Dictionaries即上文 Schema 所示結(jié)構(gòu)。從源碼看parse()的第一步會調(diào)用jc.utils.compatibility(__name__, info.compatible, quiet)檢查當(dāng)前運行平臺是否在linux/aix/freebsd兼容列表中并調(diào)用jc.utils.input_type_check(data)校驗輸入類型隨后才進入實際的文本解析流程。六、源碼級解析流程從文本到結(jié)構(gòu)化數(shù)據(jù)jc/parsers/gshadow.py的解析流程非常清晰可拆解為以下步驟按行拆分data.splitlines()將整個文件內(nèi)容按換行拆分為行列表過濾空行l(wèi)ist(filter(None, cleandata))剔除空行避免空行產(chǎn)生臟記錄跳過注釋以#開頭的行被continue跳過/etc/gshadow中的注釋行不會進入輸出冒號分段entry.split(:)將每行拆為group_name、password、administrators、members四個字段逗號拆分列表fields[2].split(,)與fields[3].split(,)將管理員與成員分別拆成字符串?dāng)?shù)組空列表規(guī)整非 raw 模式下_process()將[]替換為[]。其中第 3 步的注釋過濾、第 5 步的多值拆分使該解析器能夠正確處理包含syslog,joeuser這類多成員記錄與#注釋行的真實系統(tǒng)文件。七、真實數(shù)據(jù)驗證CentOS 與 Ubuntu 平臺差異倉庫的測試 fixture 提供了兩個真實平臺的/etc/gshadow樣例可直接驗證解析器行為centos-7.7/gshadow.out大量系統(tǒng)組密碼段為空字符串root:::形式服務(wù)類組為!如joeuser:!!::joeuserubuntu-18.04/gshadow.out系統(tǒng)組密碼段多為*如root:*::且包含帶成員的組如adm:*::syslog,joeuser。兩種平臺在解析后均統(tǒng)一輸出為一致的 JSON 結(jié)構(gòu)tests/test_gshadow.py 中test_gshadow_centos_7_7與test_gshadow_ubuntu_18_4兩個測試用例即斷言解析結(jié)果與對應(yīng) fixture JSON 完全一致此外test_gshadow_nodata驗證空輸入parse(, quietTrue)返回空列表[]保證了解析器對無數(shù)據(jù)場景的健壯性。八、實戰(zhàn)場景與擴展用法將/etc/gshadow解析為 JSON 后可借助 jq 進行各類組管理審計# 列出所有含成員的組及其成員 $ cat /etc/gshadow | jc --gshadow | jq .[] | select(.members ! []) # 統(tǒng)計組數(shù)量 $ cat /etc/gshadow | jc --gshadow | jq length # 篩選密碼字段為 !鎖定的組 $ cat /etc/gshadow | jc --gshadow | jq .[] | select(.password !)若需 YAML 輸出可在 jc 命令后追加-y參數(shù)轉(zhuǎn)換在 Python 側(cè)jc.parse(gshadow, data)返回的字典列表可直接用于腳本內(nèi)邏輯判斷或?qū)懭霐?shù)據(jù)庫。該解析器與 jc 項目中的 group 解析器/etc/group互為補充可共同覆蓋 Linux 組管理場景的自動化分析需求。注意/etc/gshadow通常需要 root 權(quán)限讀取實際使用時請結(jié)合系統(tǒng)權(quán)限與安全策略合理訪問該文件。贊分享開發(fā)工具【免費下載鏈接】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點擊查看免費下載相關(guān)推薦jc os_release 解析器將 /etc/os-release 轉(zhuǎn)為 JSON 字典的別名解析器實現(xiàn)詳解jc os_release 解析器將 /etc/os release 轉(zhuǎn)為 JSON 字典的別名解析器實現(xiàn)詳解 os_release 是 jcJSON Co開發(fā)工具jc 流式解析器 ping_s 實戰(zhàn)將 ping / ping6 輸出實時轉(zhuǎn)換為 JSON Linesjc 流式解析器 ping_s 實戰(zhàn)將 ping / ping6 輸出實時轉(zhuǎn)換為 JSON Lines jcJSON Convert提供了流式strea開發(fā)工具jc lsof 解析器詳解將進程打開文件列表lsof轉(zhuǎn)換為結(jié)構(gòu)化 JSONjc lsof 解析器詳解將進程打開文件列表lsof轉(zhuǎn)換為結(jié)構(gòu)化 JSON 本文以 jc/parsers/lsof.py https://link.git開發(fā)工具上一篇amd/realesrgan-256x256-tiles-amdnpu性能優(yōu)化256x256 tile設(shè)計如何平衡速度與畫質(zhì)下一篇LibreNMS Docker性能優(yōu)化7個提升監(jiān)控效率的技巧創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考