Quando si lavora su WordPress in self-hosting auto gestito come Vultr o Digital Ocean, la macchina virtuale viene fornita con i soli accessi SSH per utente root. Una cosa corretta da fare subito è creare gli accessi utente con permessi specifici e dedicati, usare l’utente root per l’ordinaria amministrazione non è una buona pratica.
Usare Ubuntu ed imparare qualche comando da sistemista mi ha aiutato ad impostare e gestire il mio hosting cloud Digital Ocean, dove risiede questo sito ormai da diverso tempo. Ora sono indipendente da piattaforme di hosting condivisi che hanno moltissimi limiti e spesso sono poco performanti. Il bello poi è divertirsi a testare configurazioni al fine di ottenere un web server sempre più veloce e stabile.
Nota: se ti interessa approfondire ho un corso da web master dove ti mostro come configurare, ottimizzare e gestire server LEMP (Linux-Ubuntu + Nginx + MySQL + PHP-FPM).
Con questo post ti mostro come correggere i problemi di autorizzazione quando si utilizzano utenti SFTP con Nginx e PHP-FPM 7.0.
Crea un nuovo utente SFTP
Crea un nuovo ftpuser con assegnata la cartella /var/www:sudo useradd -d /var/www/ ftpuser
Imposta la password per ftpuser. Attento, quando ti viene richiesta la password non vedrai i caratteri mentre scrivi!sudo passwd ftpuser
I file non sono scrivibili da tutti gli utenti, sono limitati al proprietario dei file. Il web server deve essere eseguito con un utente specifico. Quell’utente deve esistere. Se fosse eseguito in root, tutti i file dovrebbero essere accessibili da root e l’utente dovrebbe essere root per accedere ai file. Essendo il proprietario root, un web server compromesso avrebbe accesso all’intero sistema. Assegnando un user specifico, un web server compromesso avrà solo pieno accesso ai suoi file e non all’intero server.
Di default su Ubuntu con Nginx o Apache la proprietà dei file è assegnata all’user www-data. Poiché si tratta della configurazione predefinita, è possibile conoscere in modo appropriato la proprietà necessaria per i propri file Web. Se cambi user, dovresti cambiare i file nel tuo sito per farlo combaciare.
Aggiungi ftpuser al www-data group:sudo usermod -aG www-data ftpuser
Il tuo nuovo utente ftp è ora membro del gruppo giusto e ha la cartella home corretta.
Cambia utente Nginx
Apri la tua configurazione di Nginx:sudo nano /etc/nginx/nginx.conf
Cambia il valore dell’utente sul tuo ftpuser:
user ftpuser;
worker_processes auto;
pid /run/nginx.pid;
Verifica che la sintassi della nuova configurazione Nginx sia corretta:sudo Nginx -t
Dovresti ricevere questi messaggi di conferma:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Ora Nginx verrà eseguito come utente ftp.
Cambia utente PHP-FPM
Apri la tua configurazione PHP-FPM:sudo nano /etc/php/7.0/fpm/pool.d/www.conf
Cambia il valore dell’utente ftpuser:; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = ftpuser
group = www-data
Verifica la sintassi della nuova configurazione PHP-FPM:sudo php-fpm7.0 -t
Dovresti vedere questo messaggio di successo:
[12-Jun-2018 01:02:21] NOTICE: configuration file /etc/php/7.0/fpm/php-fpm.conf test is successful
Ora PHP-FPM è configurato per funzionare come ftpuser.
Correggere i permessi FTP
Cambia in modo ricorsivo le autorizzazioni per la cartella principale di ftpuser:sudo chown -R ftpuser:www-data /var/www
In alternativa usa sudo chown -R www-data:www-data /var/www
Imposta il permesso 775 per le cartelle in modo che il gruppo ftpuser e www-data possano eseguire i file nelle cartelle:sudo find /var/www/ -type d -exec chmod 775 {} +
Imposta il permesso 664 per i file in modo che il gruppo ftpuser e www-data possano modificarli:sudo find /var/www/ -type f -exec chmod 664 {} +
Cambia i permessi per la cartella /var/lib/nginx:sudo chown -R ftpuser:www-data /var/lib/nginx
Modifica anche le autorizzazioni della cartella dei log:sudo chown -R ftpuser:www-data /var/log/nginx
Modifica le autorizzazioni delle sessioni PHP:sudo chown -R ftpuser:www-data /var/lib/php/sessions
Imposta il permesso 775 per le cartelle in modo che il gruppo ftpuser e www-data possano eseguire i file nelle cartelle:sudo find /var/www/ -type d -exec chmod 775 {} +
Imposta il permesso 664 per i file in modo che il gruppo ftpuser e www-data possano modificarli:sudo find /var/www/ -type f -exec chmod 664 {} +
Cambia i permessi per la cartella /var/lib/nginx:sudo chown -R ftpuser:www-data /var/lib/nginx
Modifica anche le autorizzazioni della cartella dei log:sudo chown -R ftpuser:www-data /var/log/nginx
Modifica le autorizzazioni delle sessioni PHP:sudo chown -R ftpuser:www-data /var/lib/php/sessions
Per quanto riguarda i permessi è tutto, non dovrebbe servirti altro.
Finalizzare
Ora i servizi e web server devono essere riavviati. Digita nella SHELL:sudo service php7.0-fpm restart
sudo service nginx restart
A questo punto dovresti essere in grado di caricare file via SFTP senza problemi di autorizzazione.
Se hai ancora problemi con WordPress ed FTP, prova ad aggiungerle queste righe al tuo file wp-config.php:
// permission fixes
define( 'FS_METHOD', 'direct' );
define( 'FS_CHMOD_DIR', ( 0775 & ~ umask() ) );
define( 'FS_CHMOD_FILE', ( 0664 & ~ umask() ) );