Permission Denied Errors
Symptom
Command fails with “Permission denied” or “Operation not permitted” errors.Diagnosis
-
Check what access was granted:
-
Check environment variables inside the sandbox:
-
Run with verbose logging:
Common Causes
| Cause | Solution |
|---|---|
| Path not in allowed list | Add path with --allow, --read, or --write |
| Sensitive path blocked | These paths cannot be granted (see below) |
| Relative path resolved differently | Use absolute paths |
| Symlink target outside sandbox | Grant access to the symlink target |
Sensitive Paths
These paths are always blocked, even if a parent directory is allowed:~/.ssh/- SSH keys~/.aws/- AWS credentials~/.gnupg/- GPG keys~/.kube/- Kubernetes config~/.docker/- Docker credentials- Shell history files
- Shell configuration files
Network Connection Failed
Symptom
Commands likecurl, wget, or API calls fail with connection errors.
Possible Causes
- Network explicitly blocked - You used
--net-blockflag - Actual network issue - DNS, firewall, or connectivity problem
- Application-specific issue - App needs specific configuration
Solutions
-
If you used
--net-block, remove it: -
Check if you’re actually in nono sandbox:
-
Test network outside nono:
Command Not Found
Symptom
Solutions
-
nono not in PATH:
-
Target command not in PATH:
Sandbox Initialization Failed
Symptom
Linux (Landlock)
-
Check kernel version:
-
Check Landlock is enabled:
-
Enable Landlock (if missing):
Add
lsm=landlock,...to kernel boot parameters
macOS (Seatbelt)
-
Check macOS version:
- Check for SIP issues: Some system integrity protection settings can interfere. This is rare.
Dry Run Shows Different Paths
Symptom
Paths in dry-run output don’t match what you specified.Explanation
nono canonicalizes all paths:- Relative paths become absolute
- Symlinks are resolved
..and.are normalized
Example
Child Process Doesn’t Inherit Sandbox
Symptom
You expect a child process to be sandboxed but it seems to have more access.This Shouldn’t Happen
Child processes always inherit sandbox restrictions. If you’re seeing this:-
Verify the parent is sandboxed:
-
Check if you’re testing correctly:
Performance Issues
Symptom
Commands run slower under nono.Explanation
There is minimal overhead from sandbox initialization (microseconds). If you’re seeing significant slowdowns:- First run may be slower due to path canonicalization
- Many file operations may show overhead from kernel permission checks
Solutions
- Grant access to larger directories instead of many individual files
- Use
--readfor directories that don’t need write access (slightly faster path)
Using Environment Variables for Debugging
When running inside nono, these variables are set:Platform-Specific Issues
macOS: “killed: 9” or Immediate Termination
This usually means the Seatbelt profile was malformed. Run with-vvv to see the generated profile:
Linux: “Landlock not supported”
Your kernel may not have Landlock enabled. Check:Linux: Network Restrictions Not Working
Network filtering requires Landlock ABI v4 (kernel 6.7+):Getting Help
If you’re still stuck:- Search existing issues: GitHub Issues
- Open a new issue with:
- nono version (
nono --version) - OS and kernel version
- Full command that failed
- Error message
- Output of
nono run --dry-runwith same flags
- nono version (
