La risposta pigra è chmod -R 777 ed è sbagliata: chiunque sul sistema (e ogni script compromesso) potrebbe scrivere ovunque. La risposta giusta sta in proprietario e gruppo, non nell'aprire tutto:
sudo chown -R www-data:www-data /var/www/app/uploads
sudo chmod -R u=rwX,g=rX,o= /var/www/app/uploadsLa X maiuscola mette la x solo sulle directory (serve per attraversarle), non sui file. Se a scrivere sono due attori (il deploy con il tuo utente, il web server con www-data), il pattern pulito è il gruppo condiviso col bit setgid: chgrp -R www-data uploads && chmod g+ws uploads – ogni nuovo file eredita il gruppo, e tu e il server convivete senza 777. Verifica dal punto di vista giusto: sudo -u www-data touch /var/www/app/uploads/test – simula lui, non te. E se il touch fallisce con permessi a posto, c'è uno strato in più che dice no – su RHEL, SELinux vuole il contesto httpd_sys_rw_content_t.