
🔓 Hur man får root-behörigheter i WinSCP: konfigurera sudo för filöverföringar
Du ansluter till en server som en vanlig användare, navigerar till /etc/nginx och får "Permission denied." Konfigurationsfiler, systemkataloger, loggar: allt detta är låst för ett konto utan root-behörighet. Och direkt root-inloggning via SSH är av säkerhetsskäl inaktiverat på de flesta servrar.
WinSCP är en praktisk filhanterare för Windows, men som standard körs dess SFTP-session med behörigheterna för den användare du loggade in som. SFTP-protokollet kan inte begära behörighetshöjning "i farten" som en terminal kan: det är inte interaktivt under handskakningen och kan inte visa ett fönster för att ange ett sudo-lösenord.
Här är fyra fungerande metoder för att få WinSCP att köras med superanvändarbehörighet, från den enklaste till "Jedi"-metoden. Var och en har testats på Ubuntu, Debian och CentOS. Välj den som passar din infrastruktur bäst.
💡 Snabb översikt:
- ➡️ Problem: WinSCP ger inte
root-behörighet som standard, även om användaren harsudo. - ✅ Primär metod: Ersätt startkommandot för SFTP-servern i WinSCP:s platsinställningar. Snabbt och målinriktat.
- 🔄 Alternativ: Byt till SCP-protokollet med
sudo su -som skal. - ⚙️ Avancerat: Redigera
sshd_configpå servern. En global lösning för alla anslutningar.
Steg 1: Startkommando för SFTP-server (den primära metoden)
Det vanligaste och mest eleganta sättet att få root-behörighet i WinSCP är att få det att starta SFTP-servern som superanvändare från början. Detta görs genom att ersätta startkommandot i inställningarna för en specifik anslutning. Servern själv behöver inte konfigureras om; lösningen fungerar per anslutning.

Steg-för-steg-instruktioner:
- Starta WinSCP och öppna Platshanteraren.
- Välj önskad anslutning och klicka på Redigera.
- Klicka på Avancerat... längst ner i fönstret.
- I menyn till vänster, gå till Miljö → SFTP.
- I fältet "SFTP-server", ersätt "Standard" med följande kommando:
1 sudo /usr/lib/openssh/sftp-server
För äldre distributioner kan sökvägen vara annorlunda. Vanliga platser för sftp-server:
Distribution | Sökväg till sftp-server |
|---|---|
Ubuntu / Debian (aktuell) |
|
Ubuntu / Debian (äldre) |
|
CentOS / RHEL / Fedora |
|
Amazon Linux |
|
Du kan kontrollera den exakta sökvägen på din server via terminal: cat /etc/ssh/sshd_config | grep Subsystem. Detta kommando visar vilken binär SSH-servern själv använder.
Systemet kommer att starta filöverföringsundersystemet med root-behörighet omedelbart. Men för att detta ska fungera utan fel måste din användare kunna köra sudo utan lösenordsfråga. Det behandlas i nästa steg.
Steg 2: Konfigurera sudoers (tillåt sudo utan lösenord)
Eftersom SFTP-handskakningen inte är interaktiv har WinSCP inget sätt att visa ett fönster för att ange ett sudo-lösenord. Servern kommer helt enkelt att avsluta anslutningen med ett fel om ett lösenord begärs. Lösningen är att ge användaren tillstånd att köra det nödvändiga kommandot utan lösenord via filen /etc/sudoers.

Vad du ska göra:
- Anslut till servern via SSH (använd PuTTY eller WinSCP:s inbyggda terminal).
- Öppna sudoers-redigeraren med
sudo visudo. Redigera aldrig/etc/sudoersdirekt: ett syntaxfel låsersudoför hela systemet, ochvisudovaliderar syntaxen innan den sparas. - Lägg till följande rad i slutet av filen (ersätt
usernamemed din inloggning):
1 username ALL=(ALL) NOPASSWD: ALL
Detta ger användaren full åtkomst utan lösenord. Ett säkrare alternativ är att begränsa behörigheten till endast startkommandot för SFTP-servern:
1 username ALL=NOPASSWD: /usr/lib/openssh/sftp-server
Om servern har flera administratörer med olika inloggningar minskar en snäv konfiguration risken: även om ett konto äventyras får angriparen inte root-åtkomst till allt, bara möjligheten att starta SFTP.
Observera: alternativet requiretty i sudoers måste vara inaktiverat. Moderna sudo-rs-implementationer stöder det inte som standard, men på äldre servrar, kontrollera och kommentera bort raden Defaults requiretty om den finns.
Steg 3: Byta till SCP-protokollet (ett snabbt alternativ)
Om du inte vill hantera sökvägar till sftp-server kan du byta själva dataöverföringsprotokollet. WinSCP stöder SCP, ett äldre men pålitligt protokoll som lättare fångar upp skalinställningar.

Så här byter du:
- I WinSCP:s sessionsinställningar, ändra Filprotokoll från SFTP till SCP.
- Gå till Avancerat → SCP/Skal.
- I fältet Skal, ange:
sudo su -
Vid anslutning kommer WinSCP att köra detta kommando omedelbart efter inloggning och växla sessionen till root-läge.
| SFTP | SCP |
|---|---|---|
Root-behörighet | Genom att ersätta serverbinären | Genom att ersätta skalet ( |
Hastighet | Högre, särskilt med många små filer | Lägre |
Återuppta vid frånkoppling | Ja | Nej |
Tillförlitlighet på äldre system | Kräver exakt sökväg till binär | Fungerar "out of the box" |
Säkerhet | NOPASSWD kan begränsas till ett kommando | Kräver fullständigt lösenordslöst sudo |
SCP-metoden är en kompromiss. Den är enklare att konfigurera men förlorar mot SFTP i hastighet och återställningsmöjligheter efter en frånkoppling. För engångsredigeringar av konfigurationer är skillnaden försumbar. För att regelbundet överföra hundratals filer är det bättre att konfigurera SFTP-metoden.
Steg 4: Global sshd_config-konfiguration (för avancerade användare)
Denna metod är för administratörer som vill konfigurera SSH-serverns beteende centralt. Idén: ersätt raden Subsystem sftp i /etc/ssh/sshd_config med en logisk konstruktion som automatiskt avgör om användaren kan köra sudo utan lösenord och startar SFTP med lämpliga behörigheter.
Vad du ska ändra:
Gammal rad (typiskt):
1 Subsystem sftp /usr/lib/openssh/sftp-server
Ny rad:
1 Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
Hur det fungerar:
sudo -n truekontrollerar om användaren kan körasudoutan lösenord (flaggan-nbetyder icke-interaktiv).- Om ja (
&&), startar servern medroot-behörighet. - Om nej (
||), startar servern med vanliga användarbehörigheter.
Efter redigering, starta om SSH-tjänsten: sudo systemctl restart sshd.
Viktigt: ett syntaxfel i denna fil kommer att helt låsa dig ute från servern via SSH. Innan du redigerar, se till att du har en andra terminal med en aktiv session. Om något går fel kan du återställa ändringarna. Gör också en säkerhetskopia: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
Specifikt för molnservrar (AWS EC2, DigitalOcean)
Linux-avbildningar i molnet har ofta förkonfigurerade sudoers-inställningar som antingen kan förenkla eller försvåra uppgiften.

AWS EC2 (Ubuntu):
Användaren ubuntu på Ubuntu 18.04 och nyare avbildningar har ofta redan de nödvändiga behörigheterna. Kontrollera filen /etc/sudoers.d/90-cloud-init-users, som redan kan innehålla raden:
1 ubuntu ALL=(ALL) NOPASSWD:ALL
Om den finns där kan du hoppa över steg 2. I WinSCP-inställningarna, använd kommandot sudo /usr/lib/openssh/sftp-server.
AWS EC2 (Amazon Linux):
På Amazon Linux är sökvägen till sftp-server annorlunda: /usr/libexec/openssh/sftp-server. Ett enda bokstavsfel (lib istället för libexec) resulterar i felkod 127 (Command not found) och ett omedelbart anslutningsavbrott.
DigitalOcean (Ubuntu Droplets):
På standard DigitalOcean-droplets är root-användaren aktiverad som standard men åtkomst sker endast via SSH-nyckel. Om du skapade en separat användare är sudoers-konfigurationen densamma som för vanlig Ubuntu.
Allmänt råd för moln: innan du anger en sökväg i WinSCP, verifiera att filen finns på servern: ls -la /usr/lib/openssh/sftp-server (eller motsvarande för din distribution).
⁉️🤔 Vanliga frågor
Behöver jag aktivera direkt root-inloggning för att WinSCP ska fungera med sudo?
Nej. Hela poängen med de beskrivna metoderna är att använda ett vanligt konto och tillfälligt höja behörigheterna via
sudo. Direktroot-inloggning (PermitRootLogin yes) anses vara dålig säkerhetspraxis: loggar visar inte vilken administratör som faktiskt utförde en åtgärd.
Varför visar WinSCP ett "Command not found"-fel efter konfiguration?
Troligtvis är sökvägen till
sftp-serverfelaktig. I olika distributioner finns den i/usr/lib/,/usr/lib/openssh/eller/usr/libexec/openssh/. Den exakta sökvägen kan kontrolleras med kommandotcat /etc/ssh/sshd_config | grep Subsystempå servern.
Hur säkert är NOPASSWD i sudoers?
Det är en kompromiss. Full åtkomst med
ALL=(ALL) NOPASSWD:ALLminskar skyddet: om en angripare får tillgång till användaren får de ocksåroot. Att begränsa till ett specifikt kommando (/usr/lib/openssh/sftp-server) är betydligt säkrare: en utomstående kan inte köra något annat än SFTP-servern via detta konto.
Fungerar detta med andra klienter som FileZilla eller Cyberduck?
Principen är densamma, men konfigurationen skiljer sig. FileZilla har inget praktiskt fält för SFTP-serverkommandot i sitt grafiska gränssnitt; redigering av konfigurationsfilen krävs. Cyberduck stöder alternativet "SFTP Server" i anslutningsinställningarna, liknande WinSCP. WinSCP vinner på bekvämlighet specifikt i detta scenario.
Vad ska jag göra om filer är synliga men inte redigerbara?
Kontrollera ägare och behörigheter med
ls -lapå servern. Om du konfigurerade SFTP-servern viasudomen anslutningen föll tillbaka till vanliga behörigheter betyder det attsudobegärde ett lösenord och inte fick något svar. Kontrollera NOPASSWD-konfigurationen från steg 2 igen.
Kan jag bara ändra ägaren av systemfiler till min användare?
Detta är en "smutsig" lösning. Systemtjänster förväntar sig att deras konfigurationer ägs av
root. Att ändra ägaren (chown) eller behörigheterna (chmod) på systemfiler kan förstöra tjänster. Det är bättre att lägga fem minuter på att konfigurera sudo och göra saker ordentligt.
Vad är skillnaden mellan SCP och SFTP i kontexten av sudo?
SCP är helt enkelt kopiering över SSH: det fångar lättare upp skalet, så för det räcker kommandot
sudo su -i Skal-fältet. SFTP är ett fullfjädrat undersystem som körs som en separat process: det kräver tricket med att ersätta binären. SFTP är snabbare och har fler funktioner; SCP är enklare att konfigurera.
Syns åtgärder i loggar när man använder sudo genom WinSCP?
Ja. I
/var/log/auth.logkommer det att finnas en post som visar att användarenusernamehöjde behörigheterna viasudo. Detta är ett plus: om det finns flera administratörer visar loggarna exakt vem som utförde operationen. Med direktroot-inloggning finns ingen sådan transparens.
Vad ska jag göra om sudo kräver TTY men WinSCP inte tillhandahåller en?
Kontrollera
/etc/sudoersför alternativetDefaults requiretty. Om det finns, kommentera bort det (lägg till#i början av raden) eller inaktivera det för en specifik användare:Defaults:username !requiretty. Modernasudo-rs-implementationer stöder inte detta alternativ; problemet är endast relevant för äldre servrar.
Kan jag köra SFTP som en annan användare istället för root?
Ja. Kommandot
sudo -u www-data /usr/lib/openssh/sftp-serverstartar sessionen somwww-data. Detta är praktiskt när du behöver redigera webbplatsfiler utan att röra systemkataloger. Sudoers-behörigheterna för detta måste inkludera alternativet-u:username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.
Slutlig dom: vilken metod du ska välja
För dagligt serverarbete är den första metoden optimal: att ersätta SFTP-serverkommandot kombinerat med en snäv NOPASSWD-konfiguration för endast sftp-server. Den är säker, påverkar inte globala inställningar och fungerar på alla moderna distributioner.
- Om du har Ubuntu / Debian och är villig att lägga 5 minuter på konfiguration, använd Steg 1 + Steg 2 och återvänd aldrig till problemet.
- Om servern är gammal och sökvägen till
sftp-serverinte kan hittas, byt till SCP (Steg 3): den tolererar felaktigheter och fungerar praktiskt taget överallt. - Om du administrerar ett dussin servrar och vill ha en enhetlig standard, konfigurera sshd_config (Steg 4) en gång via Ansible eller manuellt, men definitivt med en säkerhetskopia.
Börja med en kontroll: logga in på servern via SSH och kör cat /etc/ssh/sshd_config | grep Subsystem. På en minut vet du den exakta sökvägen, och den första metoden fungerar på första försöket. Vilken filöverföringsmetod använder du? Dela med dig i kommentarerna.



