2.0 KiB
2.0 KiB
MetaPlugin · Filename Parser — Rationale
What deviation / exception is being requested
metapluginfilenameparser-plugin runs user: 0:0.
Why it is necessary
The metamesh-plugin-* images declare no USER and have always run as root, both
when MetaSort spawns them and when a MetaFeeder bundles them as an enrichment
sidecar. This listing is a packaging change — the same image, started by Maison
instead of by MetaSort — so it keeps the runtime user the image was built and
validated with.
Security mitigations in place
- Public ingress terminates at the AppShield sidecar (
ghcr.io/yundera/appshield:2.0.9), which gates every path behind the PCS's Authelia SSO over OIDC. The plugin carries no Caddy labels and publishes no host port, so/processand/configureare reachable only from thepcsDocker network. - The container mounts no user directories — not
/DATA/Documents,/DATA/Downloads,/DATA/Mediaor/DATA/Gallery. It binds no host path at all. It reads the files it works on over MetaCore's WebDAV, never from a bind mount. - It holds no credentials of its own: keys arrive per-caller over
/configureand are never written to this app's storage. cpu_sharesand a hardmem_limit(swap disabled) set on every service; image tags pinned; no:latest.
Alternatives considered and rejected
- Run as
$PUID:$PGID. Not validated for these images; a uid change belongs in the plugin image, not in a store listing that is otherwise a pure repackaging. - No AppShield gate, no public route at all. Rejected: the tile would have no way to
show whether the plugin is alive, and
/manifestis the only status surface a headless plugin has. - Expose it unauthenticated. Rejected outright —
/processtakes URLs and does work on request, and/configureaccepts credentials.
Data protection
The plugin holds no user media and no user account. It is stateless: there is nothing to back up, and a reinstall loses nothing.