Saltar al contenido principal
Linux

Permission denied en Linux — Cómo solucionarlo (chmod, sudo y chown)

Solución completa al error 'Permission denied' en Linux: permisos chmod, ejecutar scripts, sudo bien usado, propiedad con chown y archivos del sistema. Con ejemplos.

Error: Permission denied

¿Por qué ocurre?

Linux deniega la operación porque el usuario actual no tiene el permiso necesario: - El script no tiene permiso de ejecución (`./deploy.sh` sin `chmod +x`) - Intentas escribir en un directorio de otro usuario o del sistema (`/var/www`, `/etc`, `/opt`) - El archivo pertenece a otro usuario (típico tras usar `sudo` para crear archivos en tu home) - El directorio no tiene permiso de ejecución (sin `x` en un directorio no puedes entrar ni listar) - El programa necesita capacidades de root (puertos < 1024, `iptables`, montajes) - Medios montados como solo lectura o con opciones `noexec`

Solución paso a paso

1. Script que no se ejecuta: dar permiso de ejecución

# El caso más común en estudiantes: ./mi-script.sh → Permission denied
chmod +x mi-script.sh
./mi-script.sh

# O ejecutarlo con el intérprete directamente (sin cambiar permisos) bash mi-script.sh

2. Leer los permisos antes de tocar nada

ls -l mi-script.sh
# -rw-r--r-- 1 usuario grupo ... → hay lectura y escritura, FALTA ejecución
# -rwxr-xr-x 1 usuario grupo ... → todo correcto

# Para directorios ls -ld /var/www # drwxr-xr-x → entrar (x) y listar (r) permitidos # drw-r--r-- → SIN x: no puedes entrar aunque veas el nombre

3. Permisos con chmod (sintaxis que debes memorizar)

# Sintaxis simbólica (la más legible)
chmod +x archivo      # ejecución para todos
chmod u+x archivo     # ejecución solo para el propietario
chmod -R u+rwX carpeta  # recursivo, X = x solo en directorios y ejecutables

# Sintaxis numérica (la de las ofertas de trabajo) chmod 755 script.sh # rwxr-xr-x → ejecutable por todos, editable por ti chmod 644 documento # rw-r--r-- → archivo normal chmod 600 clave.pem # rw------- → solo tú (SSH exige esto)

# Tabla rápida: r=4, w=2, x=1 → 7=rwx, 6=rw-, 5=r-x, 4=r--

4. Cambiar el propietario con chown (archivos creados con sudo por error)

# Clásico: usaste sudo npm install y ahora node_modules es de root
sudo chown -R $USER:$USER ./mi-proyecto

# Ver el propietario actual ls -l archivo

5. sudo: cuándo sí y cuándo NO

# ✅ Correcto: operaciones del sistema
sudo apt update && sudo apt install git
sudo systemctl restart apache2

# ❌ Evita: crear archivos en tu proyecto con sudo sudo npm install # deja node_modules como root → futuros Permission denied sudo pip install x # igual, usa --user o un entorno virtual sudo code . # nunca abras el editor como root

# Si ya lo hiciste, recupera la propiedad (punto 4) en vez de seguir con sudo

6. Puertos bajos (< 1024) y capacidades

# Servir en el puerto 80 necesita root... o esta alternativa mejor:
sudo setcap 'cap_net_bind_service=+ep' $(which node)
# Así Node puede usar el puerto 80 SIN ejecutarse como root

Cómo evitarlo en el futuro

- Nunca uses `sudo` para programar en tu carpeta personal: `npm`, `pip`, editores y git van sin sudo - Usa `ls -l` antes de `chmod -R 777`: el 777 casi nunca es la respuesta y es un agujero de seguridad - Crea tus proyectos con tu usuario desde el principio para no tener que hacer `chown` después - En scripts que compartas, incluye `chmod +x` en las instrucciones o súbelo ya ejecutable a git (`git update-index --chmod=+x script.sh`)

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.