Skip to content

Allt om WordPress, webbutveckling — och mer därtill

🔓 Hur man får root-behörigheter i WinSCP: konfigurera sudo för filöverföringar

🔓 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 har sudo.
  • 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_config på 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.

SFTP-serverinställningar i WinSCP

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:
1sudo /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)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (äldre)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

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.

Redigera sudoers-filen med visudo

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/sudoers direkt: ett syntaxfel låser sudo för hela systemet, och visudo validerar syntaxen innan den sparas.
  • Lägg till följande rad i slutet av filen (ersätt username med din inloggning):
1username 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:

1username 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.

Konfigurera SCP-protokoll och skal i WinSCP

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 (sudo su -)

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):

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

Ny rad:

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

Hur det fungerar:

  • sudo -n true kontrollerar om användaren kan köra sudo utan lösenord (flaggan -n betyder icke-interaktiv).
  • Om ja (&&), startar servern med root-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.

cloud-init sudo-inställningar i AWS EC2

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:

1ubuntu 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. Direkt root-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-server felaktig. I olika distributioner finns den i /usr/lib/, /usr/lib/openssh/ eller /usr/libexec/openssh/. Den exakta sökvägen kan kontrolleras med kommandot cat /etc/ssh/sshd_config | grep Subsystem på servern.

Hur säkert är NOPASSWD i sudoers?

Det är en kompromiss. Full åtkomst med ALL=(ALL) NOPASSWD:ALL minskar 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 -la på servern. Om du konfigurerade SFTP-servern via sudo men anslutningen föll tillbaka till vanliga behörigheter betyder det att sudo begä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.log kommer det att finnas en post som visar att användaren username höjde behörigheterna via sudo. Detta är ett plus: om det finns flera administratörer visar loggarna exakt vem som utförde operationen. Med direkt root-inloggning finns ingen sådan transparens.

Vad ska jag göra om sudo kräver TTY men WinSCP inte tillhandahåller en?

Kontrollera /etc/sudoers för alternativet Defaults 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. Moderna sudo-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-server startar sessionen som www-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-server inte 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.