Hosting web

SSH e SFTP

Definizione

SSH (Secure Shell) è un protocollo che apre una sessione cifrata su un server remoto per digitarvi comandi. SFTP (SSH File Transfer Protocol) usa lo stesso canale cifrato per trasferire e gestire file. Insieme sostituiscono Telnet e il classico FTP, che facevano viaggiare credenziali e dati in chiaro sulla rete.

SSH e SFTP, Hosting web

Per amministrare un server o modificare i file di un sito bisogna collegarsi da remoto. Per molto tempo Telnet e FTP lo hanno fatto inviando la password in chiaro, leggibile da chiunque si trovasse sul percorso. SSH cifra l’intera sessione e verifica l’identità del server. L’implementazione più diffusa, OpenSSH, è presente su quasi tutti i server Linux ed è integrata nelle versioni recenti di Windows e macOS.

SSH: il terminale remoto

Un comando come ssh utente@esempio.it apre un terminale sul server, per impostazione predefinita sulla porta 22. Lì si lanciano comandi come se si fosse davanti alla macchina: consultare i log, contare i file o usare WP-CLI per gestire WordPress. Alla prima connessione il client mostra l’impronta (fingerprint) della chiave del server: verificarla protegge dall’intercettazione della connessione.

SFTP: i file sullo stesso canale

Nonostante il nome, SFTP non ha nulla a che vedere con FTP: è un sottosistema di SSH. I client più comuni (FileZilla, WinSCP, Cyberduck) lo supportano, con lo stesso utente e la stessa porta di SSH. Non va confuso con FTPS, che aggiunge TLS al FTP classico. In un hosting condiviso l’accesso SFTP è talvolta disponibile senza terminale, e in quel caso gira nello spazio isolato dell’account, per esempio con CageFS.

L’autenticazione con chiave

Invece di una password, SSH accetta una coppia di chiavi. Da OpenSSH 9.5 ssh-keygen crea per impostazione predefinita una chiave Ed25519: la chiave privata resta sul tuo computer, quella pubblica viene aggiunta al file ~/.ssh/authorized_keys dell’account sul server. Alla connessione il client dimostra di possedere la chiave privata senza mai trasmetterla.

Schema dell’autenticazione con chiave SSH. Sul tuo computer ssh-keygen crea una coppia di chiavi: la chiave privata resta da te, protetta da una passphrase. La chiave pubblica viene aggiunta al file ~/.ssh/authorized_keys dell’account sul server. Alla connessione il server chiede una prova che solo chi possiede la chiave privata può produrre, la verifica con la chiave pubblica e poi apre la sessione SSH o SFTP. Nessuna password viaggia in rete.
La chiave privata non lascia mai il tuo computer: il server conosce solo la chiave pubblica.
ssh-keygen -t ed25519
ssh-copy-id utente@esempio.it

Proteggi la chiave privata con una passphrase: la documentazione di ssh-keygen consiglia da 10 a 30 caratteri difficili da indovinare. Una chiave rubata senza passphrase apre il server come una password.

Video: «SSH (SECURE SHELL) - Cos'è e come si usa» (Xeeon)

Mettere in sicurezza il server SSH

Su un VPS o un server dedicato, il file /etc/ssh/sshd_config regola il servizio. Per impostazione predefinita PasswordAuthentication vale yes e PermitRootLogin vale prohibit-password (root può collegarsi, ma non con la password). Una volta configurate le chiavi e provate da una seconda sessione:

  • imposta PasswordAuthentication su no, il che rende inutili gli attacchi brute force sulle password SSH;
  • imposta PermitRootLogin su no e usa un account personale con sudo;
  • limita gli account autorizzati e, se possibile, gli indirizzi di origine.

Per WordPress

  • Sostituisci FTP con SFTP nel tuo client e presso i tuoi collaboratori, ed elimina gli account FTP inutilizzati.
  • Dai un accesso per persona, con la sua chiave, da revocare a fine incarico.
  • Controlla i permessi dei file caricati: il nostro articolo sui permessi 644 e 755 indica i valori corretti.
  • Se sospetti un attacco, SSH dà accesso agli strumenti di diagnosi descritti nella nostra guida il mio sito è stato violato?.

Per approfondire

  • Articolo Permessi dei file WordPress: 644, 755 e il caso wp-config.php
  • Articolo Il mio sito WordPress è stato violato? Segnali, verifiche e strumenti

Fonti

  1. OpenBSD manual: sshd_config(5) (link esterno, si apre in una nuova scheda)
  2. OpenBSD manual: ssh-keygen(1) (link esterno, si apre in una nuova scheda)
  3. OpenSSH 9.5 release notes (link esterno, si apre in una nuova scheda)

Tutte le definizioni

Sicurezza WordPress, senza rumore

Un’email quando conta: nuovi attacchi osservati, aggiornamenti del plugin e guide pratiche. Niente spam, disiscrizione con un clic.

Inizia gratis, passa a Pro quando sei pronto

La versione gratuita nasconde già WordPress e sposta la pagina di login. Pro aggiunge alias, autenticazione a due fattori e monitoraggio.