mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-08-29 20:12:14 +00:00
lxc-attach into an unprivileged guest writes /proc/<pid>/uid_map, which needs CAP_SETUID in the parent user namespace. NoNewPrivileges drops CAP_SETUID from the effective set and also stops lxc-attach falling back to the setuid newuidmap/newgidmap helpers, so the socket probe dies with "write_id_mapping: 61 Operation not permitted". install.sh already relaxed NoNewPrivileges for this, but only when the agent was installed with --enable-commands. Command execution is also togglable from the server afterwards: applyRemoteConfig starts the command client without rewriting the unit. An agent installed without the flag and switched on later therefore ends up able to run commands and unable to attach to unprivileged guests, so Docker inside every unprivileged LXC disappears from the Proxmox page. The probe failure is logged at debug level and retried on every poll, so the surface looks empty rather than broken while the agent re-probes the whole guest list. Grant CAP_SETUID/CAP_SETGID to any PVE agent rather than gating on the install-time flag, so the later toggle lands on a unit that can attach. Ambient capabilities restore exactly the privilege lxc-attach needs and leave the rest of the sandbox intact; the existing install-time relaxation is unchanged. Verified on a live PVE node. With the hardened unit the probe succeeded only on the three privileged guests and failed on every unprivileged one. After the ambient grant CapEff regained CAP_SETUID and both unprivileged Docker guests were discovered, taking that node from one Docker LXC to three. |
||
|---|---|---|
| .. | ||
| dev | ||
| eval | ||
| installtests | ||
| intelligence_lab | ||
| lib | ||
| lint-fixer | ||
| release_control | ||
| tests | ||
| .go-version | ||
| audit-private-boundary.sh | ||
| backfill-release-assets.sh | ||
| build-release.sh | ||
| bundle.manifest | ||
| bundle.sh | ||
| check-bench-regression.sh | ||
| check-workflow-dispatch-inputs.py | ||
| check_public_docs.py | ||
| check_telemetry_schema_parity.py | ||
| clean-mock-alerts.sh | ||
| cleanup.sh | ||
| cloud-backup.sh | ||
| com.pulse.hot-dev.plist.template | ||
| conformance-smoke.sh | ||
| demo_public_browser_smoke.cjs | ||
| dev-check.sh | ||
| dev-deploy-agent.sh | ||
| dev-launchd-setup.sh | ||
| dev-launchd-wrapper.sh | ||
| dev-prepush.sh | ||
| docker-build.sh | ||
| ensure_test_assets.sh | ||
| exclusive-lock.mjs | ||
| generate-pulse-intelligence-docs.go | ||
| generate-release-notes.sh | ||
| generate-self-hosted-feature-catalog.go | ||
| generate-types.go | ||
| hot-dev-bg.sh | ||
| hot-dev.sh | ||
| install-container-agent.sh | ||
| install-docker.sh | ||
| install-go-toolchain.sh | ||
| install-mcp.ps1 | ||
| install-mcp.sh | ||
| install.ps1 | ||
| install.sh | ||
| package-helm-chart.sh | ||
| patrol_e2e_matrix.sh | ||
| pulse-auto-update.sh | ||
| release-preflight-worker.sh | ||
| release_asset_common.sh | ||
| release_candidate_manifest.py | ||
| release_ldflags.sh | ||
| release_update_key.go | ||
| remerge-parallel.sh | ||
| render_installers.go | ||
| repo-boundary-paid-surface.allowlist | ||
| repo-boundary-private-implementation.baseline | ||
| run-release-preflight.sh | ||
| run_cloud_public_signup_smoke.sh | ||
| run_demo_public_browser_smoke.sh | ||
| run_hosted_staging_smoke.sh | ||
| security_review_auth_credentials.sh | ||
| session-handoff.sh | ||
| standalone.manifest | ||
| sync-production-config.sh | ||
| sync_chart_release_metadata.py | ||
| telemetry_adoption_report.py | ||
| test-vm-disk.sh | ||
| toggle-mock.sh | ||
| trigger-release-dry-run.sh | ||
| trigger-release.sh | ||
| trigger-stable-patch.sh | ||
| uninstall-sensor-proxy.sh | ||
| validate-published-release.sh | ||
| validate-release.sh | ||