Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🔓 Kuinka saada root-oikeudet WinSCP:ssä: sudon määrittäminen tiedostonsiirtoja varten

🔓 Kuinka saada root-oikeudet WinSCP:ssä: sudon määrittäminen tiedostonsiirtoja varten

Yhdistät palvelimelle tavallisena käyttäjänä, siirryt hakemistoon /etc/nginx ja saat vastaukseksi "Permission denied." Asetustiedostot, järjestelmähakemistot, lokit: kaikki tämä on lukittu pois tililtä, jolla ei ole root-oikeuksia. Ja suora root-kirjautuminen SSH:lla on useimmilla palvelimilla poistettu käytöstä tietoturvasyistä.

WinSCP on kätevä tiedostonhallintaohjelma Windowsille, mutta oletuksena sen SFTP-istunto toimii sen käyttäjän oikeuksilla, jolla kirjauduit sisään. SFTP-protokolla ei voi pyytää oikeuksien korotusta "lennosta" kuten pääte: se ei ole vuorovaikutteinen kättelyn aikana eikä voi näyttää ikkunaa sudo-salasanan syöttämistä varten.

Alla on neljä toimivaa tapaa saada WinSCP toimimaan pääkäyttäjän oikeuksilla, yksinkertaisimmasta "Jedi"-tason lähestymistapaan. Jokainen on testattu Ubuntu-, Debian- ja CentOS-järjestelmillä. Valitse se, joka sopii parhaiten infrastruktuuriisi.

💡 Pikakatsaus:

  • ➡️ Ongelma: WinSCP ei anna root-oikeuksia oletuksena, vaikka käyttäjällä olisi sudo.
  • Ensisijainen tapa: SFTP-palvelimen käynnistyskomennon korvaaminen WinSCP:n yhteysasetuksissa. Nopea ja kohdennettu.
  • 🔄 Vaihtoehto: SCP-protokollaan vaihtaminen ja sudo su - käyttö komentotulkkina.
  • ⚙️ Edistynyt: sshd_config-tiedoston muokkaaminen palvelimella. Globaali ratkaisu kaikille yhteyksille.

Vaihe 1: SFTP-palvelimen käynnistyskomento (ensisijainen tapa)

Yleisin ja tyylikkäin tapa saada root-oikeudet WinSCP:ssä on saada se käynnistämään SFTP-palvelin pääkäyttäjänä alusta alkaen. Tämä tehdään korvaamalla käynnistyskomento tietyn yhteyden asetuksissa. Itse palvelinta ei tarvitse konfiguroida uudelleen; ratkaisu toimii yhteyskohtaisesti.

SFTP-palvelimen asetusikkuna WinSCP:ssä

Vaiheittaiset ohjeet:

  • Käynnistä WinSCP ja avaa Site Manager.
  • Valitse haluttu yhteys ja napsauta Edit.
  • Napsauta ikkunan alareunassa Advanced….
  • Valitse vasemmasta valikosta Environment → SFTP.
  • Korvaa "SFTP Server" -kentässä "Default" seuraavalla komennolla:
1sudo /usr/lib/openssh/sftp-server

Vanhemmissa distribuutioissa polku voi olla eri. Tyypillisiä sftp-server-sijainteja:

Distribuutio

Polku sftp-serveriin

Ubuntu / Debian (nykyinen)

/usr/lib/openssh/sftp-server

Ubuntu / Debian (vanhempi)

/usr/lib/sftp-server

CentOS / RHEL / Fedora

/usr/libexec/openssh/sftp-server

Amazon Linux

/usr/libexec/openssh/sftp-server

Voit tarkistaa tarkan polun palvelimellasi päätteessä: cat /etc/ssh/sshd_config | grep Subsystem. Tämä komento näyttää, mitä binääriä SSH-palvelin itse käyttää.

Järjestelmä käynnistää tiedonsiirtoalijärjestelmän root-oikeuksilla välittömästi. Jotta tämä kuitenkin toimisi ilman virhettä, käyttäjäsi on pystyttävä suorittamaan sudo ilman salasanakyselyä. Tätä käsitellään seuraavassa vaiheessa.


Vaihe 2: Sudoers-tiedoston konfigurointi (sudon salliminen ilman salasanaa)

Koska SFTP-kättely ei ole vuorovaikutteinen, WinSCP:llä ei ole tapaa näyttää ikkunaa sudo-salasanan syöttämistä varten. Palvelin yksinkertaisesti katkaisee yhteyden virheeseen, jos salasanaa kysytään. Ratkaisu on myöntää käyttäjälle lupa suorittaa vaadittu komento ilman salasanaa /etc/sudoers-tiedoston kautta.

Sudoers-tiedoston muokkaus visudolla

Mitä tehdä:

  • Yhdistä palvelimelle SSH:lla (käyttäen PuTTYä tai WinSCP:n sisäänrakennettua päätettä).
  • Avaa sudoers-editori komennolla sudo visudo. Älä koskaan muokkaa /etc/sudoers-tiedostoa suoraan: syntaksivirhe lukitsee sudon koko järjestelmästä, ja visudo tarkistaa syntaksin ennen tallennusta.
  • Lisää seuraava rivi tiedoston loppuun (korvaa username kirjautumistunnuksellasi):
1username ALL=(ALL) NOPASSWD: ALL

Tämä myöntää käyttäjälle täydet oikeudet ilman salasanaa. Turvallisempi vaihtoehto on rajoittaa oikeus vain SFTP-palvelimen käynnistyskomentoon:

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

Jos palvelimella on useita ylläpitäjiä eri tunnuksilla, suppea konfiguraatio vähentää riskiä: vaikka tili vaarantuisi, hyökkääjä ei saa root-pääsyä kaikkeen, ainoastaan mahdollisuuden käynnistää SFTP.

Huom: requiretty-optio sudoersissa on oltava pois käytöstä. Nykyaikaiset sudo-rs-toteutukset eivät tue sitä oletuksena, mutta vanhemmilla palvelimilla tarkista ja kommentoi rivi Defaults requiretty, jos se on olemassa.


Vaihe 3: SCP-protokollaan vaihtaminen (nopea vaihtoehto)

Jos et halua käsitellä sftp-server-polkuja, voit vaihtaa itse tiedonsiirtoprotokollaa. WinSCP tukee SCP:tä, vanhempaa mutta luotettavaa protokollaa, joka omaksuu komentotulkin asetukset helpommin.

SCP-protokollan ja komentotulkin määritys WinSCP:ssä

Kuinka vaihtaa:

  • Vaihda WinSCP:n istuntoasetuksissa File protocol SFTP:stä SCP:hen.
  • Siirry kohtaan Advanced → SCP/Shell.
  • Syötä Shell-kenttään: sudo su -

Yhdistettäessä WinSCP suorittaa tämän komennon välittömästi kirjautumisen jälkeen ja vaihtaa istunnon root-tilaan.

SFTP

SCP

Root-oikeudet

Korvaamalla palvelimen binääri

Korvaamalla komentotulkki (sudo su -)

Nopeus

Suurempi, erityisesti monien pienten tiedostojen kanssa

Pienempi

Jatkaminen katkoksen jälkeen

Kyllä

Ei

Luotettavuus vanhemmissa järjestelmissä

Vaatii tarkan polun binääriin

Toimii "suoraan paketista"

Tietoturva

NOPASSWD voidaan rajoittaa yhteen komentoon

Vaatii täyden salasanattoman sudon

SCP-menetelmä on kompromissi. Se on helpompi konfiguroida, mutta häviää SFTP:lle nopeudessa ja palautumisominaisuuksissa yhteyden katketessa. Kertaluonteisissa asetusmuokkauksissa ero on merkityksetön. Säännöllisesti satoja tiedostoja siirrettäessä on parempi konfiguroida SFTP-menetelmä.


Vaihe 4: Globaali sshd_config-konfiguraatio (edistyneille käyttäjille)

Tämä menetelmä on tarkoitettu ylläpitäjille, jotka haluavat konfiguroida SSH-palvelimen toiminnan keskitetysti. Idea: korvaa Subsystem sftp -rivi tiedostossa /etc/ssh/sshd_config loogisella rakenteella, joka määrittää automaattisesti, voiko käyttäjä suorittaa sudon ilman salasanaa, ja käynnistää SFTP:n asianmukaisilla oikeuksilla.

Mitä muuttaa:

Vanha rivi (tyypillisesti):

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

Uusi rivi:

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

Kuinka se toimii:

  • sudo -n true tarkistaa, voiko käyttäjä suorittaa sudon ilman salasanaa (-n-lippu tarkoittaa ei-vuorovaikutteista).
  • Jos kyllä (&&), palvelin käynnistyy root-oikeuksilla.
  • Jos ei (||), palvelin käynnistyy tavallisilla käyttäjäoikeuksilla.

Muokkauksen jälkeen käynnistä SSH-palvelu uudelleen: sudo systemctl restart sshd.

Tärkeää: syntaksivirhe tässä tiedostossa lukitsee sinut kokonaan ulos palvelimelta SSH:n kautta. Ennen muokkaamista varmista, että sinulla on toinen pääte, jossa on aktiivinen istunto. Jos jokin menee pieleen, voit palauttaa muutokset. Tee myös varmuuskopio: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.


Pilvipalvelinten erityispiirteet (AWS EC2, DigitalOcean)

Pilvi-Linux-vedoksissa on usein esikonfiguroidut sudoers-asetukset, jotka voivat joko yksinkertaistaa tai monimutkaistaa tehtävää.

Cloud-init-sudo-asetukset AWS EC2:ssa

AWS EC2 (Ubuntu):

ubuntu-käyttäjällä Ubuntu 18.04:ssä ja uudemmissa vedoksissa on usein jo tarvittavat oikeudet. Tarkista tiedosto /etc/sudoers.d/90-cloud-init-users, joka saattaa jo sisältää rivin:

1ubuntu ALL=(ALL) NOPASSWD:ALL

Jos se on siellä, voit ohittaa vaiheen 2. Käytä WinSCP:n asetuksissa komentoa sudo /usr/lib/openssh/sftp-server.

AWS EC2 (Amazon Linux):

Amazon Linuxissa polku sftp-server-ohjelmaan on eri: /usr/libexec/openssh/sftp-server. Yhden kirjaimen virhe (lib eikä libexec) johtaa virhekoodiin 127 (Command not found) ja välittömään yhteyden katkeamiseen.

DigitalOcean (Ubuntu Dropletit):

Tavallisissa DigitalOcean-dropleteissa root-käyttäjä on oletuksena käytössä, mutta pääsy tapahtuu vain SSH-avaimella. Jos loit erillisen käyttäjän, sudoers-konfiguraatio on sama kuin tavallisessa Ubuntussa.

Yleinen neuvo pilveen: ennen polun syöttämistä WinSCP:hen, varmista, että tiedosto on olemassa palvelimella: ls -la /usr/lib/openssh/sftp-server (tai distribuutiosi vastaava).


⁉️🤔 Usein kysytyt kysymykset

Tarvitseeko minun ottaa suora root-kirjautuminen käyttöön, jotta WinSCP toimii sudon kanssa?

Ei. Kuvattujen menetelmien koko ajatus on käyttää tavallista tiliä ja korottaa oikeuksia tilapäisesti sudon kautta. Suoraa root-kirjautumista (PermitRootLogin yes) pidetään huonona tietoturvakäytäntönä: lokit eivät näytä, kuka ylläpitäjä todellisuudessa suoritti toimenpiteen.

Miksi WinSCP näyttää "Command not found" -virheen konfiguroinnin jälkeen?

Todennäköisesti polku sftp-server-ohjelmaan on virheellinen. Eri distribuutioissa se sijaitsee hakemistoissa /usr/lib/, /usr/lib/openssh/ tai /usr/libexec/openssh/. Tarkan polun voi tarkistaa palvelimella komennolla cat /etc/ssh/sshd_config | grep Subsystem.

Kuinka turvallinen NOPASSWD on sudoersissa?

Se on kompromissi. Täysi pääsy ALL=(ALL) NOPASSWD:ALL-asetuksella vähentää suojausta: jos hyökkääjä saa pääsyn käyttäjään, hän saa myös root-oikeudet. Rajoittaminen tiettyyn komentoon (/usr/lib/openssh/sftp-server) on huomattavasti turvallisempaa: ulkopuolinen ei voi suorittaa tämän tilin kautta mitään muuta kuin SFTP-palvelimen.

Toimiiko tämä muiden asiakasohjelmien, kuten FileZillan tai Cyberduckin, kanssa?

Periaate on sama, mutta konfigurointi eroaa. FileZillassa ei ole kätevää kenttää SFTP-palvelimen komennolle sen graafisessa käyttöliittymässä; konfigurointitiedoston muokkaaminen on tarpeen. Cyberduck tukee "SFTP Server" -optiota yhteysasetuksissa, samankaltaisesti kuin WinSCP. WinSCP voittaa kätevyydessä juuri tässä skenaariossa.

Mitä teen, jos tiedostot näkyvät, mutta niitä ei voi muokata?

Tarkista omistaja ja oikeudet komennolla ls -la palvelimella. Jos konfiguroit SFTP-palvelimen sudon kautta, mutta yhteys palasi tavallisiin oikeuksiin, se tarkoittaa, että sudo kysyi salasanaa eikä saanut vastausta. Tarkista NOPASSWD-konfiguraatio vaiheesta 2 uudelleen.

Voinko vain vaihtaa järjestelmätiedostojen omistajan omalle käyttäjälleni?

Tämä on "likainen" kiertotapa. Järjestelmäpalvelut odottavat, että niiden konfiguraatiot ovat root-käyttäjän omistamia. Omistajan (chown) tai oikeuksien (chmod) vaihtaminen järjestelmätiedostoille voi rikkoa palveluita. On parempi käyttää viisi minuuttia sudon konfigurointiin ja tehdä asiat kunnolla.

Mitä eroa on SCP:llä ja SFTP:llä sudon yhteydessä?

SCP on yksinkertaisesti kopiointia SSH:n yli: se omaksuu komentotulkin helpommin, joten sille riittää komento sudo su - Shell-kentässä. SFTP on täysimittainen alijärjestelmä, joka toimii erillisenä prosessina: se vaatii binäärin korvaustempun. SFTP on nopeampi ja ominaisuuksiltaan rikkaampi; SCP on helpompi konfiguroida.

Näkyvätkö toimet lokeissa, kun käytetään sudoa WinSCP:n kautta?

Kyllä. Tiedostossa /var/log/auth.log on merkintä, joka näyttää, että käyttäjä username korotti oikeuksia sudon kautta. Tämä on plussaa: jos ylläpitäjiä on useita, lokit näyttävät tarkalleen, kuka suoritti toimenpiteen. Suorassa root-kirjautumisessa tällaista läpinäkyvyyttä ei ole.

Mitä teen, jos sudo vaatii TTY:n, mutta WinSCP ei tarjoa sellaista?

Tarkista /etc/sudoers-tiedostosta Defaults requiretty -optio. Jos se on olemassa, kommentoi se (lisää # rivin alkuun) tai poista se käytöstä tietylle käyttäjälle: Defaults:username !requiretty. Nykyaikaiset sudo-rs-toteutukset eivät tue tätä optiota; ongelma koskee vain vanhempia palvelimia.

Voinko ajaa SFTP:n eri käyttäjänä rootin sijaan?

Kyllä. Komento sudo -u www-data /usr/lib/openssh/sftp-server käynnistää istunnon www-data-käyttäjänä. Tämä on kätevää, kun täytyy muokata verkkosivuston tiedostoja koskematta järjestelmähakemistoihin. Sudoers-oikeuksien tähän on sisällettävä -u-optio: username ALL=(www-data) NOPASSWD: /usr/lib/openssh/sftp-server.


Lopullinen päätös: mikä menetelmä valita

Päivittäiseen palvelintyöhön ensimmäinen menetelmä on optimaalinen: SFTP-palvelimen komennon korvaaminen yhdistettynä suppeaan NOPASSWD-konfiguraatioon vain sftp-server-ohjelmalle. Se on turvallinen, ei vaikuta yleisiin asetuksiin ja toimii kaikissa nykyaikaisissa distribuutioissa.

  • Jos sinulla on Ubuntu / Debian ja olet valmis käyttämään 5 minuuttia konfigurointiin, käytä Vaihetta 1 + Vaihetta 2 äläkä koskaan palaa asiaan.
  • Jos palvelin on vanha ja polkua sftp-server-ohjelmaan ei löydy, vaihda SCP:hen (Vaihe 3): se sietää epätarkkuuksia ja toimii käytännössä kaikkialla.
  • Jos hallinnoit kymmeniä palvelimia ja haluat yhtenäisen standardin, konfiguroi sshd_config (Vaihe 4) kerran Ansiblella tai manuaalisesti, mutta ehdottomasti varmuuskopion kanssa.

Aloita tarkistuksella: kirjaudu palvelimelle SSH:lla ja suorita cat /etc/ssh/sshd_config | grep Subsystem. Minuutissa tiedät tarkan polun, ja ensimmäinen menetelmä toimii ensimmäisellä yrittämällä. Mitä tiedonsiirtomenetelmää sinä käytät? Jaa kommenteissa.