Skip to content

Alt om WordPress, webutvikling — og mer til

🔓 Slik får du root-rettigheter i WinSCP: konfigurere sudo for filoverføringer

🔓 Slik får du root-rettigheter i WinSCP: konfigurere sudo for filoverføringer

Du kobler til en server som vanlig bruker, navigerer til /etc/nginx og får «Permission denied». Konfigurasjonsfiler, systemkataloger, logger: alt dette er låst for en konto uten root-rettigheter. Og direkte root-innlogging via SSH er deaktivert på de fleste servere av sikkerhetshensyn.

WinSCP er en praktisk filbehandler for Windows, men som standard opererer SFTP-økten med rettighetene til brukeren du logget inn som. SFTP-protokollen kan ikke be om rettighetsheving «on the fly» slik en terminal kan: den er ikke interaktiv under håndtrykket og kan ikke vise et vindu for å taste inn et sudo-passord.

Nedenfor finner du fire fungerende metoder for å få WinSCP til å kjøre med superbrukerrettigheter, fra den enkleste til «Jedi»-tilnærmingen. Hver av dem er testet på Ubuntu, Debian og CentOS. Velg den som passer best for din infrastruktur.

💡 Rask oversikt:

  • ➡️ Problem: WinSCP gir ikke root-rettigheter som standard, selv om brukeren har sudo.
  • Primær metode: Erstatte oppstartskommandoen for SFTP-serveren i WinSCPs nettstedsinnstillinger. Raskt og målrettet.
  • 🔄 Alternativ: Bytte til SCP-protokollen med sudo su - som skall.
  • ⚙️ Avansert: Redigere sshd_config på serveren. En global løsning for alle tilkoblinger.

Trinn 1: Oppstartskommando for SFTP-server (den primære metoden)

Den vanligste og mest elegante måten å få root-rettigheter i WinSCP på, er å få den til å starte SFTP-serveren som superbruker fra begynnelsen av. Dette gjøres ved å erstatte oppstartskommandoen i innstillingene for en spesifikk tilkobling. Selve serveren trenger ikke å rekonfigureres; løsningen fungerer per tilkobling.

SFTP server settings window in WinSCP

Trinnvise instruksjoner:

  • Start WinSCP og åpne Nettstedsbehandler.
  • Velg ønsket tilkobling og klikk Rediger.
  • Klikk Avansert… nederst i vinduet.
  • I menyen til venstre, gå til Miljø → SFTP.
  • I feltet «SFTP-server», erstatt «Standard» med følgende kommando:
1sudo /usr/lib/openssh/sftp-server

For eldre distribusjoner kan stien være annerledes. Typiske plasseringer for sftp-server:

Distribusjon

Sti til sftp-server

Ubuntu / Debian (nyere)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (eldre)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

Du kan sjekke den nøyaktige stien på serveren din via terminal: cat /etc/ssh/sshd_config | grep Subsystem. Denne kommandoen viser hvilken binærfil SSH-serveren selv bruker.

Systemet vil starte filoverføringsundersystemet med root-rettigheter umiddelbart. For at dette skal fungere uten feil, må imidlertid brukeren din kunne kjøre sudo uten passordspørsmål. Det dekkes i neste trinn.


Trinn 2: Konfigurere sudoers (tillate sudo uten passord)

Siden SFTP-håndtrykket ikke er interaktivt, har WinSCP ingen mulighet til å vise et vindu for å taste inn et sudo-passord. Serveren vil ganske enkelt avslutte tilkoblingen med en feil hvis et passord blir etterspurt. Løsningen er å gi brukeren tillatelse til å kjøre den nødvendige kommandoen uten passord via filen /etc/sudoers.

Editing the sudoers file via visudo

Hva du skal gjøre:

  • Koble til serveren via SSH (bruk PuTTY eller WinSCPs innebygde terminal).
  • Åpne sudoers-editoren med sudo visudo. Rediger aldri /etc/sudoers direkte: en syntaksfeil vil låse sudo for hele systemet, og visudo validerer syntaksen før lagring.
  • Legg til følgende linje på slutten av filen (erstatt username med ditt brukernavn):
1username ALL=(ALL) NOPASSWD: ALL

Dette gir brukeren full tilgang uten passord. Et sikrere alternativ er å begrense tillatelsen til kun oppstartskommandoen for SFTP-serveren:

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

Hvis serveren har flere administratorer med ulike brukernavn, reduserer en smal konfigurasjon risikoen: selv om en konto kompromitteres, får ikke angriperen root-tilgang til alt, bare muligheten til å starte SFTP.

Merk: requiretty-alternativet i sudoers må være deaktivert. Moderne sudo-rs-implementasjoner støtter det ikke som standard, men på eldre servere, sjekk og kommenter ut linjen Defaults requiretty hvis den finnes.


Trinn 3: Bytte til SCP-protokollen (et raskt alternativ)

Hvis du ikke vil forholde deg til stier til sftp-server, kan du bytte selve dataoverføringsprotokollen. WinSCP støtter SCP, en eldre, men pålitelig protokoll som lettere fanger opp skallinnstillinger.

Configuring SCP protocol and shell in WinSCP

Slik bytter du:

  • I WinSCPs øktinnstillinger, endre Filprotokoll fra SFTP til SCP.
  • Gå til Avansert → SCP/Skall.
  • I feltet Skall, skriv inn: sudo su -

Ved tilkobling vil WinSCP kjøre denne kommandoen umiddelbart etter innlogging og bytte økten til root-modus.

SFTP

SCP

Root-rettigheter

Via erstatning av serverbinærfilen

Via erstatning av skallet (sudo su -)

Hastighet

Høyere, spesielt med mange små filer

Lavere

Gjenoppta ved frakobling

Ja

Nei

Pålitelighet på eldre systemer

Krever nøyaktig sti til binærfil

Fungerer «ut av boksen»

Sikkerhet

NOPASSWD kan begrenses til én kommando

Krever fullstendig passordløs sudo

SCP-metoden er et kompromiss. Den er enklere å konfigurere, men taper for SFTP i hastighet og gjenopprettingsmuligheter etter en frakobling. For engangsredigeringer av konfigurasjon er forskjellen ubetydelig. For regelmessig overføring av hundrevis av filer, er det bedre å konfigurere SFTP-metoden.


Trinn 4: Global sshd_config-konfigurasjon (for avanserte brukere)

Denne metoden er for administratorer som ønsker å konfigurere SSH-serverens oppførsel sentralt. Ideen: erstatt Subsystem sftp-linjen i /etc/ssh/sshd_config med en logisk konstruksjon som automatisk avgjør om brukeren kan kjøre sudo uten passord og starter SFTP med passende rettigheter.

Hva som skal endres:

Gammel linje (typisk):

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

Ny linje:

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

Slik fungerer det:

  • sudo -n true sjekker om brukeren kan kjøre sudo uten passord (-n-flagget betyr ikke-interaktiv).
  • Hvis ja (&&), starter serveren med root-rettigheter.
  • Hvis nei (||), starter serveren med vanlige brukerrettigheter.

Etter redigering, start SSH-tjenesten på nytt: sudo systemctl restart sshd.

Viktig: en syntaksfeil i denne filen vil fullstendig låse deg ute av serveren via SSH. Før du redigerer, sørg for at du har en annen terminal med en aktiv økt. Hvis noe går galt, vil du kunne tilbakestille endringene. Ta også en sikkerhetskopi: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.


Spesifikke forhold for skyservere (AWS EC2, DigitalOcean)

Linux-bilder i skyen har ofte forhåndskonfigurerte sudoers-innstillinger som enten kan forenkle eller komplisere oppgaven.

cloud-init sudo settings in AWS EC2

AWS EC2 (Ubuntu):

ubuntu-brukeren på Ubuntu 18.04 og nyere bilder har ofte allerede de nødvendige tillatelsene. Sjekk filen /etc/sudoers.d/90-cloud-init-users, som kanskje allerede inneholder linjen:

1ubuntu ALL=(ALL) NOPASSWD:ALL

Hvis den er der, kan du hoppe over trinn 2. I WinSCP-innstillingene bruker du kommandoen sudo /usr/lib/openssh/sftp-server.

AWS EC2 (Amazon Linux):

På Amazon Linux er stien til sftp-server annerledes: /usr/libexec/openssh/sftp-server. En enkelt bokstavfeil (lib i stedet for libexec) vil resultere i feilkode 127 (Command not found) og et umiddelbart tilkoblingsbrudd.

DigitalOcean (Ubuntu Droplets):

På standard DigitalOcean-droplets er root-brukeren aktivert som standard, men tilgang er kun via SSH-nøkkel. Hvis du opprettet en separat bruker, er sudoers-konfigurasjonen den samme som for vanlig Ubuntu.

Generelt råd for sky: før du legger inn en sti i WinSCP, bekreft at filen finnes på serveren: ls -la /usr/lib/openssh/sftp-server (eller tilsvarende for din distribusjon).


⁉️🤔 Ofte stilte spørsmål

Må jeg aktivere direkte root-innlogging for at WinSCP skal fungere med sudo?

Nei. Hele poenget med de beskrevne metodene er å bruke en vanlig konto og midlertidig heve rettigheter via sudo. Direkte root-innlogging (PermitRootLogin yes) anses som dårlig sikkerhetspraksis: logger vil ikke vise hvilken administrator som faktisk utførte en handling.

Hvorfor viser WinSCP en «Command not found»-feil etter konfigurasjon?

Mest sannsynlig er stien til sftp-server feil. I ulike distribusjoner ligger den i /usr/lib/, /usr/lib/openssh/ eller /usr/libexec/openssh/. Den nøyaktige stien kan sjekkes med kommandoen cat /etc/ssh/sshd_config | grep Subsystem på serveren.

Hvor sikkert er NOPASSWD i sudoers?

Det er et kompromiss. Full tilgang med ALL=(ALL) NOPASSWD:ALL reduserer beskyttelsen: hvis en angriper får tilgang til brukeren, får de også root. Å begrense til en spesifikk kommando (/usr/lib/openssh/sftp-server) er betydelig sikrere: en uvedkommende vil ikke kunne kjøre noe annet enn SFTP-serveren gjennom denne kontoen.

Fungerer dette med andre klienter som FileZilla eller Cyberduck?

Prinsippet er det samme, men konfigurasjonen er forskjellig. FileZilla har ikke et praktisk felt for SFTP-serverkommandoen i sitt grafiske grensesnitt; redigering av konfigurasjonsfilen er nødvendig. Cyberduck støtter alternativet «SFTP Server» i tilkoblingsinnstillingene, på samme måte som WinSCP. WinSCP vinner på bekvemmelighet i akkurat dette scenarioet.

Hva bør jeg gjøre hvis filer er synlige, men ikke redigerbare?

Sjekk eier og rettigheter med ls -la på serveren. Hvis du konfigurerte SFTP-serveren via sudo, men tilkoblingen falt tilbake til vanlige rettigheter, betyr det at sudo ba om et passord og ikke fikk svar. Kontroller NOPASSWD-konfigurasjonen fra trinn 2 på nytt.

Kan jeg bare endre eieren av systemfiler til min bruker?

Dette er en «skitten» omvei. Systemtjenester forventer at konfigurasjonene deres eies av root. Å endre eier (chown) eller rettigheter (chmod) på systemfiler kan ødelegge tjenester. Det er bedre å bruke fem minutter på å konfigurere sudo og gjøre ting ordentlig.

Hva er forskjellen mellom SCP og SFTP i kontekst av sudo?

SCP er ganske enkelt kopiering over SSH: det fanger lettere opp skallet, så for det er kommandoen sudo su - i Skall-feltet tilstrekkelig. SFTP er et fullverdig undersystem som kjører som en separat prosess: det krever trikset med binærerstatning. SFTP er raskere og mer funksjonsrikt; SCP er enklere å konfigurere.

Er handlinger synlige i logger når man bruker sudo gjennom WinSCP?

Ja. I /var/log/auth.log vil det være en oppføring som viser at bruker username hevet rettigheter via sudo. Dette er et pluss: hvis det er flere administratorer, viser loggene nøyaktig hvem som utførte operasjonen. Med direkte root-innlogging finnes ikke denne transparensen.

Hva bør jeg gjøre hvis sudo krever TTY, men WinSCP ikke tilbyr en?

Sjekk /etc/sudoers for alternativet Defaults requiretty. Hvis det finnes, kommenter det ut (legg til # i begynnelsen av linjen) eller deaktiver det for en spesifikk bruker: Defaults:username !requiretty. Moderne sudo-rs-implementasjoner støtter ikke dette alternativet; problemet er kun relevant for eldre servere.

Kan jeg kjøre SFTP som en annen bruker i stedet for root?

Ja. Kommandoen sudo -u www-data /usr/lib/openssh/sftp-server vil starte økten som www-data. Dette er praktisk når du trenger å redigere nettsidefiler uten å røre systemkataloger. Sudoers-tillatelsene for dette må inkludere -u-alternativet: username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.


Endelig dom: hvilken metode du bør velge

For daglig serverarbeid er den første metoden optimal: å erstatte SFTP-serverkommandoen kombinert med en smal NOPASSWD-konfigurasjon kun for sftp-server. Den er sikker, påvirker ikke globale innstillinger og fungerer på alle moderne distribusjoner.

  • Hvis du har Ubuntu / Debian og er villig til å bruke 5 minutter på konfigurasjon, bruk Trinn 1 + Trinn 2 og glem problemet for godt.
  • Hvis serveren er gammel og stien til sftp-server ikke kan finnes, bytt til SCP (Trinn 3): den tolererer unøyaktigheter og fungerer praktisk talt overalt.
  • Hvis du administrerer et dusin servere og ønsker en enhetlig standard, konfigurer sshd_config (Trinn 4) én gang via Ansible eller manuelt, men definitivt med en sikkerhetskopi.

Start med en sjekk: logg inn på serveren via SSH og kjør cat /etc/ssh/sshd_config | grep Subsystem. I løpet av et minutt vil du vite den nøyaktige stien, og den første metoden vil fungere på første forsøk. Hvilken filoverføringsmetode bruker du? Del i kommentarfeltet.