
🔓 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
rootdi default, anche se l'utente dispone disudo. - ✅ 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_configsul 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.

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:
1 sudo /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) |
|
Ubuntu / Debian (meno recenti) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
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.

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/sudoersdirettamente: un errore di sintassi bloccheràsudoper l'intero sistema, evisudoconvalida la sintassi prima del salvataggio. - Aggiungi la seguente riga alla fine del file (sostituisci
usernamecon il tuo login):
1 username 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:
1 username 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.

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 ( |
Velocità | Maggiore, specialmente con tanti file piccoli | Minore |
Ripresa su disconnessione | Sì | 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):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Nuova riga:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Come funziona:
sudo -n trueverifica se l'utente può eseguiresudosenza password (il flag-nsignifica non interattivo).- Se sì (
&&), il server si avvia con privilegi diroot. - 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.

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:
1 ubuntu 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 diroot(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-servernon è corretto. In distribuzioni diverse si trova in/usr/lib/,/usr/lib/openssh/o/usr/libexec/openssh/. Il percorso esatto si può verificare con il comandocat /etc/ssh/sshd_config | grep Subsystemsul server.
Quanto è sicuro NOPASSWD in sudoers?
È un compromesso. L'accesso completo con
ALL=(ALL) NOPASSWD:ALLriduce la protezione: se un attaccante ottiene accesso all'utente, ottiene ancheroot. 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 -lasul server. Se hai configurato il server SFTP viasudoma la connessione è ricaduta sui permessi normali, significa chesudoha 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.logci sarà una voce che mostra che l'utenteusernameha elevato i privilegi viasudo. Questo è un vantaggio: se ci sono più amministratori, i log mostrano esattamente chi ha eseguito l'operazione. Con il login diretto diroot, questa trasparenza non c'è.
Cosa fare se sudo richiede TTY ma WinSCP non ne fornisce una?
Controlla
/etc/sudoersper l'opzioneDefaults requiretty. Se esiste, commentala (aggiungi#all'inizio della riga) o disabilitala per un utente specifico:Defaults:username !requiretty. Le implementazioni moderne disudo-rsnon 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-serveravvierà la sessione comewww-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-servernon 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.



