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.
¿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