mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* feat(sandbox): allow opt-out of mandatory deny via explicit allow rules
Mandatory deny patterns (.env, .aws, .ssh, .gcloud, .kube, .gnupg,
.docker/config.json, .git/config) can now be opted out by listing the
exact literal post-expansion path in policy filesystem.allow_read /
allow_write, OR via --sandbox-allow read=... / write=... at runtime.
Both channels are treated at par.
Suppression is exact-match. Listing the CWD-absolute or HOME-absolute
form of a dangerous file additionally suppresses its **/<file> glob
sibling on the same direction so a single opt-out is sufficient.
Broad globs (${CWD}/**) and relative paths in user allow lists do not
suppress. The unnamed absolute form remains denied. .git/hooks is
unconditional and never suppressible (arbitrary code execution risk).
GetMandatoryDenyPatterns now returns split DenyRead / DenyWrite
slices and reports SuppressedRead / SuppressedWrite for audit. Both
translators emit per-direction deny rules and log.Warnf each
suppression. On Linux/bubblewrap, the tmpfs hide is restricted to the
intersection of DenyRead and DenyWrite; one-sided suppression falls
back to /dev/null (write) or the user's allow_read --ro-bind (read).
bwrap has no primitive that allows writes while denying reads, so
write-only opt-outs warn that the read-side mandatory deny is
unenforceable.
Updates docs/sandbox.md to document the opt-out, exact-match
semantics, and the Linux platform limitation. Updates pmg-e2e.yml to
create ./.env so the sandbox e2e test exercises the BLOCK case.
Closes #232
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: Code review fixes
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.5 KiB
1.5 KiB
Configuration
PMG supports local configuration through a configuration file. To create the default configuration file, run:
pmg setup install
To see the configuration file path and activated configuration, run:
pmg setup info
To edit configuration file:
pmg setup edit
See config template for the configuration schema.
Environment Variables
Any configuration key can be overridden using environment variables, without modifying the config file. This is useful for CI/CD pipelines or temporary overrides.
Format: PMG_<KEY> where the key is the config key uppercased, with nested keys joined by _.
| Config key | Environment variable |
|---|---|
transitive |
PMG_TRANSITIVE |
paranoid |
PMG_PARANOID |
proxy_mode |
PMG_PROXY_MODE |
proxy_install_only |
PMG_PROXY_INSTALL_ONLY |
verbosity |
PMG_VERBOSITY |
skip_event_logging |
PMG_SKIP_EVENT_LOGGING |
sandbox.enabled |
PMG_SANDBOX_ENABLED |
dependency_cooldown.enabled |
PMG_DEPENDENCY_COOLDOWN_ENABLED |
cloud.enabled |
PMG_CLOUD_ENABLED |
Example:
# Enable paranoid mode without editing the config file
PMG_PARANOID=true pmg npm install express
# Restrict proxy to install commands only
PMG_PROXY_INSTALL_ONLY=true pmg npm install express
Precedence (highest to lowest):
- CLI flags
- Environment variables (
PMG_*) - Config file (
config.yml) - Built-in defaults