diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index bbe4510ff..65383ff5e 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,10 +4,7 @@
-
-
-
-
+
diff --git a/install/install.py b/install/install.py
index 897add934..9b8f5fca6 100644
--- a/install/install.py
+++ b/install/install.py
@@ -2400,8 +2400,16 @@ class Migration(migrations.Migration):
command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin/tmp"
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
- ## Fix ownership for public static files (must be owned by lscpd for web server access)
- command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/static"
+ ## Fix ownership and permissions for all public files (must be owned by lscpd for web server access)
+ ## Static files (CSS, JS, images) must NOT have execute permissions - LiteSpeed blocks files with unnecessary execute bits
+ command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/"
+ preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
+
+ ## Set proper permissions: directories get 755, files get 644 (no execute bit for static files!)
+ command = r'find /usr/local/CyberCP/public/ -type d -exec chmod 755 {} \;'
+ preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
+
+ command = r'find /usr/local/CyberCP/public/ -type f -exec chmod 644 {} \;'
preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR)
## change owner
diff --git a/plogical/upgrade.py b/plogical/upgrade.py
index 7bdf0bded..ec8f2deef 100644
--- a/plogical/upgrade.py
+++ b/plogical/upgrade.py
@@ -3343,6 +3343,18 @@ echo $oConfig->Save() ? 'Done' : 'Error';
command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin/tmp"
Upgrade.executioner(command, 'chown core code', 0)
+ ## Fix ownership and permissions for all public files (must be owned by lscpd for web server access)
+ ## Static files (CSS, JS, images) must NOT have execute permissions - LiteSpeed blocks files with unnecessary execute bits
+ command = "chown -R lscpd:lscpd /usr/local/CyberCP/public/"
+ Upgrade.executioner(command, 'Fix public directory ownership', 0)
+
+ ## Set proper permissions: directories get 755, files get 644 (no execute bit for static files!)
+ command = "find /usr/local/CyberCP/public/ -type d -exec chmod 755 {} \;"
+ Upgrade.executioner(command, 'Fix public directory permissions', 0)
+
+ command = "find /usr/local/CyberCP/public/ -type f -exec chmod 644 {} \;"
+ Upgrade.executioner(command, 'Fix public file permissions', 0)
+
## change owner
command = "chown -R root:root /usr/local/lscp"