Skip to content

Fix Odoo Filestore Permission Denied Error: Attachments, Uploads, and Data Directory

DeployMonkey Team · March 23, 2026 9 min read

The Filestore Permission Error

Odoo stores all uploaded files, generated reports, and binary attachments in the filestore directory. When the Odoo process cannot read or write to this directory, you get permission denied errors that break uploads, reports, and even module installation.

What the Errors Look Like

# Upload fails:
ERROR odoo.http: Exception during request handling
PermissionError: [Errno 13] Permission denied: '/var/lib/odoo/.local/share/Odoo/filestore/mydb/ab/ab3f...'

# Report generation fails:
OSError: [Errno 13] Permission denied: '/var/lib/odoo/filestore/mydb/checklist'

# Module install fails:
FileNotFoundError: [Errno 2] No such file or directory: '/opt/odoo/data/filestore/mydb'

# Attachment download returns empty:
WARNING odoo.addons.base.models.ir_attachment: Cannot read file '/var/lib/odoo/filestore/...'

Understanding the Odoo Filestore

Odoo uses a data_dir configuration that defaults to ~/.local/share/Odoo. Inside this directory:

data_dir/
  filestore/
    database_name/
      ab/
        ab3f1a2b...   (actual file content, stored by hash)
      cd/
        cd9e8f7a...
  sessions/
  addons/

The Odoo process must own this entire directory tree with read and write permissions.

Fix 1: Correct Ownership

The filestore must be owned by the user running Odoo.

# Find which user runs Odoo
ps aux | grep odoo
# Example output: odoo  12345  ... /usr/bin/python3 /usr/bin/odoo

# Fix ownership (replace 'odoo' with your Odoo user)
sudo chown -R odoo:odoo /var/lib/odoo

# If using a custom data_dir:
grep data_dir /etc/odoo/odoo.conf
# data_dir = /opt/odoo/data
sudo chown -R odoo:odoo /opt/odoo/data

Fix 2: Correct Permissions

# Set directory permissions (rwx for owner, rx for group)
sudo find /var/lib/odoo -type d -exec chmod 755 {} \;

# Set file permissions (rw for owner, r for group)
sudo find /var/lib/odoo -type f -exec chmod 644 {} \;

# Or simpler — just ensure Odoo user has full access:
sudo chmod -R u+rwX /var/lib/odoo

Fix 3: data_dir Configuration

Make sure data_dir in odoo.conf points to an existing directory with correct permissions.

# In odoo.conf:
data_dir = /var/lib/odoo/.local/share/Odoo

# Create if it does not exist:
sudo mkdir -p /var/lib/odoo/.local/share/Odoo/filestore
sudo chown -R odoo:odoo /var/lib/odoo

# Verify the directory exists and is writable:
sudo -u odoo test -w /var/lib/odoo/.local/share/Odoo && echo "Writable" || echo "NOT writable"

Fix 4: Docker Volume Permissions

In Docker deployments, volume mount permissions often cause issues.

# docker-compose.yml:
services:
  odoo:
    image: odoo:17
    volumes:
      - odoo-data:/var/lib/odoo
    # The Odoo Docker image runs as uid 101 (odoo user)

# If using a bind mount instead of named volume:
volumes:
  - ./data:/var/lib/odoo

# Fix permissions on the host:
sudo chown -R 101:101 ./data

# Or run a one-time fix inside the container:
docker exec -u root odoo_container chown -R odoo:odoo /var/lib/odoo

Fix 5: SELinux or AppArmor Blocking Access

On systems with mandatory access control, even correct Unix permissions may not be enough.

# Check if SELinux is blocking:
sudo ausearch -m avc -ts recent | grep odoo

# Temporary fix (testing only):
sudo setenforce 0

# Permanent fix — set correct SELinux context:
sudo chcon -R -t httpd_sys_rw_content_t /var/lib/odoo

# AppArmor (Ubuntu):
sudo aa-status | grep odoo
# If a profile is enforced, you may need to adjust it

Fix 6: Disk Full

When the disk is full, write operations fail with permission-like errors.

# Check disk space
df -h /var/lib/odoo

# Check filestore size
du -sh /var/lib/odoo/.local/share/Odoo/filestore/

# Clean old sessions (often surprisingly large)
find /var/lib/odoo/.local/share/Odoo/sessions -mtime +7 -delete

# Clean orphaned filestore entries (via Odoo shell)
# env['ir.attachment'].sudo()._gc_file_store()

Fix 7: NFS or Network Filesystem Issues

If the filestore is on NFS, permission mapping between client and server can cause issues.

# In /etc/exports on NFS server:
/data/odoo-filestore  client_ip(rw,sync,no_subtree_check,no_root_squash)

# On NFS client, verify mount:
mount | grep odoo
# Check that uid/gid mapping matches the Odoo user

Diagnosing Filestore Issues

# 1. Check data_dir in config
grep data_dir /etc/odoo/odoo.conf

# 2. Check ownership and permissions
ls -la /var/lib/odoo/.local/share/Odoo/
ls -la /var/lib/odoo/.local/share/Odoo/filestore/

# 3. Test write access as the Odoo user
sudo -u odoo touch /var/lib/odoo/.local/share/Odoo/filestore/test_write
sudo -u odoo rm /var/lib/odoo/.local/share/Odoo/filestore/test_write

# 4. Check Odoo user identity
id odoo
# uid=101(odoo) gid=101(odoo) groups=101(odoo)