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>
59 lines
1.5 KiB
Markdown
59 lines
1.5 KiB
Markdown
# Configuration
|
|
|
|
PMG supports local configuration through a configuration file. To create the default configuration file, run:
|
|
|
|
```bash
|
|
pmg setup install
|
|
```
|
|
|
|
To see the configuration file path and activated configuration, run:
|
|
|
|
```bash
|
|
pmg setup info
|
|
```
|
|
|
|
To edit configuration file:
|
|
|
|
```bash
|
|
pmg setup edit
|
|
```
|
|
|
|
See [config template](../config/config.template.yml) 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:**
|
|
|
|
```bash
|
|
# 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):**
|
|
|
|
1. CLI flags
|
|
2. Environment variables (`PMG_*`)
|
|
3. Config file (`config.yml`)
|
|
4. Built-in defaults
|
|
|