Kirjoittaja Aihe: sudo shell scriptissä [RATKAISTU]  (Luettu 3539 kertaa)

reichl

  • Käyttäjä
  • Viestejä: 3
    • Profiili
sudo shell scriptissä [RATKAISTU]
« : 09.07.09 - klo:22.14 »
Haluaisin muokata etc/hosts -tiedostoa skriptin kautta.
Yritin seuraavaa:

Koodia: [Valitse]
echo salasana | sudoedit -S  echo "127.0.0.1 uusi" >> /etc/hosts
tai
echo salasana | sudo -S -e echo "127.0.0.1 uusi" >> /etc/hosts

Seurauksena viesti: lupa evätty.

Komennolla
Koodia: [Valitse]
sudo pico /etc/hostspääsen muokkaamaan tiedostoa picolla annettuani salasanan. Mikä tässä on erona?

hosts oikeudet = 644.

Lisäsin myös etc/sudoers -tiedostoon rivin
Koodia: [Valitse]
kayttaja ALL=(ALL) sudoedit /etc/hostsmutta sillä ei ollut mitään vaikutusta.

Kiitos jos joku osaa neuvoa  :)
« Viimeksi muokattu: 13.07.09 - klo:20.15 kirjoittanut reichl »

gdm

  • Sitä saa mitä tilaa...
  • Käyttäjä
  • Viestejä: 4363
    • Profiili
    • Keskustelualueiden säännöt
Vs: sudo shell scriptissä
« Vastaus #1 : 09.07.09 - klo:22.17 »
echo ja tee komennoilla onnistuu.
Koodia: [Valitse]
echo "haluttu asia" |sudo tee -a tiedosto
Nyt tuo epäonnistuu koska oikeudet loppuu >> tuohon.

eiköhän kohta joku ohjelmointiin paremmin perehtynyt kerro paremman tavan toteuttaa asia.
« Viimeksi muokattu: 09.07.09 - klo:22.19 kirjoittanut gdm »
Lisää [Ratkaistu] aloitusviestiin jos ongelmasi selviää!
Saamasi tuki on ilmaista, joten älä vaadi tai uhkaile saadaksesi apua!

Jantunen

  • Käyttäjä
  • Viestejä: 254
  • Hö.
    • Profiili
    • Strobotti.com: Valokuvausta ja kameraharrastusta
Vs: sudo shell scriptissä
« Vastaus #2 : 09.07.09 - klo:22.19 »
Olisi todella huonoa tietoturvaa kirjoittaa salasanoja selväkielisenä tekstinä mihinkään tiedostoon (eli tuohon sinun skriptiisi).

Kysymys: mikset aja sitä skriptiä sudona? silloin kaikki skriptissä ajetut komennot voi suorittaa ilman tuota sudoa sillä ne saavat automaattisesti "isäntäprosessin" oikeudet...
Lenovo Thinkpad T420 Intel i5 16Gt/SSD512GB+HDD2TB, Ubuntu 16.04 Xenial Xerus 64bit; Kuvia ja lätinää valokuvauksesta: https://www.strobotti.com/

reichl

  • Käyttäjä
  • Viestejä: 3
    • Profiili
Vs: sudo shell scriptissä
« Vastaus #3 : 10.07.09 - klo:15.17 »
Tarkoitus on kyllä laittaa salasana eri tiedostoon josta se sitten luetaan, mutta haluaisin saada tämän ensin toimimaan näin. En voi ajaa sudona, koska tarvitsee luoda kansioita joiden omistajaksi tulee tavallinen käyttäjä. Paitsi jos muuttujan välittäminen tiedostosta toiseen onnistuu? Kun käyttäjä syöttää muuttujan arvon tavallisena käyttäjänä ajettavaan skriptiin, niin saanko sen välitettyä sudona ajettavaan skriptiin? Tai voinko sudona ajettavassa skriptissä määrittää, että luotavan kansion omistajaksi tulee joku tietty käyttäjä? En tiedä mikä olisi paras tapa tehdä asia.

Kokeilin näitä kahta:
Koodia: [Valitse]
echo salasana | echo "127.0.0.1 uusi" | sudo -S tee -a /etc/hostsherjasi väärästä salasanasta (luki sen luultavasti jälkimmäisestä echosta)
Koodia: [Valitse]
echo salasana | echo "127.0.0.1 uusi" >> sudo -S tee -a /etc/hostsei tullut virheilmoitusta, mutta tiedostoon ei myöskään kirjoittunut mitään.

Tämä kyllä toimii
Koodia: [Valitse]
echo "127.0.0.1 uusi" | sudo tee -a /etc/hosts

Tha-Fox

  • Käyttäjä
  • Viestejä: 3315
  • Arch Linux && CentOS
    • Profiili
    • http://kettu.dy.fi
Vs: sudo shell scriptissä
« Vastaus #4 : 10.07.09 - klo:15.23 »
Tai voinko sudona ajettavassa skriptissä määrittää, että luotavan kansion omistajaksi tulee joku tietty käyttäjä? En tiedä mikä olisi paras tapa tehdä asia.

Onnistuuko, jos luo ensin kansion ja sitten vaihtaa sen omistajan? Tosin melko tökerö ratkaisu olisi  :-[

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: sudo shell scriptissä
« Vastaus #5 : 10.07.09 - klo:16.35 »
Onnistuuko, jos luo ensin kansion ja sitten vaihtaa sen omistajan? Tosin melko tökerö ratkaisu olisi  :-[

Ei lähellekään niin tökeröä kuin sudon käyttäminen skriptissä.

Jantunen

  • Käyttäjä
  • Viestejä: 254
  • Hö.
    • Profiili
    • Strobotti.com: Valokuvausta ja kameraharrastusta
Vs: sudo shell scriptissä
« Vastaus #6 : 10.07.09 - klo:22.33 »
Onnistuuko, jos luo ensin kansion ja sitten vaihtaa sen omistajan? Tosin melko tökerö ratkaisu olisi  :-[

Ei lähellekään niin tökeröä kuin sudon käyttäminen skriptissä.

Samaa mieltä, ehdottomasti chown -komentoa kehiin vaan mieluummin...
Lenovo Thinkpad T420 Intel i5 16Gt/SSD512GB+HDD2TB, Ubuntu 16.04 Xenial Xerus 64bit; Kuvia ja lätinää valokuvauksesta: https://www.strobotti.com/

reichl

  • Käyttäjä
  • Viestejä: 3
    • Profiili
Vs: sudo shell scriptissä [RATKAISTU]
« Vastaus #7 : 13.07.09 - klo:20.16 »
Selvä, chownia siis. Kiitos.

peran

  • Vieras
Vs: sudo shell scriptissä
« Vastaus #8 : 13.07.09 - klo:21.20 »
Onnistuuko, jos luo ensin kansion ja sitten vaihtaa sen omistajan? Tosin melko tökerö ratkaisu olisi  :-[

Ei lähellekään niin tökeröä kuin sudon käyttäminen skriptissä.

Kyllä sudoa voi käyttää scriptissäkin, mutta salasanojen näyttäminen scriptissä on huonoa tapaa.
Roottina voi ajaa sudo käskyn, kun haluaa vähentää oikeuksia:
Koodia: [Valitse]
sudo su
whoami
sudo -u tavantallaaja whoami
whoami
exit

Tavantallaajan tilalle haluamasi käyttäjätunnus. Whoami tulostaa käyttäjän, jolla ajetaan ko. käskyä.

edit - siis roottina ajetut sudo-käskyt eivät salasanoja kysele.
« Viimeksi muokattu: 13.07.09 - klo:21.22 kirjoittanut peran »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: sudo shell scriptissä
« Vastaus #9 : 14.07.09 - klo:12.25 »
Kyllä sudoa voi käyttää scriptissäkin, mutta salasanojen näyttäminen scriptissä on huonoa tapaa.

Äkkiseltään ei tule mieleen yhtäkään perusteltua syytä sudon käyttämiseksi skriptissä. Se lisää turhan riippuvuuden sudoon, vaatii virheenkäsittelyn tapaukselle jossa sudon suorittaminen epäonnistuu ja lisäksi sudon asetuksista riippuen se saattaa kysellä salasanaa joka kerta erikseen. Muitakin ongelmia saattaa olla mutta nämä tulivat mieleen heti ilman tarkempaa miettimistä.

Jos skripti oikeasti tarvitsee pääkäyttäjän oikeuksia niin silloin on luontevinta että skripti tarkistaa käynnistyessään oikeudet ja lopettaa toiminnan heti jos tarvittavia oikeuksia ei ole.

Lainaus
Roottina voi ajaa sudo käskyn, kun haluaa vähentää oikeuksia:
Koodia: [Valitse]
sudo su
whoami
sudo -u tavantallaaja whoami
whoami
exit

Tuo ei toimi tuollaisenaan skriptinä (eikä varmaan ollut tarkoitettukaan toimimaan) sillä ensimmäinen rivi pysäyttää skriptin suorituksen siksi aikaa kunnes siinä aloitetusta pääkäyttäjän istunnosta poistutaan. Sen jälkeen loppu skripti suoritetaan samoilla oikeuksilla kuin se on alunperinkin ajettu. Jos skriptin suorittaa tavantallaaja niin tuo tulostaa kolme kertaa tavantallaaja. Jos sen suorittaa joku muu jolla ei ole oikeuksia tavantallaajaksi niin skriptin suoritus epäonnistuu siinä kohtaa ja tapahtunut virhe pitäisi käsitellä jollakin tavalla.

Jos oikeuksia pitää väliaikaisesti tiputtaa niin se onnistuu myös komennolla su. Hyvin harvoin tuohon on kuitenkaan tarvetta enkä nyt keksi yhtäkään kunnollista esimerkkiä jossa tuohon olisi tarvetta. Porosoftan (proprietary software) ajamisessa se voi tietysti olla tarpeen.
« Viimeksi muokattu: 14.07.09 - klo:12.54 kirjoittanut mgronber »

peran

  • Vieras
Vs: sudo shell scriptissä
« Vastaus #10 : 15.07.09 - klo:04.57 »
Kyllä sudoa voi käyttää scriptissäkin, mutta salasanojen näyttäminen scriptissä on huonoa tapaa.

Äkkiseltään ei tule mieleen yhtäkään perusteltua syytä sudon käyttämiseksi skriptissä. Se lisää turhan riippuvuuden sudoon, vaatii virheenkäsittelyn tapaukselle jossa sudon suorittaminen epäonnistuu ja lisäksi sudon asetuksista riippuen se saattaa kysellä salasanaa joka kerta erikseen. Muitakin ongelmia saattaa olla mutta nämä tulivat mieleen heti ilman tarkempaa miettimistä.

Jos skripti oikeasti tarvitsee pääkäyttäjän oikeuksia niin silloin on luontevinta että skripti tarkistaa käynnistyessään oikeudet ja lopettaa toiminnan heti jos tarvittavia oikeuksia ei ole.

Minun mielestäni on scriptissä perusteltua käyttää sudoa, kun scriptin oletetaan käytettävän pääkäyttäjän oikeuksin, mutta jostain syystä halutaan alentaan tiettyjen käskyjen kohdalla oikeuksia tavan tallaanjan oikeuksiin. Perustelunani on tälle, että root-oikeuksia tulee käyttää mahdollisimman vähän. Haittana tietenkin tulee, ettei näistä scripteistä välttämättä tule hirvittävän siirrettäviä.

Tosin oletan sinun uninstalloineen kaikki sudoon viittaavat, ja laittaneen itsellesi turvallisen root-tilin, jotta järjestelmäsi on sellainen kuin haluat.  :P

Huomioitavaa on myöskin, ettei riippuvuus sudoon Ubuntussa haittaa, koska se taitaa tulla jopa minimalistisessa järjestelmässäkin vakiona. (Tosta minimalistisesta järjestelmästä en ole ihan 100 varma, kun en ole asentanut sitä, mutta kaikissa perus Ubuntuissa se tulee ainakin).

Lainaus
Roottina voi ajaa sudo käskyn, kun haluaa vähentää oikeuksia:
Koodia: [Valitse]
sudo su
whoami
sudo -u tavantallaaja whoami
whoami
exit

Tuo ei toimi tuollaisenaan skriptinä (eikä varmaan ollut tarkoitettukaan toimimaan) sillä ensimmäinen rivi pysäyttää skriptin suorituksen siksi aikaa kunnes siinä aloitetusta pääkäyttäjän istunnosta poistutaan. Sen jälkeen loppu skripti suoritetaan samoilla oikeuksilla kuin se on alunperinkin ajettu. Jos skriptin suorittaa tavantallaaja niin tuo tulostaa kolme kertaa tavantallaaja. Jos sen suorittaa joku muu jolla ei ole oikeuksia tavantallaajaksi niin skriptin suoritus epäonnistuu siinä kohtaa ja tapahtunut virhe pitäisi käsitellä jollakin tavalla.

Joo, se ei ollut scripti vaan esimerkki.

Jos oikeuksia pitää väliaikaisesti tiputtaa niin se onnistuu myös komennolla su. Hyvin harvoin tuohon on kuitenkaan tarvetta enkä nyt keksi yhtäkään kunnollista esimerkkiä jossa tuohon olisi tarvetta. Porosoftan (proprietary software) ajamisessa se voi tietysti olla tarpeen.

Joo, kyllä sen voi su:llakin toteuttaa, mutta kyllä se onnistuu sudollakin. Tuohon oikeuksien alennukseen ainakin itse tarvitsin yhdessä scriptissä, kun halusin mountata iso-tiedostoja loopilla (joo löytyy alemmilla oikeuksilla mounttaava kikkarekin, mutten halunnut asentaa sitä). ja käsitellä niistä löytyviä tiedostoja normaalilla käyttäjällä. Olisin sen voinut kyllä tehdä su:llakin, mutta Ubuntussa on valmiiksi asennettu kätevä sudo:kin, joten sitä ei tarvinnut käyttää.

Tuskin tulen vastaamaan vastauksiin (ainakaan toivomani mukaan), koska tuskin pääsemme väittelyissä puusta pitään...

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: sudo shell scriptissä
« Vastaus #11 : 15.07.09 - klo:09.40 »
Minun mielestäni on scriptissä perusteltua käyttää sudoa, kun scriptin oletetaan käytettävän pääkäyttäjän oikeuksin, mutta jostain syystä halutaan alentaan tiettyjen käskyjen kohdalla oikeuksia tavan tallaanjan oikeuksiin.

Minusta tuo on äärimmäisen harvinainen tilanne. Tuollaisessa tilanteessa tulee äkkiä mieleen että pitäisikö skriptejä olla yhden sijasta vähintään kaksi joista vain toinen vaatii pääkäyttäjän oikeudet ja toinen hoitaa tavallisen käyttäjän oikeuksilla suoritettavat asiat.

Lainaus
Perustelunani on tälle, että root-oikeuksia tulee käyttää mahdollisimman vähän. Haittana tietenkin tulee, ettei näistä scripteistä välttämättä tule hirvittävän siirrettäviä.

Nii-in. Minusta skriptit kannattaa kirjoittaa yleensä mahdollisimman helposti siirrettäviksi.

Lainaus
Tosin oletan sinun uninstalloineen kaikki sudoon viittaavat, ja laittaneen itsellesi turvallisen root-tilin, jotta järjestelmäsi on sellainen kuin haluat.  :P

Miksi ihmeessä? Sudo on hyvä työkalu siihen mihin se on tarkoitettu. Sitä ei ole tarkoitettu skripteihin.

Lainaus
Huomioitavaa on myöskin, ettei riippuvuus sudoon Ubuntussa haittaa, koska se taitaa tulla jopa minimalistisessa järjestelmässäkin vakiona.

Vastaavasti voitaisiin sanoa ettei bash-skriptien suorittamisesta /bin/sh-tulkilla ole haittaa koska se on lähes aina symbolisesti linkattu /bin/bash:iin. Paitsi tietysti Ubuntussa jossa se on linkattu /bin/dash:iin jonka kanssa bash-skriptit eivät toimi. Jos skriptin tekee oikein niin se toimii kaikissa järjestelmissä.

Lainaus
Joo, kyllä sen voi su:llakin toteuttaa, mutta kyllä se onnistuu sudollakin.

Kyllä naulankin voi hakata vasaran sijasta korkokengällä ja ruuvit vääntää meisselin sijasta keittiöveitsellä. Vaikka jokin asia onnistuu väärälläkin työkalulla niin sen käyttäminen ei kuitenkaan ole järkevää.

Lainaus
Olisin sen voinut kyllä tehdä su:llakin, mutta Ubuntussa on valmiiksi asennettu kätevä sudo:kin, joten sitä ei tarvinnut käyttää.

Miksipä sitä tekisi skriptistä sellaisen että se toimisi kaikkialla kun samalla vaivalla voi rajoittaa sen toiminnan vain tietyllä tavalla konfattuihin järjestelmiin. Voi olla että sopivasti konffatulla sudolla tuo ei toimi kaikissa *buntuissakaan (en tunne sudon asetuksia riittävän hyvin jotta osaisin sanoa mitään varmasti).

Lainaus
Tuskin tulen vastaamaan vastauksiin (ainakaan toivomani mukaan), koska tuskin pääsemme väittelyissä puusta pitään...

Riippuu ihan siitä osaatko myöntää olevasi väärässä ;)

kuutio

  • Vieras
Vs: sudo shell scriptissä
« Vastaus #12 : 15.07.09 - klo:10.37 »
Miksi ihmeessä? Sudo on hyvä työkalu siihen mihin se on tarkoitettu. Sitä ei ole tarkoitettu skripteihin.
Mielestäni tämä on turhan mustavalkoinen yleistys. Eihän sudon käytölle yleensä ole estettä esim. interaktiivisissa skripteissä. Sudon etuinahan on (su:hun verrattuna) on mm. parempi lokitus ja mahdollisuus antaa käyttäjille sudo oikeus vain tiettyihin komentoihin (jopa ilman salasanaa) jos tällaiseen jostain syystä on tarvetta (vaikkei itse heti keksisikään miksi, ei se tarkoita etteikö tällaista tilannetta voisi olla).

Sinänsähän on toki useimmiten järkevämpää ajaa koko skriptiä pääkäyttäjänä, jos skripti tarvitsee johonkin niitä oikeuksia (ja mahdollisesti pudottaa oikeuksia tavalliseksi käyttäjäksi skriptin sisältä), kuten tässä ketjussa on mainittukin.