54 lines
1.5 KiB
Markdown
54 lines
1.5 KiB
Markdown
---
|
|
trigger: model_decision
|
|
description: When executing external commands, shell scripts, or system processes
|
|
---
|
|
|
|
## Command Execution Principles
|
|
|
|
### Security
|
|
|
|
**Never execute user input directly:**
|
|
|
|
- ❌ `exec(userInput)`
|
|
- ❌ `shell("rm " + userFile)`
|
|
- ✅ Use argument lists, not shell string concatenation
|
|
- ✅ Validate and sanitize all arguments
|
|
|
|
**Run with minimum permissions:**
|
|
|
|
- Never run commands as root/admin without explicit human approval. If elevated permissions are absolutely required, STOP and request authorization.
|
|
- Use least-privilege service accounts
|
|
|
|
### Portability
|
|
|
|
**Use language standard library:**
|
|
|
|
- Avoid shell commands when standard library provides functionality
|
|
- Example: Use file I/O APIs instead of `cat`, `cp`, `mv`
|
|
|
|
**Test on all target OS:**
|
|
|
|
- Windows, Linux, macOS have different commands and behaviors
|
|
- Use path joining functions (don't concatenate with /)
|
|
|
|
### Error Handling
|
|
|
|
**Check exit codes:**
|
|
|
|
- Non-zero exit code = failure
|
|
- Capture and log stderr
|
|
- Set timeouts for long-running commands
|
|
- Handle "command not found" gracefully
|
|
|
|
### Command Execution Checklist
|
|
|
|
- [ ] Is user input sanitized/validated before use in commands?
|
|
- [ ] Are arguments passed as lists (not shell string concatenation)?
|
|
- [ ] Are commands running with minimum necessary permissions?
|
|
- [ ] Are exit codes checked and errors handled?
|
|
- [ ] Are timeouts set for long-running commands?
|
|
- [ ] Is stderr captured and logged?
|
|
|
|
### Related Principles
|
|
- Security Mandate @security-mandate.md
|
|
- Security Principles @security-principles.md |