harden MCPHub deployer credential boundary
This commit is contained in:
1 parent
ab671a6396
commit
9455a79dc2
1 file changed
+49
-8
@@ -17,15 +17,21 @@ Use these paths directly. Do not search the filesystem for alternatives.
|
|||||||
- Container: `MCPHub`
|
- Container: `MCPHub`
|
||||||
- UI/base URL: `http://192.168.1.2:8787`
|
- UI/base URL: `http://192.168.1.2:8787`
|
||||||
- Operational source/build tree: `/mnt/nvme-storage/appdata/MCPHub/build/repo`
|
- Operational source/build tree: `/mnt/nvme-storage/appdata/MCPHub/build/repo`
|
||||||
- Dockerfile: `platform/mcphub/Dockerfile` below that tree
|
- Dockerfile: `/mnt/nvme-storage/appdata/MCPHub/build/repo/platform/mcphub/Dockerfile`
|
||||||
- Single server and client registry: `config/mcp-registry.json`
|
- Single server and client registry: `/mnt/nvme-storage/appdata/MCPHub/build/repo/config/mcp-registry.json`
|
||||||
- Registry renderer: `platform/mcphub/configure-settings.py` (normally unchanged)
|
- Registry renderer: `/mnt/nvme-storage/appdata/MCPHub/build/repo/platform/mcphub/configure-settings.py` (normally unchanged)
|
||||||
- Unraid template: `config/unraid-templates/my-MCPHub.xml`
|
- Versioned Unraid-template source: `/mnt/nvme-storage/appdata/MCPHub/build/repo/config/unraid-templates/my-MCPHub.xml`
|
||||||
|
- Live DockerMan template: `/boot/config/plugins/dockerMan/templates-user/my-MCPHub.xml`
|
||||||
- Persistent state: `/mnt/nvme-storage/appdata/MCPHub`
|
- Persistent state: `/mnt/nvme-storage/appdata/MCPHub`
|
||||||
- Secrets: `/mnt/nvme-storage/appdata/MCPHub/secrets/<server>.env`, mode `0600`
|
- Secrets: `/mnt/nvme-storage/appdata/MCPHub/secrets/<server>.env`, mode `0600`
|
||||||
- Client bearer token: `/mnt/nvme-storage/appdata/MCPHub/client-token`
|
- Client bearer token: `/mnt/nvme-storage/appdata/MCPHub/client-token`
|
||||||
- Individual route: `http://192.168.1.2:8787/mcp/<server>`
|
- Individual route: `http://192.168.1.2:8787/mcp/<server>`
|
||||||
|
|
||||||
|
The versioned template and the live DockerMan template are different files.
|
||||||
|
Keep their image tag and required mounts aligned. If the versioned template is
|
||||||
|
missing, copy the live template to that exact versioned path once; do not search
|
||||||
|
for another template and do not infer a replacement from unrelated containers.
|
||||||
|
|
||||||
The operational build tree is persistent and covered by the normal Unraid
|
The operational build tree is persistent and covered by the normal Unraid
|
||||||
Appdata backup. The checkout below is legacy and MUST NOT be used or inspected
|
Appdata backup. The checkout below is legacy and MUST NOT be used or inspected
|
||||||
for MCPHub work:
|
for MCPHub work:
|
||||||
@@ -47,14 +53,35 @@ restart discovery after a phase has completed.
|
|||||||
Check only:
|
Check only:
|
||||||
|
|
||||||
1. `MCPHub` container state, image tag, mounts, and network.
|
1. `MCPHub` container state, image tag, mounts, and network.
|
||||||
2. The four fixed production files listed above.
|
2. The fixed Dockerfile, registry, renderer, and both template paths above.
|
||||||
3. Existing MCPHub server names to avoid duplication.
|
3. Existing MCPHub server names to avoid duplication.
|
||||||
4. Target service reachability or the upstream release.
|
4. Target service reachability or the upstream release.
|
||||||
5. Required secret-file presence; never print its values.
|
5. Required secret-file presence; never print its values.
|
||||||
6. Current Git availability, if any.
|
6. Current Git availability, if any.
|
||||||
|
|
||||||
Never run a filesystem-wide `find`. Never read unrelated Compose stacks,
|
Never run `find` to rediscover a listed path. Never read unrelated Compose
|
||||||
repositories, documentation trees, or all container logs.
|
stacks, repositories, documentation trees, container logs, container
|
||||||
|
environments, application configs, home directories, or secret stores.
|
||||||
|
|
||||||
|
### Credential boundary — mandatory stop
|
||||||
|
|
||||||
|
Credentials and account configuration are user-supplied inputs, not discovery
|
||||||
|
targets. This rule overrides the desire to complete a deployment or live test.
|
||||||
|
|
||||||
|
- Never inspect another container, service, environment, mount, config file,
|
||||||
|
mailbox, shell history, password manager, or secret directory to obtain or
|
||||||
|
infer credentials.
|
||||||
|
- Never reuse credentials found in an existing mail server or another app
|
||||||
|
unless the user explicitly names that exact source and authorizes reuse.
|
||||||
|
- Check only whether the dedicated fixed secret file for this server exists;
|
||||||
|
do not read its values during preflight.
|
||||||
|
- If the MCP needs credentials or account settings and the dedicated file is
|
||||||
|
absent or incomplete, finish all credential-independent build work, install
|
||||||
|
the server disabled, and stop before live authentication. Ask the user for
|
||||||
|
the missing fields and state the exact secret-file path.
|
||||||
|
- Do not substitute inspection of an existing service for that question.
|
||||||
|
- A missing credential may reduce verification to build plus MCP handshake; it
|
||||||
|
is never permission to investigate the user's infrastructure.
|
||||||
|
|
||||||
### 2. Classify once
|
### 2. Classify once
|
||||||
|
|
||||||
@@ -83,6 +110,11 @@ contradicts it.
|
|||||||
Ask only for information that cannot be derived safely: credentials, a
|
Ask only for information that cannot be derived safely: credentials, a
|
||||||
material license decision, or an ambiguous destructive permission.
|
material license decision, or an ambiguous destructive permission.
|
||||||
|
|
||||||
|
For mail-related MCPs, repository inspection may determine which field names
|
||||||
|
are required, but the IMAP/SMTP host, user, password/token, sender identity, and
|
||||||
|
TLS choices must come from the user or the dedicated secret file. The presence
|
||||||
|
of a Docker mail server does not answer those questions.
|
||||||
|
|
||||||
### 4. Implement the smallest change
|
### 4. Implement the smallest change
|
||||||
|
|
||||||
Modify only the necessary fixed production files. Rules:
|
Modify only the necessary fixed production files. Rules:
|
||||||
@@ -96,7 +128,8 @@ Modify only the necessary fixed production files. Rules:
|
|||||||
- Preserve existing users, bearer keys, prompts, resources, enabled states,
|
- Preserve existing users, bearer keys, prompts, resources, enabled states,
|
||||||
and per-tool toggles.
|
and per-tool toggles.
|
||||||
- Build a new image tag. Never overwrite the tag currently running.
|
- Build a new image tag. Never overwrite the tag currently running.
|
||||||
- Update the Unraid template to the exact new tag.
|
- Update both the versioned template source and the live DockerMan template to
|
||||||
|
the exact new tag. Do not rebuild `template.xml` inside an upstream image.
|
||||||
|
|
||||||
For servers exposing many tools, install disabled first. After a successful
|
For servers exposing many tools, install disabled first. After a successful
|
||||||
local test, enable only the required tool groups in MCPHub. Do not publish an
|
local test, enable only the required tool groups in MCPHub. Do not publish an
|
||||||
@@ -111,6 +144,11 @@ Preserve all Appdata and mounts.
|
|||||||
Never restart Athena, Router, Qwen, Hermes, OpenWebUI, WireGuard, Unraid, or
|
Never restart Athena, Router, Qwen, Hermes, OpenWebUI, WireGuard, Unraid, or
|
||||||
unrelated containers for an MCPHub deployment.
|
unrelated containers for an MCPHub deployment.
|
||||||
|
|
||||||
|
Do not use unrestricted host shell access during repository analysis,
|
||||||
|
classification, or credential preflight. Use it only after the exact file
|
||||||
|
changes, new image tag, verification steps, and rollback tag are known. Its
|
||||||
|
scope is then limited to those declared paths and the `MCPHub` container.
|
||||||
|
|
||||||
### 6. Prove the result
|
### 6. Prove the result
|
||||||
|
|
||||||
Verify, in this order:
|
Verify, in this order:
|
||||||
@@ -123,6 +161,9 @@ Verify, in this order:
|
|||||||
6. No test download, queue item, write, or second backend remains.
|
6. No test download, queue item, write, or second backend remains.
|
||||||
7. If installed disabled, return it to disabled after the temporary test.
|
7. If installed disabled, return it to disabled after the temporary test.
|
||||||
|
|
||||||
|
If credentials are unavailable, steps 3 and 5 may be recorded as blocked.
|
||||||
|
Never weaken the credential boundary merely to make the live probe pass.
|
||||||
|
|
||||||
A running container alone is not success. Never claim install, test,
|
A running container alone is not success. Never claim install, test,
|
||||||
registration, Git push, or backup without observing its result.
|
registration, Git push, or backup without observing its result.
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user