Leggere e impostare correttamente i permessi dei file sul Suo VPS
Ogni file e ogni cartella sul Suo VPS ha un proprietario, un gruppo e dei permessi. Se sono troppo permissivi, un sito web o un servizio compromesso può scrivere ovunque. Se sono troppo restrittivi, riceverà errori come "Permission denied" o un 403 sul Suo sito web. Qui scoprirà come leggere i permessi e come impostarli correttamente. Se dispone di un pacchetto hosting con DirectAdmin, consulti Vietato (403): Non dispone dell'autorizzazione per accedere a / su questo server.
Leggere i permessi con ls -l
ls -l /var/www/example.com -rw-r--r-- 1 anna www-data 1520 index.html -rw-r----- 1 anna www-data 412 config.php drwxr-xr-x 2 anna www-data 4096 images drwxrwxr-x 2 www-data www-data 4096 uploads
Il primo carattere indica il tipo: - è un file, d una cartella, l un collegamento. Seguono tre gruppi di tre caratteri: cosa può fare il proprietario, cosa può fare il gruppo e cosa possono fare tutti gli altri. Poi vengono il proprietario (anna) e il gruppo (www-data).
| Lettera | Per un file | Per una cartella |
|---|---|---|
r | Lettura | Elencare i nomi presenti nella cartella |
w | Modifica | Creare, rinominare ed eliminare file |
x | Esecuzione come programma | Entrare nella cartella e aprire i file al suo interno |
Faccia attenzione a due aspetti. Senza x su una cartella non può accedere ai file al suo interno, anche se sono leggibili. E chi ha w su una cartella può eliminarne i file, anche se appartengono a qualcun altro.
Permessi in forma numerica
Spesso i permessi si scrivono con tre cifre: r vale 4, w 2 e x 1, sommati per ciascun gruppo.
| Numero | Permessi | Utilizzo |
|---|---|---|
| 644 | rw-r--r-- | File normale, ad esempio una pagina web o un'immagine |
| 755 | rwxr-xr-x | Cartella, oppure un programma che tutti possono usare |
| 640 | rw-r----- | Configurazione con una password, leggibile dal web server tramite il gruppo |
| 600 | rw------- | File riservato, come authorized_keys, una chiave privata o un file .env |
| 700 | rwx------ | Cartella privata, come ~/.ssh |
Modificare permessi e proprietario
chmod 640 /var/www/example.com/config.php chmod g+w /var/www/example.com/uploads sudo chown anna:www-data /var/www/example.com/config.php
chmod modifica i permessi, con un numero o con delle lettere (u, g, o per proprietario, gruppo e altri, con + o -). chown proprietario:gruppo modifica proprietario e gruppo; questo può farlo solo root, quindi con sudo.
Per un'intera cartella, chmod -R 644 è un errore noto: tutte le sottocartelle perdono la loro x e diventano inutilizzabili. Imposti cartelle e file separatamente con find:
sudo find /var/www/example.com -type d -exec chmod 755 {} +
sudo find /var/www/example.com -type f -exec chmod 644 {} +
Il web server tramite il gruppo
Su Debian e Ubuntu, nginx e PHP-FPM vengono eseguiti per impostazione predefinita con l'utente www-data. Una struttura ordinata: Lei è il proprietario dei file, il gruppo è www-data. Il web server può così leggere tramite il gruppo e scrivere solo nella cartella dove è davvero necessario, come uploads (chmod g+w oppure proprietario www-data solo su quella cartella). Non conceda al web server il permesso di scrittura sui Suoi file PHP.
777. In quel caso chiunque sul server può leggere, modificare ed eseguire il file o la cartella. Se un giorno un sito web o un servizio viene compromesso, l'intruso può scrivere ovunque sia impostato 777. Il vero problema è quasi sempre il proprietario o il gruppo: risolva quello invece di aprire tutto.Permessi per SSH
Il server SSH controlla i permessi delle Sue chiavi. Se altri possono scrivere nella Sua cartella .ssh o nella Sua cartella home, il server ignora la Sua chiave e Le verrà chiesta di nuovo la password, senza un messaggio di errore chiaro. Imposti i permessi così:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Se ha creato la cartella come root per un altro utente, imposti correttamente anche il proprietario, come descritto in Un utente personale con sudo. Su AlmaLinux e Rocky Linux anche SELinux può rifiutare un file con i permessi corretti; per una cartella .ssh creata manualmente è utile restorecon -Rv ~/.ssh.
s al posto di una x, come in /usr/bin/passwd? Si tratta del bit setuid: il programma viene eseguito con i permessi del proprietario. Alcuni programmi di sistema ne hanno bisogno, ma non lo imposti mai Lei stesso su uno script. Un file setuid inatteso può indicare un'intrusione, consulti Hackerato? I primi passi.Desidera saperne di più? Segua il corso gratuito VPS e amministrazione di server Linux, lezione 3.1 Utenti, gruppi e permessi dei file.
