Fix Gitea CI runner labels and persist systemd hardening #46
Closed
codex
wants to merge 6 commits from
fix/gitea-ci-runner-labels into main
pull from: fix/gitea-ci-runner-labels
merge into: admin:main
admin:main
admin:fix/windows-acl-sid-enumeration
admin:fix/cd-release-runtime-readiness
admin:feature/documentation-consolidation
admin:fix/search-relevance-and-empty-reviews
admin:feature/toktom-platform-development-plan
admin:feature/production-deployment-readiness
admin:feature/delivery-first-risk-verification
admin:fix/admin-navigation-capabilities
admin:fix/uiux-visual-feedback
admin:feature/uiux-tunduk-corrections
admin:feature/frontend-pixel-perfect
admin:fix/runner-protecthome-rootless-socket
admin:fix/current-minjust-api-ingestion
admin:fix/rollback-image-digest-reference
admin:feature/release-manifest-contract
admin:feature/resumable-corpus-inventory
admin:feature/autonomous-review-workflow
admin:fix/rootless-docker-home
admin:fix/runner-installer-resume
admin:feature/infrastructure-deployment-phase-2
admin:feature/infrastructure-documentation-and-bootstrap
admin:fix/pr-40-review-feedback
admin:feature/tunduk-authenticated-frontend
admin:feature/search-benchmark-report
admin:feature/tax-profit-search-intent
admin:fix/search-status-order-and-empty-snippet
admin:feature/improve-legal-search-relevance
admin:fix/plain-search-snippets
admin:feature/polish-review-interface
admin:fix/unmapped-search-catalog-values
admin:feature/search-catalog-v1
admin:docs/relevance-legal-review
admin:fix/production-build-safety
admin:feature/production-deployment-baseline
admin:feature/search-review-drafts
admin:feature/search-review-lab
admin:docs/search-review-accessibility
admin:docs/search-review-interface-plan
admin:feature/search-api-contract
admin:feature/opensearch-alias-switch
admin:docs/frontend-design-readiness
admin:fix/company-registration-search
admin:feature/search-relevance-ranking
admin:docs/relevance-annotation-guide
admin:feature/search-relevance-baseline
admin:docs/project-status-handoff
admin:feature/local-opensearch-lab
admin:feature/opensearch-index-foundation
admin:feature/minjust-document-normalization
admin:feature/cbd-document-sync
admin:refactor/project-structure
admin:feature/export-from-last-cutoff
admin:docs/ai-skills-for-beginners
admin:feature/synology-deployment
admin:feature/telegram-secretary-bot
admin:codex/project-status-20260731
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Changes
akyldash-cirunner label in both workflows.ProtectHome=read-onlyin runner IaC and migrate only the known one-line unit difference.docker rundependency.Build architecture finding
Rootless BuildKit inside the current job container would require weaker seccomp/AppArmor or the discouraged no-process-sandbox mode. A disposable separate VM running rootless BuildKit, reached with a short-lived mTLS
buildctlconnection, remains the recommended option for the required image builds. This is not confirmed as the cause of run 53; that run failed before Docker builds.Confirmed CI failure and fix
The full log for task 305 identified
Check host audit root guardas the failing step (exit 1). Previous backend (37 tests, 1 skipped), Telegram (6), backup/restore (16), recovery host identity guard, and verifier helper guard steps passed. Reproduction withEUID=0andbash -xshowed the test invoked the audit as root, then failed because it expected the non-root denial message. Gitea job commands run as root in the job container. The test now usessetprivto run the audit as UID 65534 when the test starts as root; the production root guard is unchanged. Failure output now includes the audit exit code and captured output.Latest CI result
Fix commit
d178d64is pushed. Smoke run 56 passed; main CI run 55 failed. The current API account cannot access its job log: the per-run jobs API returns an empty list and the repository-wide jobs API is owner-only (403). Therefore the next failed step is not known; no new cause is inferred.Validation
Local host audit root guard, recovery host identity guard, verifier helper guard, shell syntax, and diff checks pass.
Independent audit of head
5025152e02a9e06ccd78f6558c58ad2cec52059dagainst currentmain(b845316ee70d8dcb3b31e8b552baac63067188b2):failure(after 14s) and smoke run #58success. The accessible jobs list for #57 is empty, so the failing step and cause are unconfirmed.akyldash-cilabel, unprivileged root-guard checks, and isolated Caddy/Kaniko actions intomain. Currentmainpassed CI #103 and smoke #104.mainin eight files. Merging its current tree would restore directdocker buildand a Caddy binary download in the job, and remove newer corpus/release documentation.Please do not merge this branch as-is to address CI #57. The
ProtectHome=read-onlyand runner-log ACL proposals should be evaluated against current host evidence and, if still needed, submitted as a focused change from currentmain; they should not be discarded or ported automatically. This is an initial audit only; no merge or close action was taken.Follow-up assessment of head
5025152e02a9e06ccd78f6558c58ad2cec52059dagainstmaind2fb4b81c0192b17ced3c41ee22791008920b867:akyldash-cilabel, unprivileged guard helper, and isolated Caddy/Kaniko image checks are already inmain; current CI/smoke have passed there. PR #46 is unmergeable and its branch tree would remove newer corpus work and return CI to directdocker build. I recommend closing this PR as superseded, without merging it.ProtectHome=yes, while the runner service usesDOCKER_HOST=unix:///run/user/<runner UID>/docker.sockand explicitly lists that path inReadWritePaths. systemd makes/run/userinaccessible withProtectHome=yes;read-onlykeeps it visible (systemd.exec: https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#ProtectHome=). Earlier owner evidence reported a liveread-onlyoverride. If still true, persist and test only the necessary unit/socket access from currentmainbefore any installer rerun; avoid importing the old workflow or docs wholesale.codexACL on/var/log/akyldash-runner/act_runner.logis not justified by the CI issue. The unit writes runner daemon output to that file, while recovery docs direct operators tosystemctl statusandjournalctl; neither provides the missing Gitea job-step output. Grantingcodexdirectory traversal and log read would expand access to runner task metadata. Keep that change out unless a separate, explicit need and security review establish it. The old observation of file mode 0644 alone does not establish effective access through its 0750 parent.No host configuration, code, PR state, or permissions were changed in this assessment.
Closing disposition for head
5025152e02a9e06ccd78f6558c58ad2cec52059dagainst currentmain84ae32b8a3c1a2dbba2ec3cb9576405a606b95a0:0e276ae652fb56ecda043d083e17a715c1f62063, supplied theakyldash-cilabel, unprivileged guard coverage, and isolated Caddy/Kaniko checks. These are present in currentmain.84ae32b8a3c1a2dbba2ec3cb9576405a606b95a0after CI #121, smoke #122 and formal APPROVED #266, supplied the justifiedProtectHome=read-onlyinstaller change while retaining the existing/run/user/$runner_uidwritable carve-out. It did not grantcodexrunner-log access.docker buildand remove newer corpus/release work. The proposed runner-log ACL has no demonstrated need and is not being ported.All justified changes have a reviewed replacement in
main. I am closing this superseded PR without merge or branch deletion.Pull request closed