Default security baseline
Out of the box, executions run with:- non-root process user (
sandbox, uid 100) - read-only root filesystem (
readonlyRootFs: true) - writable tmpfs only at
/sandboxand/tmp - network disabled (
network: "none") - resource limits (timeout, CPU, memory, PID count)
- secret masking on stdout/stderr when secrets are configured
Where to set security values
| Control | CLI | Config file | API (/execute) | Library |
|---|---|---|---|---|
| Network mode | --net | defaults.network | options.network | new DockerIsol8({ network }) |
| Filter allow rules | --allow | network.whitelist | options.networkFilter.whitelist | networkFilter.whitelist |
| Filter deny rules | --deny | network.blacklist | options.networkFilter.blacklist | networkFilter.blacklist |
| Seccomp mode/profile | not via run flag | security.seccomp, security.customProfilePath | options.security.* | security.* |
| PID limit | --pids-limit | no default key | options.pidsLimit | pidsLimit |
| Root FS writability | No run override | no default key | options.readonlyRootFs | readonlyRootFs |
| Secrets masking source | --secret KEY=VALUE | no default key | options.secrets | secrets |
The server merges config defaults with per-request
options. Request-level options win for that execution.Network modes
| Mode | Behavior | Use for |
|---|---|---|
none | outbound network blocked | safest default for untrusted code |
filtered | outbound routed through in-container proxy + policy rules | controlled external API access |
host | unrestricted host network | trusted workloads only |
Setting filtered mode policy
- CLI
- Config
- API
- Library
How filtered enforcement works
For pooled containers in filtered mode, cleanup flushes container OUTPUT iptables rules before reuse.
Seccomp modes
Available values forsecurity.seccomp:
strict(default)unconfinedcustom(requiressecurity.customProfilePath)
- Config
- API
- Library
In
strict mode, isol8 applies the built-in seccomp profile. Standalone server binaries include an embedded fallback copy so strict mode remains available even when profile files are not present on disk. If strict/custom profile loading fails, execution fails rather than running without seccomp.Filesystem and process guards
/sandboxis writable and executable (required for native extensions and installed packages)/tmpis writable but mountednoexecpidsLimitconstrains process fan-outreadonlyRootFskeeps root filesystem immutable unless explicitly disabled
- CLI
- API
- Library
Secret masking behavior
Secrets are injected as environment variables and then masked from stdout/stderr by value matching.- CLI
- API
- Library
FAQ
Do I need both allow and deny lists in filtered mode?
Do I need both allow and deny lists in filtered mode?
No. You can use either. If both are provided, blacklist matches are denied even when whitelist would allow.
Can I configure seccomp from `isol8 run` flags?
Can I configure seccomp from `isol8 run` flags?
Not in the current CLI
run flags. Use isol8.config.json, API options.security, or library options.Why keep `/sandbox` executable but `/tmp` noexec?
Why keep `/sandbox` executable but `/tmp` noexec?
Native extensions and runtime package installs need executable paths. isol8 uses
/sandbox for that and keeps /tmp non-executable to reduce abuse surface.Troubleshooting
- Filtered mode blocks expected domains: test your regex patterns; remember they are hostname checks and blacklist wins.
- Unexpected open egress: verify
networkis nothostin config defaults or request options. - Seccomp custom profile errors: ensure
customProfilePathexists and contains valid seccomp JSON. - Secret still appears in downloaded artifacts: add explicit redaction before writing files you later retrieve.
Related pages
Execution guide
Runtime flow, modes, request shape, and execution lifecycle.
Option mapping
Exact mapping for CLI flags, config keys, API options, and library params.
Configuration reference
Full schema defaults, limits, and production-safe baseline config.
Troubleshooting
Common runtime and server failures with quick resolution paths.