Starting with laravel on ubuntu

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Cracking the Code: Solving Laravel Permission Errors on Ubuntu

Setting up a new PHP framework like Laravel, especially within a local server environment like XAMPP on Ubuntu, often throws unexpected permission errors. This is an extremely common hurdle for developers. You are dealing not just with file permissions, but with how your web server process (like Apache or Nginx) interacts with the operating system to read and execute application code.

I’ve seen countless developers hit this exact wall—trying to use chmod on directories like storage and public without success. Today, we will diagnose why your attempts failed and provide the definitive solution for getting Laravel running smoothly on Ubuntu.

Understanding the Root Cause: Permissions vs. Ownership

The errors you encountered—the initial 403 Forbidden error followed by the PHP "Permission denied" fatal error—are classic symptoms of a mismatch between file permissions and file ownership.

When your web server (running as a service user, typically www-data on Ubuntu) tries to execute a script in the /public directory, it checks the permissions. Even if you set broad permissions using chmod, if the files are owned by your personal user account instead of the web server process, the server will reject access.

The fundamental issue is not just what permission level you set, but who owns the files. We need to ensure that the web server user has the necessary read and execute rights over the entire application structure.

The Definitive Fix: Setting Correct Ownership

Forget just using chmod for a moment; we need to use chown (change ownership) to explicitly assign ownership to the system user that runs your web server. On most Debian/Ubuntu systems running XAMPP or LAMP, this user is www-data.

Here is the step-by-step process to resolve your Laravel permission issues:

Step 1: Identify the Web Server User

First, confirm the group and user context you are operating under. For standard PHP setups on Ubuntu, this is usually www-data or sometimes the specific user running XAMPP/LAMP services.

Step 2: Change Ownership Recursively

Navigate to your Laravel root directory (~/opt/xampp/htdocs/laravel) and use chown to assign ownership of the entire project to the web server group. This is more robust than just changing permissions on individual folders.

bash
# Navigate to your Laravel installation directory
cd ~/opt/xampp/htdocs/laravel