OpenShell Security Best Practices — Controls, Risks, and Configuration Guidance
OpenShell Security Best Practices — Controls, Risks, and Configuration Guidance
OpenShell enforces sandbox security across four layers: network, filesystem, process, and inference. This page documents every configurable control, its default, what it protects, and the risk of relaxing it.
For the full policy YAML schema, refer to the Policy Schema. For the architecture of each enforcement layer, refer to Architecture.
If you use NemoClaw to run OpenClaw assistants, its Security Best Practices guide covers additional entrypoint-level controls, policy presets, provider trust tiers, and posture profiles specific to the NemoClaw blueprint.
Enforcement Layers
OpenShell applies security controls at two enforcement points.
OpenShell locks static controls at sandbox creation and requires destroying and recreating the sandbox to change them.
You can update dynamic controls on a running sandbox with openshell policy set.
Network Controls
The CONNECT proxy and OPA policy engine enforce all network controls at the gateway level.
Deny-by-Default Egress
Every outbound connection from the sandbox goes through the CONNECT proxy.
The proxy evaluates each connection against the OPA policy engine.
If no network_policies entry matches the destination host, port, and calling binary, the proxy denies the connection.
Network Namespace Isolation
The sandbox runs in a dedicated Linux network namespace with a veth pair.
All traffic routes through the host-side veth IP (10.200.0.1) where the proxy listens.
Even if a process ignores proxy environment variables, it can only reach the proxy.
Binary Identity Binding
The proxy identifies which binary initiated each connection by reading /proc/<pid>/exe (the kernel-trusted executable path).
It walks the process tree for ancestor binaries and parses /proc/<pid>/cmdline for script interpreters.
The proxy SHA256-hashes each binary on first use (trust-on-first-use). If someone replaces a binary mid-session, the hash mismatch triggers an immediate deny.
L4-Only vs L7 Inspection
The protocol field on an endpoint controls whether the proxy inspects individual HTTP requests inside the tunnel.
Enforcement Mode (audit vs enforce)
When protocol: rest is active, the enforcement field controls whether the proxy blocks or logs rule violations.
TLS Handling
The proxy auto-detects TLS on every tunnel by peeking the first bytes. When a TLS ClientHello is detected, the proxy terminates TLS transparently using a per-sandbox ephemeral CA. This enables credential injection and L7 inspection without explicit configuration.
SSRF Protection
After OPA policy allows a connection, the proxy resolves DNS and rejects connections where the resolved IP is internal (loopback, link-local, or RFC 1918 private).
Operator Approval
When the agent requests an endpoint not in the policy, OpenShell blocks it and surfaces the request in the TUI for operator review. The system merges approved endpoints into the sandbox’s policy as a new durable revision.
Filesystem Controls
Landlock LSM restricts which paths the sandbox process can read or write at the kernel level.
Landlock LSM
Landlock enforces filesystem access at the kernel level.
Paths listed in read_only receive read-only access.
Paths listed in read_write receive full access.
All other paths are inaccessible.
Read-Only vs Read-Write Paths
The policy separates filesystem paths into read-only and read-write groups.
Path Validation
OpenShell validates policies before they take effect.
Process Controls
The sandbox supervisor drops privileges, applies seccomp filters, and enforces process-level restrictions during startup.
Privilege Drop
The sandbox process runs as a non-root user after explicit privilege dropping.
Seccomp Filters
A BPF seccomp filter restricts which socket domains the sandbox process can use.
Enforcement Application Order
The sandbox supervisor applies enforcement in a specific order during process startup.
This ordering is intentional: privilege dropping needs /etc/group and /etc/passwd, which Landlock subsequently restricts.
- Network namespace entry (
setns). - Privilege drop (
initgroups+setgid+setuid). - Landlock filesystem restrictions.
- Seccomp socket domain filters.
Inference Controls
OpenShell routes all inference traffic through the gateway to isolate provider credentials from the sandbox.
Routed Inference through inference.local
The proxy intercepts HTTPS CONNECT requests to inference.local and routes matching inference API requests through the sandbox-local router.
The agent never receives the provider API key.
Gateway Security
The gateway secures communication between the CLI, sandbox pods, and external clients with mutual TLS and token-based authentication.
mTLS
Communication between the CLI, sandbox pods, and the gateway is secured by mutual TLS. OpenShell generates a cluster CA at bootstrap and distributes it through Kubernetes secrets.
SSH Tunnel Authentication
SSH connections to sandboxes pass through the gateway’s HTTP CONNECT tunnel with token-based authentication and HMAC-SHA256 handshake verification (NSSH1 protocol).
Common Mistakes
The following patterns weaken security without providing meaningful benefit.
Related Topics
- Policies for applying and iterating on sandbox policies.
- Policy Schema for the full field-by-field YAML reference.
- Default Policy for the built-in default policy breakdown.
- Gateway Auth for gateway authentication details.
- Architecture for the system architecture.
- NemoClaw Security Best Practices for entrypoint-level controls (capability drops, PATH hardening, build toolchain removal), policy presets, provider trust tiers, and posture profiles.