Ir al contenido

Errores de permiso denegado

Los problemas de permisos de archivos y directorios son comunes en las instalaciones de XOOPS, especialmente después de la carga o migración del servidor. Esta guía ayuda a diagnosticar y resolver problemas de permisos.

Conceptos básicos de permisos de Linux/Unix

Sección titulada «Conceptos básicos de permisos de Linux/Unix»

Los permisos de archivos se representan como códigos de tres dígitos:

rwxrwxrwx
||| ||| |||
||| ||| +-- Otros (mundo)
||| +------ Grupo
+--------- Propietario
r = lectura (4)
w = escritura (2)
x = ejecución (1)
755 = rwxr-xr-x (propietario completo, grupo lectura/ejecución, otros lectura/ejecución)
644 = rw-r--r-- (propietario lectura/escritura, grupo lectura, otros lectura)
777 = rwxrwxrwx (acceso completo para todos - NO RECOMENDADO)
Warning: fopen(/var/www/html/xoops/uploads/file.jpg): failed to open stream:
Permission denied in /var/www/html/xoops/class/file.php on line 42
Error: Unable to write file to /var/www/html/xoops/cache/
Error: mkdir(/var/www/html/xoops/uploads/temp/): Permission denied

Directorios que requieren permisos de escritura

Sección titulada «Directorios que requieren permisos de escritura»
DirectorioMínimoPropósito
/uploads755Cargas de usuarios
/cache755Archivos de caché
/templates_c755Plantillas compiladas
/var755Datos variables
mainfile.php644Configuración (legible)
Ventana de terminal
# Comprobar permisos de archivos
ls -l /var/www/html/xoops/
# Comprobar archivo específico
ls -l /var/www/html/xoops/mainfile.php
# Comprobar permisos del directorio
ls -ld /var/www/html/xoops/uploads/

Paso 2: Identificar usuario del servidor web

Sección titulada «Paso 2: Identificar usuario del servidor web»
Ventana de terminal
# Comprobar usuario de Apache
ps aux | grep -E '[a]pache|[h]ttpd'
# Usualmente: www-data (Debian/Ubuntu) o apache (RedHat/CentOS)
# Comprobar usuario de Nginx
ps aux | grep -E '[n]ginx'
# Usualmente: www-data o nginx
Ventana de terminal
# Establecer propiedad correcta (asumiendo usuario www-data)
sudo chown -R www-data:www-data /var/www/html/xoops/
# Arreglar solo directorios escribibles web
sudo chown www-data:www-data /var/www/html/xoops/uploads/
sudo chown www-data:www-data /var/www/html/xoops/cache/
sudo chown www-data:www-data /var/www/html/xoops/templates_c/
sudo chown www-data:www-data /var/www/html/xoops/var/

Opción A: Permisos restrictivos (recomendado)

Sección titulada «Opción A: Permisos restrictivos (recomendado)»
Ventana de terminal
# Todos los directorios: 755 (rwxr-xr-x)
find /var/www/html/xoops -type d -exec chmod 755 {} \;
# Todos los archivos: 644 (rw-r--r--)
find /var/www/html/xoops -type f -exec chmod 644 {} \;
# Excepto directorios escribibles
chmod 755 /var/www/html/xoops/uploads/
chmod 755 /var/www/html/xoops/cache/
chmod 755 /var/www/html/xoops/templates_c/
chmod 755 /var/www/html/xoops/var/
fix-permissions.sh
#!/bin/bash
XOOPS_PATH="/var/www/html/xoops"
WEB_USER="www-data"
echo "Arreglando permisos de XOOPS..."
# Establecer propiedad
sudo chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# Establecer permisos del directorio
find $XOOPS_PATH -type d -exec chmod 755 {} \;
# Establecer permisos de archivos
find $XOOPS_PATH -type f -exec chmod 644 {} \;
# Asegurar directorios escribibles
chmod 755 $XOOPS_PATH/uploads/
chmod 755 $XOOPS_PATH/cache/
chmod 755 $XOOPS_PATH/templates_c/
chmod 755 $XOOPS_PATH/var/
echo "¡Hecho! Permisos arreglados."

Problema: No se pueden cargar archivos

Ventana de terminal
# Solución
sudo chown www-data:www-data /var/www/html/xoops/uploads/
chmod 755 /var/www/html/xoops/uploads/
find /var/www/html/xoops/uploads -type f -exec chmod 644 {} \;
find /var/www/html/xoops/uploads -type d -exec chmod 755 {} \;

Problema: Los archivos de caché no se escriben

Ventana de terminal
# Solución
sudo chown www-data:www-data /var/www/html/xoops/cache/
chmod 755 /var/www/html/xoops/cache/

Problema: Las plantillas no se compilan

Ventana de terminal
# Solución
sudo chown www-data:www-data /var/www/html/xoops/templates_c/
chmod 755 /var/www/html/xoops/templates_c/
  1. Clic derecho en archivo → Propiedades
  2. Hacer clic en la pestaña “Seguridad”
  3. Hacer clic en el botón “Editar”
  4. Seleccionar usuario y verificar permisos
1. Clic derecho en carpeta → Propiedades
2. Seleccionar pestaña "Seguridad"
3. Hacer clic en "Editar"
4. Seleccionar "IIS_IUSRS" o "NETWORK SERVICE"
5. Marcar "Modificar" y "Escribir"
6. Hacer clic en "Aplicar" y "Aceptar"
Ventana de terminal
# Ejecutar PowerShell como Administrador
# Otorgar permisos al grupo de aplicaciones IIS
$path = "C:\inetpub\wwwroot\xoops\uploads"
$acl = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"IIS_IUSRS",
"Modify",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.SetAccessRule($rule)
Set-Acl -Path $path -AclObject $acl
check-xoops-permissions.php
<?php
$paths = [
XOOPS_ROOT_PATH . '/uploads' => 'uploads',
XOOPS_ROOT_PATH . '/cache' => 'cache',
XOOPS_ROOT_PATH . '/templates_c' => 'templates_c',
XOOPS_ROOT_PATH . '/var' => 'var',
XOOPS_ROOT_PATH . '/mainfile.php' => 'mainfile.php'
];
echo "<h2>Comprobación de permisos de XOOPS</h2>";
echo "<table border='1'>";
echo "<tr><th>Ruta</th><th>Legible</th><th>Escribible</th></tr>";
foreach ($paths as $path => $name) {
$readable = is_readable($path) ? '' : 'NO';
$writable = is_writable($path) ? '' : 'NO';
echo "<tr>";
echo "<td>$name</td>";
echo "<td style='background: " . ($readable === '' ? 'green' : 'red') . "'>$readable</td>";
echo "<td style='background: " . ($writable === '' ? 'green' : 'red') . "'>$writable</td>";
echo "</tr>";
}
echo "</table>";
?>
Ventana de terminal
# Solo otorgar permisos necesarios
# No usar 777 o 666
# Malo
chmod 777 /var/www/html/xoops/uploads/ # ¡Peligroso!
# Bien
chmod 755 /var/www/html/xoops/uploads/ # Seguro
Ventana de terminal
# Hacer copia de seguridad del estado actual
getfacl -R /var/www/html/xoops > /tmp/xoops-acl-backup.txt
Ventana de terminal
# Arreglo rápido (Linux)
sudo chown -R www-data:www-data /var/www/html/xoops/
find /var/www/html/xoops -type d -exec chmod 755 {} \;
find /var/www/html/xoops -type f -exec chmod 644 {} \;
  • White-Screen-of-Death - Otros errores comunes
  • Database-Connection-Errors - Problemas de base de datos
  • ../../01-Getting-Started/Configuration/System-Settings - Configuración de XOOPS

Última actualización: 2026-01-31 Aplica a: XOOPS 2.5.7+ SO: Linux, Windows, macOS