Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

🔓 Come ottenere i privilegi di root in WinSCP: configurare sudo per i trasferimenti di file

🔓 Come ottenere i privilegi di root in WinSCP: configurare sudo per i trasferimenti di file

Ti connetti a un server come utente normale, navighi su /etc/nginx e ottieni «Permission denied». File di configurazione, directory di sistema, log: tutto questo è precluso a un account senza privilegi di root. E l'accesso diretto via SSH con l'utente root è disabilitato sulla maggior parte dei server per motivi di sicurezza.

WinSCP è un comodo file manager per Windows, ma di default la sua sessione SFTP opera con i permessi dell'utente con cui hai effettuato il login. Il protocollo SFTP non può richiedere l'elevazione dei privilegi «al volo» come fa un terminale: non è interattivo durante la fase di handshake e non può mostrare una finestra per inserire la password di sudo.

Ecco quattro metodi funzionanti per far operare WinSCP con privilegi di superutente, dal più semplice all'approccio «Jedi». Ciascuno è stato testato su Ubuntu, Debian e CentOS. Scegli quello più adatto alla tua infrastruttura.

💡 Panoramica rapida:

  • ➡️ Problema: WinSCP non concede privilegi di root di default, anche se l'utente dispone di sudo.
  • Metodo principale: Sostituire il comando di avvio del server SFTP nelle impostazioni del sito di WinSCP. Veloce e mirato.
  • 🔄 Alternativa: Passare al protocollo SCP con sudo su - come shell.
  • ⚙️ Avanzato: Modificare sshd_config sul server. Una soluzione globale per tutte le connessioni.

Step 1: comando di avvio del server SFTP (il metodo principale)

Il modo più comune ed elegante per ottenere privilegi di root in WinSCP è fargli avviare il server SFTP come superutente fin dall'inizio. Questo si ottiene sostituendo il comando di avvio nelle impostazioni di una connessione specifica. Il server in sé non ha bisogno di essere riconfigurato; la soluzione funziona su base per-connessione.

Finestra delle impostazioni del server SFTP in WinSCP

Istruzioni passo passo:

  • Avvia WinSCP e apri il Site Manager.
  • Seleziona la connessione desiderata e clicca su Modifica.
  • Clicca su Avanzate… in fondo alla finestra.
  • Nel menu a sinistra, vai su Ambiente → SFTP.
  • Nel campo «Server SFTP», sostituisci «Default» con il seguente comando:
1sudo /usr/lib/openssh/sftp-server

Per distribuzioni meno recenti, il percorso può differire. Posizioni tipiche di sftp-server:

Distribuzione

Percorso di sftp-server

Ubuntu / Debian (attuali)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (meno recenti)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

Puoi verificare il percorso esatto sul tuo server via terminale: cat /etc/ssh/sshd_config | grep Subsystem. Questo comando mostra quale binario utilizza il server SSH stesso.

Il sistema avvierà immediatamente il sottosistema di trasferimento file con privilegi di root. Tuttavia, perché funzioni senza errori, il tuo utente deve poter eseguire sudo senza che venga richiesta la password. Questo è trattato nel prossimo step.


Step 2: configurare sudoers (permettendo sudo senza password)

Poiché l'handshake SFTP non è interattivo, WinSCP non ha modo di mostrare una finestra per l'inserimento della password di sudo. Il server terminerà semplicemente la connessione con un errore se viene richiesta una password. La soluzione è concedere all'utente il permesso di eseguire il comando necessario senza password tramite il file /etc/sudoers.

Modifica del file sudoers con visudo

Cosa fare:

  • Connettiti al server via SSH (usando PuTTY o il terminale integrato di WinSCP).
  • Apri l'editor di sudoers con sudo visudo. Non modificare mai /etc/sudoers direttamente: un errore di sintassi bloccherà sudo per l'intero sistema, e visudo convalida la sintassi prima del salvataggio.
  • Aggiungi la seguente riga alla fine del file (sostituisci username con il tuo login):
1username ALL=(ALL) NOPASSWD: ALL

Questo concede all'utente accesso completo senza password. Un'opzione più sicura è limitare il permesso al solo comando di avvio del server SFTP:

1username ALL=NOPASSWD: /usr/lib/openssh/sftp-server

Se il server ha più amministratori con login diversi, una configurazione ristretta riduce il rischio: anche se un account viene compromesso, l'attaccante non otterrà accesso root a tutto, ma solo la capacità di avviare SFTP.

Nota: l'opzione requiretty in sudoers deve essere disabilitata. Le implementazioni moderne di sudo-rs non la supportano di default, ma su server più datati verifica e commenta la riga Defaults requiretty se esiste.


Step 3: passare al protocollo SCP (un'alternativa rapida)

Se non vuoi avere a che fare con i percorsi di sftp-server, puoi cambiare il protocollo di trasferimento dati stesso. WinSCP supporta SCP, un protocollo più vecchio ma affidabile che recepisce più facilmente le impostazioni della shell.

Configurazione del protocollo SCP e della shell in WinSCP

Come passare a SCP:

  • Nelle impostazioni della sessione di WinSCP, cambia Protocollo file da SFTP a SCP.
  • Vai su Avanzate → SCP/Shell.
  • Nel campo Shell, inserisci: sudo su -

Alla connessione, WinSCP eseguirà questo comando subito dopo il login e passerà la sessione in modalità root.

SFTP

SCP

Privilegi di root

Sostituendo il binario del server

Sostituendo la shell (sudo su -)

Velocità

Maggiore, specialmente con tanti file piccoli

Minore

Ripresa su disconnessione

No

Affidabilità su sistemi datati

Richiede il percorso esatto del binario

Funziona «out of the box»

Sicurezza

NOPASSWD limitabile a un solo comando

Richiede sudo senza password completo

Il metodo SCP è un compromesso. È più facile da configurare ma perde contro SFTP in velocità e capacità di recupero dopo una disconnessione. Per modifiche una tantum alla configurazione, la differenza è trascurabile. Per trasferire regolarmente centinaia di file, è meglio configurare il metodo SFTP.


Step 4: configurazione globale di sshd_config (per utenti avanzati)

Questo metodo è per gli amministratori che vogliono configurare centralmente il comportamento del server SSH. L'idea: sostituire la riga Subsystem sftp in /etc/ssh/sshd_config con un costrutto logico che determini automaticamente se l'utente può eseguire sudo senza password e avvii SFTP con i privilegi appropriati.

Cosa cambiare:

Vecchia riga (tipicamente):

1Subsystem sftp /usr/lib/openssh/sftp-server

Nuova riga:

1Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

Come funziona:

  • sudo -n true verifica se l'utente può eseguire sudo senza password (il flag -n significa non interattivo).
  • Se sì (&&), il server si avvia con privilegi di root.
  • Se no (||), il server si avvia con i privilegi dell'utente normale.

Dopo la modifica, riavvia il servizio SSH: sudo systemctl restart sshd.

Importante: un errore di sintassi in questo file ti bloccherà completamente fuori dal server via SSH. Prima di modificare, assicurati di avere un secondo terminale con una sessione attiva. Se qualcosa va storto, potrai ripristinare le modifiche. Fai anche un backup: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.


Specifiche per server cloud (AWS EC2, DigitalOcean)

Le immagini cloud di Linux hanno spesso impostazioni di sudoers preconfigurate che possono semplificare o complicare il compito.

Impostazioni sudo di cloud-init in AWS EC2

AWS EC2 (Ubuntu):

L'utente ubuntu su immagini Ubuntu 18.04 e successive ha spesso già i permessi necessari. Controlla il file /etc/sudoers.d/90-cloud-init-users, che potrebbe già contenere la riga:

1ubuntu ALL=(ALL) NOPASSWD:ALL

Se è presente, puoi saltare lo step 2. Nelle impostazioni di WinSCP, usa il comando sudo /usr/lib/openssh/sftp-server.

AWS EC2 (Amazon Linux):

Su Amazon Linux, il percorso di sftp-server è diverso: /usr/libexec/openssh/sftp-server. Un errore di una sola lettera (lib invece di libexec) produrrà il codice di errore 127 (Command not found) e un immediato drop della connessione.

DigitalOcean (Droplet Ubuntu):

Sui droplet DigitalOcean standard, l'utente root è abilitato di default ma l'accesso è solo via chiave SSH. Se hai creato un utente separato, la configurazione di sudoers è la stessa di un normale Ubuntu.

Consiglio generale per il cloud: prima di inserire un percorso in WinSCP, verifica che il file esista sul server: ls -la /usr/lib/openssh/sftp-server (o l'equivalente per la tua distribuzione).


⁉️🤔 Domande frequenti

Devo abilitare il login diretto di root perché WinSCP funzioni con sudo?

No. Lo scopo stesso dei metodi descritti è usare un account normale ed elevare temporaneamente i privilegi via sudo. Il login diretto di root (PermitRootLogin yes) è considerato una cattiva pratica di sicurezza: i log non mostreranno quale amministratore ha effettivamente compiuto un'azione.

Perché WinSCP mostra un errore «Command not found» dopo la configurazione?

Molto probabilmente, il percorso di sftp-server non è corretto. In distribuzioni diverse si trova in /usr/lib/, /usr/lib/openssh/ o /usr/libexec/openssh/. Il percorso esatto si può verificare con il comando cat /etc/ssh/sshd_config | grep Subsystem sul server.

Quanto è sicuro NOPASSWD in sudoers?

È un compromesso. L'accesso completo con ALL=(ALL) NOPASSWD:ALL riduce la protezione: se un attaccante ottiene accesso all'utente, ottiene anche root. Limitare a un comando specifico (/usr/lib/openssh/sftp-server) è significativamente più sicuro: un estraneo non potrà eseguire nient'altro che il server SFTP attraverso questo account.

Funziona con altri client come FileZilla o Cyberduck?

Il principio è lo stesso, ma la configurazione differisce. FileZilla non ha un campo comodo per il comando del server SFTP nella sua interfaccia grafica; è necessario modificare il file di configurazione. Cyberduck supporta l'opzione «SFTP Server» nelle impostazioni di connessione, in modo simile a WinSCP. WinSCP vince per comodità specificamente in questo scenario.

Cosa fare se i file sono visibili ma non modificabili?

Controlla proprietario e permessi con ls -la sul server. Se hai configurato il server SFTP via sudo ma la connessione è ricaduta sui permessi normali, significa che sudo ha richiesto una password e non ha ricevuto risposta. Ricontrolla la configurazione NOPASSWD dello step 2.

Posso semplicemente cambiare il proprietario dei file di sistema con il mio utente?

Questa è una pezza «sporca». I servizi di sistema si aspettano che le loro configurazioni appartengano a root. Cambiare il proprietario (chown) o i permessi (chmod) sui file di sistema può rompere i servizi. È meglio spendere cinque minuti a configurare sudo e fare le cose per bene.

Qual è la differenza tra SCP e SFTP nel contesto di sudo?

SCP è semplicemente copia su SSH: recepisce più facilmente la shell, quindi per lui il comando sudo su - nel campo Shell è sufficiente. SFTP è un sottosistema a tutti gli effetti che gira come processo separato: richiede il trucco della sostituzione del binario. SFTP è più veloce e ricco di funzionalità; SCP è più facile da configurare.

Le azioni sono visibili nei log quando si usa sudo tramite WinSCP?

Sì. In /var/log/auth.log ci sarà una voce che mostra che l'utente username ha elevato i privilegi via sudo. Questo è un vantaggio: se ci sono più amministratori, i log mostrano esattamente chi ha eseguito l'operazione. Con il login diretto di root, questa trasparenza non c'è.

Cosa fare se sudo richiede TTY ma WinSCP non ne fornisce una?

Controlla /etc/sudoers per l'opzione Defaults requiretty. Se esiste, commentala (aggiungi # all'inizio della riga) o disabilitala per un utente specifico: Defaults:username !requiretty. Le implementazioni moderne di sudo-rs non supportano questa opzione; il problema è rilevante solo per server più datati.

Posso eseguire SFTP come un utente diverso invece di root?

Sì. Il comando sudo -u www-data /usr/lib/openssh/sftp-server avvierà la sessione come www-data. È comodo quando devi modificare i file del sito web senza toccare le directory di sistema. I permessi sudoers per questo devono includere l'opzione -u: username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.


Verdetto finale: quale metodo scegliere

Per il lavoro quotidiano sul server, il primo metodo è ottimale: sostituire il comando del server SFTP combinato con una configurazione NOPASSWD ristretta al solo sftp-server. È sicuro, non influisce sulle impostazioni globali e funziona su tutte le distribuzioni moderne.

  • Se hai Ubuntu / Debian e sei disposto a spendere 5 minuti per la configurazione, usa Step 1 + Step 2 e non tornare più sull'argomento.
  • Se il server è vecchio e il percorso di sftp-server non si trova, passa a SCP (Step 3): tollera le imprecisioni e funziona praticamente ovunque.
  • Se amministri una dozzina di server e vuoi uno standard unificato, configura sshd_config (Step 4) una volta via Ansible o manualmente, ma assolutamente con un backup.

Inizia con una verifica: accedi al server via SSH ed esegui cat /etc/ssh/sshd_config | grep Subsystem. In un minuto saprai il percorso esatto, e il primo metodo funzionerà al primo tentativo. Quale metodo di trasferimento file usi? Condividilo nei commenti.