cyber-security-engineer
// Security engineering workflow for OpenClaw privilege governance and hardening. Use for least-privilege execution, approval-first privileged actions, idle timeout controls, port + egress monitoring, and ISO 27001/NIST-aligned compliance reporting with mitigations.
Cyber Security Engineer
Requirements
Required tools:
python3(>= 3.8)openclawCLI (installed vianpmduring bootstrap, or pre-installed)npm(only needed for bootstrap ifopenclawis not already installed)- One of
lsof,ss, ornetstatfor port/egress checks stat,readlink(standard on macOS/Linux, used by the runtime hook installer)
Env vars (all optional, documented for configuration):
OPENCLAW_REQUIRE_POLICY_FILES— set to1to block privileged execution when policy files are missingOPENCLAW_REQUIRE_SESSION_ID— set to1to require a task session id for each privileged actionOPENCLAW_TASK_SESSION_ID— per-task session id (used whenOPENCLAW_REQUIRE_SESSION_ID=1)OPENCLAW_APPROVAL_TOKEN— if set, requires this token during the approval stepOPENCLAW_UNTRUSTED_SOURCE— set to1to flag the current content source as untrustedOPENCLAW_VIOLATION_NOTIFY_CMD— absolute path to a notifier binary (must also be allowlisted)OPENCLAW_VIOLATION_NOTIFY_ALLOWLIST— JSON array of allowed argv arrays, or comma-separated absolute pathsOPENCLAW_REAL_SUDO— override path to the real sudo binary (used by the runtime hook shim)OPENCLAW_PYTHON3— override path to python3 (used by the runtime hook shim)OPENCLAW_CYBER_SKILL_DIR— override path to the skill directory (used by the runtime hook shim)OPENCLAW_ALLOW_NONINTERACTIVE_SUDO— set to1to allow non-interactive sudo through the shim (default: blocked)OPENCLAW_PRIV_REASON— human-readable reason passed to the guarded execution wrapperOPENCLAW_VIOLATION_NOTIFY_STATE— override path to the notification state fileOPENCLAW_SKIP_PLIST_CONFIRM— set to1to skip the interactive confirmation before modifying the macOS LaunchAgent plist
Policy files (admin reviewed):
~/.openclaw/security/approved_ports.json~/.openclaw/security/command-policy.json~/.openclaw/security/egress_allowlist.json~/.openclaw/security/prompt-policy.json
Implement these controls in every security-sensitive task:
- Keep default execution in normal (non-root) mode.
- Request explicit user approval before any elevated command.
- Scope elevation to the minimum command set required for the active task.
- Drop elevated state immediately after the privileged command completes.
- Expire elevated state after 30 idle minutes and require re-approval.
- Monitor listening network ports and flag insecure or unapproved exposure.
- Monitor outbound connections and flag destinations not in the egress allowlist.
- If no approved baseline exists, generate one with
python3 scripts/generate_approved_ports.py, then review and prune. - Benchmark controls against ISO 27001 and NIST and report violations with mitigations.
Runtime Hook (sudo shim)
The script scripts/install-openclaw-runtime-hook.sh installs an opt-in sudo
shim at ~/.openclaw/bin/sudo. This shim shadows the system sudo binary by
prepending ~/.openclaw/bin to PATH in the OpenClaw gateway process.
What it does:
- Intercepts
sudoinvocations and routes them throughguarded_privileged_exec.py - Requires explicit interactive user approval before running any privileged command
- Enforces command policy allow/deny rules, audit logging, and a 30-minute idle timeout
- Blocks non-interactive sudo by default (prevents automated abuse)
- Passes through harmless flags (
-h,--version,-k,-l) directly to real sudo
What it does NOT do:
- It does not replace or modify the system sudo binary
- It does not grant itself any elevated permissions
- It only affects processes whose
PATHincludes~/.openclaw/binbefore/usr/bin
Opt-in: The hook is not installed by default. To enable it, run bootstrap with
ENFORCE_PRIVILEGED_EXEC=1. On macOS, the installer will prompt for confirmation
before modifying the gateway LaunchAgent plist. The shim can be removed at any time
by deleting ~/.openclaw/bin/sudo.
File Writes
This skill writes only to ~/.openclaw/ and the assessments/ directory inside the
skill folder. No files are written outside these two trees.
Under ~/.openclaw/ (user config/state):
~/.openclaw/security/approved_ports.json— generated port baseline (bygenerate_approved_ports.py)~/.openclaw/security/root-session-state.json— elevated session state (byroot_session_guard.py)~/.openclaw/security/privileged-audit.jsonl— append-only audit log (byaudit_logger.py)~/.openclaw/security/violation-notify-state.json— notification diff state (bynotify_on_violation.py)~/.openclaw/bin/sudo— opt-in sudo shim (byinstall-openclaw-runtime-hook.sh, see Runtime Hook section)~/.openclaw/logs/cyber-security-engineer-auto.log— auto-cycle run log (byauto_invoke_cycle.sh)
Under assessments/ (inside skill directory):
assessments/openclaw-assessment.json— compliance check resultsassessments/compliance-summary.json— structured summary for tools/integrationsassessments/compliance-dashboard.html— human-readable report pageassessments/port-monitor-latest.json— latest open-port scan outputassessments/egress-monitor-latest.json— latest outbound connection scan output
Temporary files:
- A short-lived temp file via
tempfile.NamedTemporaryFile(bygenerate_approved_ports.py) — auto-cleaned
No files are written to /usr/, /etc/, or any system directory.
Non-Goals (Web Browsing)
- Do not use web browsing / web search as part of this skill. Keep assessments and recommendations based on local host/OpenClaw state and the bundled references in this skill.
Files To Use
references/least-privilege-policy.mdreferences/port-monitoring-policy.mdreferences/compliance-controls-map.jsonreferences/approved_ports.template.jsonreferences/command-policy.template.jsonreferences/prompt-policy.template.jsonreferences/egress-allowlist.template.jsonscripts/preflight_check.pyscripts/root_session_guard.pyscripts/audit_logger.pyscripts/command_policy.pyscripts/prompt_policy.pyscripts/guarded_privileged_exec.pyscripts/install-openclaw-runtime-hook.shscripts/port_monitor.pyscripts/generate_approved_ports.pyscripts/egress_monitor.pyscripts/notify_on_violation.pyscripts/compliance_dashboard.pyscripts/live_assessment.py
Behavior
- Never keep root/elevated access open between unrelated tasks.
- Never execute root commands without an explicit approval step in the current flow.
- Enforce command allow/deny policy when configured.
- Require confirmation when untrusted content sources are detected (
OPENCLAW_UNTRUSTED_SOURCE=1+ prompt policy). - Enforce task session id scoping when configured (
OPENCLAW_REQUIRE_SESSION_ID=1). - If timeout is exceeded, force session expiration and approval renewal.
- Log privileged actions to
~/.openclaw/security/privileged-audit.jsonl(best-effort). - Flag listening ports not present in the approved baseline and recommend secure alternatives for insecure ports.
- Flag outbound destinations not present in the egress allowlist.
Output Contract
When reporting status, include:
- The specific
check_id(s) affected,status,risk, and concise evidence. - Concrete mitigations (what to change, where) and any owners/due dates if present.
- For network findings: port, bind address, process/service, and why it is flagged (unapproved/insecure/public).