Cómo solucionar el error 'Permission denied' en Linux
¿Qué significa realmente el error "Permission denied"?
Si estás leyendo esto, probablemente te has encontrado con un mensaje como Permission denied o Acceso denegado al intentar abrir un archivo, ejecutar un script o modificar un directorio en tu servidor Linux. No te preocupes, es uno de los errores más comunes para quienes empiezan con servidores y hosting. La buena noticia es que, en la mayoría de los casos, tiene una solución sencilla.
El error permission denied linux aparece cuando el usuario con el que estás trabajando no tiene los permisos necesarios para realizar la acción solicitada. Linux es un sistema operativo muy estricto con la seguridad: cada archivo y carpeta tiene un dueño y un grupo, y además tiene tres tipos de permisos (lectura, escritura y ejecución) que se aplican a tres niveles (dueño, grupo y otros).
Piensa en ello como un edificio con puertas blindadas: cada puerta tiene una lista de quién puede entrar, quién puede leer los documentos y quién puede modificar el mobiliario. Si tu llave no coincide con la cerradura, recibirás un "acceso denegado". En este artículo te voy a enseñar a fabricar la llave correcta.
Los dos comandos mágicos: chmod y chown
Para solucionar permisos linux, los dos comandos que necesitas dominar son chmod (change mode) y chown (change owner). No te asustes por la terminología, son más fáciles de lo que parecen.
### chmod: cambiando los permisos de acceso
El comando chmod es el que te permite modificar quién puede leer, escribir o ejecutar un archivo. Funciona con números o con letras, pero te recomiendo empezar por los números porque son más intuitivos una vez que los entiendes.
Cada permiso tiene un valor numérico:
- Lectura (r) = 4
- Escritura (w) = 2
- Ejecución (x) = 1
Cuando ves algo como chmod 755 archivo.txt, los tres dígitos representan: el primero para el dueño, el segundo para el grupo y el tercero para otros usuarios. El 7 es la suma de 4+2+1 (todos los permisos), el 5 es 4+1 (lectura y ejecución).
Ejemplos prácticos de chmod:
chmod 644 archivo.txt→ El dueño puede leer y escribir, los demás solo leer. Es el estándar para archivos normales.chmod 755 carpeta→ El dueño tiene todos los permisos, los demás pueden leer y ejecutar. Ideal para directorios públicos.chmod 600 archivo.txt→ Solo el dueño puede leer y escribir. Perfecto para archivos de configuración sensibles.
### chown: cambiando el propietario
El comando chown cambia el dueño y el grupo de un archivo o carpeta. Es especialmente útil cuando has subido archivos por FTP y ahora el usuario del servidor web no puede acceder a ellos.
La sintaxis básica es: chown usuario:grupo archivo
Por ejemplo, si tienes un sitio web en Apache y los archivos deben ser propiedad del usuario www-data, ejecutarías:
chown www-data:www-data /var/www/miweb/index.html
Y si quieres cambiar todos los archivos de una carpeta de forma recursiva, añade la opción -R:
chown -R www-data:www-data /var/www/miweb/
Pasos para diagnosticar el error "Permission denied"
Antes de lanzarte a cambiar permisos a lo loco, te recomiendo seguir estos pasos para identificar exactamente qué está fallando.
### Paso 1: Identifica el archivo o directorio problemático
Cuando recibas el error, fíjate bien en qué archivo lo estás obteniendo. El mensaje completo suele indicar la ruta exacta, por ejemplo: bash: /root/scripts/miweb.sh: Permission denied.
### Paso 2: Comprueba los permisos actuales
Usa el comando ls -l para ver los permisos detallados:
ls -l /ruta/al/archivo
Verás algo como esto: -rw-r--r-- 1 usuario grupo 1024 ene 15 10:30 archivo.txt. Los primeros 10 caracteres son la clave: el primer guion indica que es un archivo regular, luego tres grupos de tres caracteres que representan los permisos del dueño, grupo y otros.
### Paso 3: Verifica con qué usuario estás trabajando
Ejecuta whoami para saber qué usuario eres actualmente. Si estás como root, técnicamente deberías poder hacer casi todo, pero si el sistema está configurado con SELinux o AppArmor, podrías seguir teniendo restricciones.
### Paso 4: Prueba con sudo
Si no eres root, intenta ejecutar el comando con sudo por delante. Por ejemplo: sudo cat /etc/shadow. Si te pide contraseña y la introduces correctamente, el problema era simplemente falta de privilegios.
Soluciones específicas según el tipo de error
No todos los "Permission denied" son iguales. Te voy a explicar los casos más típicos y cómo resolver cada uno.
### Error al ejecutar un script
Si intentas ejecutar ./script.sh y te dice Permission denied, el problema es que el archivo no tiene permisos de ejecución. La solución es:
chmod +x script.sh
O si prefieres usar números: chmod 755 script.sh. Después podrás ejecutarlo con ./script.sh.
### Error al modificar un archivo de configuración
Si no puedes editar, por ejemplo, /etc/nginx/nginx.conf, necesitas privilegios de superusuario:
sudo nano /etc/nginx/nginx.conf
O bien, si el archivo es propiedad de otro usuario:
sudo chown tu_usuario:tu_grupo /etc/nginx/nginx.conf
### Error al acceder a una carpeta web
Este es muy común en solucionar permisos linux cuando tienes un sitio web en /var/www. El servidor web (Apache o Nginx) necesita poder leer los archivos. La solución típica:
sudo chown -R www-data:www-data /var/www/tudominio.com/
sudo chmod -R 755 /var/www/tudominio.com/
El error sudo linux y cómo resolverlo
El error sudo linux es otro clásico. Cuando ejecutas sudo comando y recibes sudo: usuario no está en el archivo sudoers, significa que tu usuario no tiene permisos para usar sudo.
### Solución para usuarios con acceso root
Si tienes acceso root (por ejemplo, desde el panel de tu proveedor de hosting), puedes añadir tu usuario al grupo sudo:
su -
usermod -aG sudo tu_usuario
Después cierra sesión y vuelve a entrar para que los cambios surtan efecto.
### Solución desde el modo recovery
Si no tienes acceso a root, necesitarás reiniciar el sistema en modo recovery o arrancar con un live CD, montar el sistema y editar el archivo /etc/sudoers para añadir tu usuario.
Arreglar permisos archivos: casos prácticos frecuentes
Vamos a ver algunos casos reales que te encontrarás como administrador de hosting.
### Permisos para WordPress
Si tienes WordPress instalado y no puedes subir imágenes o instalar plugins, los permisos de las carpetas wp-content suelen ser el problema:
chown -R tu_usuario:www-data /ruta/wordpress/
find /ruta/wordpress/ -type d -exec chmod 755 {} \;
find /ruta/wordpress/ -type f -exec chmod 644 {} \;
### Permisos para archivos subidos por FTP
Cuando subes archivos por FTP, el propietario suele ser el usuario FTP. Si el servidor web no puede leerlos, tendrás que cambiar el propietario:
chown -R www-data:www-data /ruta/de/la/web/
### Permisos para archivos de log
Si tu aplicación no puede escribir en los logs, necesitas dar permisos de escritura al usuario del servicio:
chown -R usuario_servicio:usuario_servicio /var/log/miaplicacion/
chmod -R 755 /var/log/miaplicacion/
Consejos de seguridad al cambiar permisos
Cambiar permisos es una herramienta poderosa, pero también peligrosa si no se hace correctamente. Aquí van mis recomendaciones.
### No uses 777 indiscriminadamente
El permiso 777 da acceso total a todos los usuarios del sistema. Aunque parece la solución rápida, es un grave riesgo de seguridad. En su lugar, usa 755 para directorios y 644 para archivos.
### Usa el principio de mínimo privilegio
Solo da los permisos mínimos necesarios. Si un archivo solo necesita ser leído, no le des permisos de escritura.
### Revisa los permisos después de actualizar
Las actualizaciones de software pueden cambiar los permisos. Después de actualizar tu CMS o panel, verifica que los permisos sigan siendo correctos.
Herramientas para gestionar permisos desde paneles
Si no te sientes cómodo con la línea de comandos, la mayoría de los paneles de hosting ofrecen interfaces gráficas para gestionar permisos.
### Syspanel y su gestor de archivos
Si tu hosting utiliza Syspanel (antes conocido como HestiaCP), puedes acceder a su gestor de archivos a través del puerto 2106 de tu servidor. Por ejemplo, si tu dominio es midominio.com, la URL sería https://midominio.com:2106. Una vez dentro, selecciona un archivo o carpeta y busca la opción de "Permisos" o "Chmod" para cambiarlos sin necesidad de usar terminal.
### cPanel y su administrador de archivos
En cPanel, el administrador de archivos tiene una opción de "Permisos" en la barra superior que te permite establecer permisos mediante casillas de verificación.
Preguntas frecuentes (FAQ)
### ¿Por qué recibo "Permission denied" si soy root?
Incluso root puede tener problemas con sistemas como SELinux. Verifica con sestatus si SELinux está activo y consulta los logs de auditoría con ausearch -m avc -ts recent.
### ¿Cómo sé qué permisos necesita un archivo?
Depende del uso. Los archivos de configuración normalmente 644, los ejecutables 755, las carpetas 755 y los archivos que deben ser modificados por el servidor web 664 con el grupo adecuado.
### ¿Puedo usar FTP para cambiar permisos?
Sí, la mayoría de clientes FTP como FileZilla permiten cambiar permisos haciendo clic derecho sobre el archivo y seleccionando "Permisos de archivo".
### ¿Qué hago si no recuerdo qué permisos tenían mis archivos?
Para restaurar los permisos a valores seguros por defecto:
find /ruta/de/tu/web/ -type d -exec chmod 755 {} \;
find /ruta/de/tu/web/ -type f -exec chmod 644 {} \;
### ¿Cómo soluciono el error al instalar paquetes con apt?
Prueba con sudo apt-get install -f para corregir dependencias rotas, y si sigue fallando, sudo dpkg --configure -a.
Resumen final y buenas prácticas
Hemos visto que el error permission denied linux no es un monstruo de siete cabezas. Con los comandos chmod y chown bien entendidos, y sabiendo qué permisos necesita cada tipo de archivo, podrás solucionar permisos linux en la mayoría de los casos.
Recuerda estos puntos clave:
- Siempre verifica qué usuario eres con
whoami. - Usa
ls -lpara inspeccionar permisos antes de cambiarlos. - Aplica el principio de mínimo privilegio.
- Si usas Syspanel, aprovecha su gestor de archivos en el puerto 2106.
- Para arreglar permisos archivos web, la combinación
755para carpetas y644para archivos es tu mejor amiga. - Nunca uses
777a menos que sea estrictamente necesario y temporal.
Con práctica, dominarás estos conceptos y podrás resolver cualquier problema de permisos en tu servidor Linux sin estrés. Y si te encuentras bloqueado, recuerda que tienes herramientas gráficas como Syspanel para hacerte la vida más fácil. ¡Ánimo, que tú puedes!
