the-custodian/docs/changes/CUST-WP-0073/existing-k3s-host-r1/derive.py
codex 9f1ea088ef
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Reject generated-only commits / generated-commit-guard (push) Successful in 10s
Pin existing k3s hardening candidate and runtime review gates
2026-10-19 14:02:59 +02:00

14 lines
954 B
Python

import hashlib,json,os,re,stat
from pathlib import Path
p=Path('/etc/systemd/system/k3s.service')
expected='b5398c385430ce225faadc1f3724597fe4b05dd999a04b8abbca64d4b0d68c0e'
s=p.lstat();raw=p.read_bytes()
assert stat.S_ISREG(s.st_mode) and not p.is_symlink() and (s.st_uid,s.st_gid,s.st_dev,s.st_ino)==(0,0,2049,7875)
assert hashlib.sha256(raw).hexdigest()==expected
# Exact one-argument change, with all other unit bytes retained privately.
new,count=re.subn(rb'(--write-kubeconfig-mode(?:=|[ \t]+)[\x22\x27]?)644\b',rb'\g<1>600',raw)
assert count==1
print(json.dumps({'unit_preimage_sha256':expected,'unit_candidate_sha256':hashlib.sha256(new).hexdigest(),
'changed_argument_count':count,'same_length':len(new)==len(raw),'bytes_changed':sum(a!=b for a,b in zip(raw,new)),
'env_file_readable_without_sudo':os.access('/etc/systemd/system/k3s.service.env',os.R_OK),
'candidate_written':False,'raw_unit_emitted':False,'credential_content_read':False}))