Cap 14: Permisos y Sandbox

Por: Artiko
claude-codepermisossandboxseguridad

Permission Modes

Claude Code tiene modos de permisos predefinidos que controlan qué puede hacer sin preguntar:

ModoLecturaEdiciónBashUso
defaultAutoPreguntaPreguntaUso normal
acceptEditsAutoAutoPreguntaConfiar en ediciones
planAutoBloqueadoBloqueadoSolo exploración
bypassPermissionsAutoAutoAutoSin restricciones
# Iniciar en modo plan para investigar
claude --permission-mode plan

# Aceptar ediciones automáticamente
claude --permission-mode acceptEdits

Cambiar durante sesión

Dentro de una sesión puedes cambiar de modo:

/plan           # Cambiar a modo plan
/permissions    # Ver y editar permisos

Wildcard syntax detallado

La sintaxis de permisos usa patrones con wildcards para definir reglas granulares.

Patrones por herramienta

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "WebSearch",
      "Bash(git *)",
      "Bash(bun test *)",
      "Bash(bun run build)",
      "Bash(ls *)",
      "Bash(cat *)",
      "Edit(src/**)",
      "Write(src/**)",
      "mcp__context7__*"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl * | bash)",
      "Bash(git push --force *)",
      "Edit(.env*)",
      "Write(.env*)"
    ]
  }
}

Sintaxis de patrones

PatrónSignificado
*Cualquier secuencia de caracteres
**Recursivo en directorios
ToolToda la herramienta sin restricción
Tool(pattern)Herramienta con patrón específico

Herramientas y sus patrones

HerramientaQué filtra el patrónEjemplo
Bash(...)El comando a ejecutarBash(npm test *)
Read(...)Ruta del archivoRead(src/**)
Edit(...)Ruta del archivoEdit(*.ts)
Write(...)Ruta del archivoWrite(src/**)
WebFetch(...)DominioWebFetch(domain:github.com)
Task(...)Nombre del agenteTask(code-reviewer)
Skill(...)Nombre del skillSkill(testing)
mcp__srv__toolHerramienta MCPmcp__playwright__*

Sandbox

El sandbox aísla la ejecución de comandos bash para prevenir daños accidentales.

Activar sandbox

# Via CLI
/sandbox

# Via settings
{
  "sandbox": {
    "enabled": true
  }
}

Configuración del sandbox

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": ["docker", "ssh"],
    "network": {
      "allowedDomains": ["github.com", "registry.npmjs.org"],
      "deniedDomains": ["*.malicious.com"],
      "allowLocalBinding": false
    }
  }
}

Campos de sandbox

CampoTipoDescripción
enabledbooleanActivar sandbox
autoAllowBashIfSandboxedbooleanAuto-aprobar bash dentro del sandbox
excludedCommandsstring[]Comandos que salen del sandbox

Network isolation

CampoDescripción
allowedDomainsSolo permitir estos dominios
deniedDomainsBloquear estos dominios
allowLocalBindingPermitir bind a puertos locales

Combinando permisos con sandbox

La configuración más segura para trabajo autónomo:

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "network": {
      "allowedDomains": ["github.com", "registry.npmjs.org"]
    }
  },
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Edit(src/**)",
      "Write(src/**)",
      "Bash(bun test *)",
      "Bash(git *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push *)",
      "Edit(.env*)"
    ]
  }
}

Permisos en equipos

Compartir configuración de permisos del proyecto vía .claude/settings.json (commiteable):

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(npm test *)",
      "Bash(npm run lint *)"
    ],
    "defaultMode": "default"
  }
}

Override personal vía .claude/settings.local.json (gitignored):

{
  "permissions": {
    "allow": [
      "Edit(src/**)",
      "Bash(docker *)"
    ]
  }
}

Las listas se fusionan: las reglas del equipo + las personales aplican juntas.


Siguiente: Plugins