Kirjoittaja Aihe: sudo: a terminal is rquired to read the password  (Luettu 6909 kertaa)

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Käytän ohjelmistoa, jonka käyttöliittymä on HTML-sivu selaimessa. Käynnistän sen kautta toiminnon, jolle olen asettanut pre-op-triggerin, joka tarkistaa voiko toiminnon suorittaa. Tarkistus käyttää komentoa, joka vaatii root-oikeuden. Minulla ei ole mitään keinoa saada pre-op-triggeriä toimimaan sillä tavalla että voisin syöttää tarvittavan salasanan. Olen jo yrittänyt käyttäjän ja komennon lisäämistä sudoers-tiedostoon ja olen kokeillut suid-bitin asetusta pre-op-triggerille, mutta sudo vaan vaatii että pääte pitää olla.

Onko minulla mitään mahdollisuuksia saada tarkistus toimimaan käyttäen tätä sudo-oikeuksia vaatitaa komentoa?

Edit: Ennen kuin yritin suid-bitin asetusta, lisäsin triggeriin lokitulostuksen, jonka avulla varmistin että real id ja effective id ja saved id ovat kaikki samat.

edit 2: Tarkistuskomento itse kysyy salasanaa, sen edessä ei ole sudo-komentoa. En haluaisi sen päälle lisätä jotain erillistä askpass-viritystä.
« Viimeksi muokattu: 21.05.21 - klo:12.43 kirjoittanut AimoE »

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #1 : 21.05.21 - klo:12.56 »
Katsoin tarkemmin sitä suoritettavaa komentoa, ja se onkin komentotiedosto eikä binääri. Se suorittaa sudo-komennon siellä kaiken logiikan seassa. Taitaa käydä niin että joudun tekemään tarkistuksen ilman tätä helpottavaa komentoa. Harmi.

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #2 : 21.05.21 - klo:14.19 »
Katsoin tarkemmin sitä suoritettavaa komentoa, ja se onkin komentotiedosto eikä binääri. Se suorittaa sudo-komennon siellä kaiken logiikan seassa. Taitaa käydä niin että joudun tekemään tarkistuksen ilman tätä helpottavaa komentoa. Harmi.

Jos skriptissä on vain yksi sudolla suoritettava komento, sille on helppo lisätä NOPASSWD-poikkeus /etc/sudoers-tiedostoon tai /etc/sudoers.d:hen.

Millainen root-oikeuksia vaativa tarkistus mahtaa olla kyseessä?

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #3 : 21.05.21 - klo:14.38 »
Millainen root-oikeuksia vaativa tarkistus mahtaa olla kyseessä?

Raportoin ongelman kehittäjille, vaikka selitys tavallaan löytyi toisesta raportista.

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #4 : 21.05.21 - klo:15.07 »
Millainen root-oikeuksia vaativa tarkistus mahtaa olla kyseessä?

Raportoin ongelman kehittäjille, vaikka selitys tavallaan löytyi toisesta raportista.

Käytät siis Tombin list-toimintoa? Koodin perusteella se tarkistaa liitokset findmnt-komennolla, joka ei yleensä vaadi root-oikeuksia, ellei sitä laiteta varmistamaan liitoksia --verify -valitsimella. Epäilen siis, että kyseisen komennon suorittaminen sudolla saattaa olla tarpeetonta.

Jos et halua poistaa sudoa Tombin findmnt-kutsusta, voit joka tapauksessa voit lisätä findmnt:lle NOPASSWD-poikkeuksen, jolloin salasanaa ei kysytä tuolle toiminnolle.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #5 : 21.05.21 - klo:15.16 »
Tombin dokumentaatiossa kehutaan että tomb-komennolle voi asettaa NOPASSWD:n ihan huoletta, mutta ei kerrota näitä kaikkia muita komentoja joille oikeuksia sitten tarvitaan.

En lähde sille tielle, vaan kuten sanoin siinä raportissani, käytän mieluummin mountpoint -komentoa vaikka se onkin hankalampaa. En ole erityisesti yrittänyt piilottaa tomb-tidostojani, ja varmistuksen täytyy joka tapauksessa tietää missä ne ovat, eivätkä liitospisteet ole iso salaisuus.

Tätä sattuu yhtenään että tehdäään ratkaisuja joka innostavat käyttäjiä purkamaan omia suojakuksiaan. Erityisen ärsyttävää se on silloin kun kyse nimenomaan piti olla hyvää suojausta tarjoavasta työkalusta.

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #6 : 21.05.21 - klo:15.49 »
Tombin dokumentaatiossa kehutaan että tomb-komennolle voi asettaa NOPASSWD:n ihan huoletta, mutta ei kerrota näitä kaikkia muita komentoja joille oikeuksia sitten tarvitaan.

Kyllä sen voi niinkin tehdä, eikä silloin tarvitse noita muita komentoja säätää. Itse tomb-komento pitää silloin vain suorittaa sudolla.


Tätä sattuu yhtenään että tehdäään ratkaisuja joka innostavat käyttäjiä purkamaan omia suojakuksiaan. Erityisen ärsyttävää se on silloin kun kyse nimenomaan piti olla hyvää suojausta tarjoavasta työkalusta.

Mikä mielestäsi olisi parempi ratkaisu? Tomb on suunniteltu interaktiiviseksi komentorivisovellukseksi, jolloin sudo salasanakyselyineen on pätevä ratkaisu oikeuksien hallintaan. Jos haluat käyttää tombia taustalla web-sovelluksessa, sekin on mahdollista säätämällä sudo-oikeudet joko tapauskohtaisesti tai sallimalla koko tombin suoritus sudolla. Se tosin aukaisee suojauksia enemmän.

Toki korkeampien käyttöoikeuksien tarve on syytä minimoida, ja tosiaan tässä liitospisteiden listaamisen tapauksessa root-oikeuksien tarpeellisuus on hieman kyseenalaista.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #7 : 21.05.21 - klo:15.56 »
Jos haluat käyttää tombia taustalla web-sovelluksessa, sekin on mahdollista säätämällä sudo-oikeudet joko tapauskohtaisesti tai sallimalla koko tombin suoritus sudolla.

Ja mitenkäs se tehdään, siis koko tombin suorituksen salliminen? Ongelmanahan on juuri se että tomb-scripti on täynä niitä sudo-komentoja, ja sudo pitää suorittaa päätteessä. Millä sinä sen kierrät?

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #8 : 21.05.21 - klo:16.26 »
Ja mitenkäs se tehdään, siis koko tombin suorituksen salliminen? Ongelmanahan on juuri se että tomb-scripti on täynä niitä sudo-komentoja, ja sudo pitää suorittaa päätteessä. Millä sinä sen kierrät?

Lisää sudoers-tiedostoon rivi:

Koodia: [Valitse]
käyttäjätunnus ALL=(root) NOPASSWD: /usr/bin/tomb
Missä käyttäjätunnus on se tunnus, jolla tomb-komento halutaan suorittaa.

Tämän jälkeen käyttäjätunnus voi ajaa tombia sudolla ilman että se kyselee salasanoja missään vaiheessa:

Koodia: [Valitse]
sudo tomb list

kuutio

  • Käyttäjä
  • Viestejä: 162
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #9 : 21.05.21 - klo:16.27 »
Jos haluat käyttää tombia taustalla web-sovelluksessa, sekin on mahdollista säätämällä sudo-oikeudet joko tapauskohtaisesti tai sallimalla koko tombin suoritus sudolla.

Ja mitenkäs se tehdään, siis koko tombin suorituksen salliminen? Ongelmanahan on juuri se että tomb-scripti on täynä niitä sudo-komentoja, ja sudo pitää suorittaa päätteessä. Millä sinä sen kierrät?
Jos se koko skripti pyörii pääkäyttäjän oikeuksin (esim. sudolla ajettuna), ei ne yksittäiset sudo-komennot skriptin sisällä haittaa mitään, menevät läpi mitään kyselemättä.
EDIT: nm oli jälleen kerran nopeampi

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #10 : 21.05.21 - klo:16.46 »
Lisää sudoers-tiedostoon rivi:

Koodia: [Valitse]
käyttäjätunnus ALL=(root) NOPASSWD: /usr/bin/tomb
Missä käyttäjätunnus on se tunnus, jolla tomb-komento halutaan suorittaa.

Tämän jälkeen käyttäjätunnus voi ajaa tombia sudolla ilman että se kyselee salasanoja missään vaiheessa:

Koodia: [Valitse]
sudo tomb list

Oletko kokeillut itse? Juuri näin minä menettelin, mutta se että skriptille annetaan oikeudet ei millään lailla estä sudoa valittamasta siitä että sitä saa käyttää vain päätteessä.

Kuten raportoin siellä githubissa, kyse on "vain" varoituksesta, mutta se varoitus on sellainen josta on pakko päästä eroon. En halua ohjata sitä /dev/nulliin enkä halua tehdä mitää joka avaa porsaanreikiä. Niinpä en käytä tomb-komentoa pre-op-triggerissä.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #11 : 21.05.21 - klo:16.47 »
Jos se koko skripti pyörii pääkäyttäjän oikeuksin (esim. sudolla ajettuna), ei ne yksittäiset sudo-komennot skriptin sisällä haittaa mitään, menevät läpi mitään kyselemättä.
EDIT: nm oli jälleen kerran nopeampi

Kyllä ne minua haittaa kun pitävät niin hirveää meteliä. Kokeile itse.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #12 : 21.05.21 - klo:17.02 »
Okei, edellisten vastausten jälkeen muistin että jossain vaiheessa olin unohtanut jotain kommenttimerkin taakse tms. mutta huomasin sen vasta monen yrityksne jälkeen kun olin jo muuttanut taktiikkaa. Niinpä kokeilin vielä kerran riittääkö se sudoers-asetus, pysyykö sudo hiljaa. Ja kappas, pysyyhän se sittenkin.

Edit: Tilannetta hämmensi se, että pääätteessä käytettynä, "tomb list" ei vaadi mitään lisäoikeuksia.
« Viimeksi muokattu: 21.05.21 - klo:17.22 kirjoittanut AimoE »

kuutio

  • Käyttäjä
  • Viestejä: 162
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #13 : 21.05.21 - klo:18.11 »
Edit: Tilannetta hämmensi se, että pääätteessä käytettynä, "tomb list" ei vaadi mitään lisäoikeuksia.
Tämä kyllä kuulostaa hieman erikoiselta, jos se skripti kuitenkin sudo-komentoja käyttää?

Olisko sulla käynyt vaan niin, että sudo-salasanan "grace timeout" oli vielä käynnissä (eli olit antanut sudo -salasanan äskettäin). Kokeile ajaa ensin "sudo -k" (unohtaa aiemmin annetun salasanan) ja testaa sen jälkeen ajaa "tomb list", kyseleekö nyt sudon salasanaa?

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #14 : 21.05.21 - klo:18.21 »
Olisko sulla käynyt vaan niin, että sudo-salasanan "grace timeout" oli vielä käynnissä (eli olit antanut sudo -salasanan äskettäin). Kokeile ajaa ensin "sudo -k" (unohtaa aiemmin annetun salasanan) ja testaa sen jälkeen ajaa "tomb list", kyseleekö nyt sudon salasanaa?

Ei, eikä ole mitään järkeä että pelkkä tomb list mitään salasnaa vaatisikaan. Kokeilin vielö ihan vaaamalla uuden päätteen, ja ei todellakaan tarvitse salasnaa kun sen ajaa. Merkillistä tosiaan.

Äh, unohdin että mullahan on nyt se sudoers-asetus päällä. Kokeilin uudelleen ja kyllä se vaatii salasanan. Onpa huono päivä kun tulee kompasteltua koko ajan.
« Viimeksi muokattu: 21.05.21 - klo:18.24 kirjoittanut AimoE »

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #15 : 22.05.21 - klo:15.26 »
Peruutus: tänään sudo taas huutaa, vaikka NOPASSWD on asetettu sudoersissa. Eli jostain syystä sudoers-asetus ei vaan ole voimassa kun pitäisi. En ymmärrä.

Ja sitten kun aloin tutkia mikä sudoersia vaivaa, onnistuin sähläämään oikein kunnolla. Olin alkuaan tehnyt lisäyksen näin:

Koodia: [Valitse]
echo "$USER ALL NOPASSWD: /usr/bin/tomb" | sudo tee -a /etc/sudoers.d/tomb
mutta kun se ei näyttänyt auttavan, tein tämän:

Koodia: [Valitse]
cat /etc/sudoers.d/tomb | sudo tee -a /etc/sudoers
Se ei tietenkään auttanut ja yritin korjata tiedoston ennalleen, mutta onnistuin luomaan sudoers-tiedoston, joka ei ole rootin omistama, ja nyt en saa sitä mitenkään korjatuksi!

Onko mitään keinoa korjata sudoersin omistajuus ilman uutta Ubuntu -asennusta? Maan rakoon vajoaminen ainakaan ei taida auttaa.

Ratkaisu löytyikin äkkiä:
Koodia: [Valitse]
pkexec chown root:root /etc/sudoers
No, joka tapauksessa tuo sudoers-asetus siis auttaa vain kun sudon suorittaa päätteessä. Muulloin sudo huutaa että salasanan kysymiseen tarvitaan pääte.
« Viimeksi muokattu: 22.05.21 - klo:15.32 kirjoittanut AimoE »

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #16 : 22.05.21 - klo:16.25 »
Peruutus: tänään sudo taas huutaa, vaikka NOPASSWD on asetettu sudoersissa. Eli jostain syystä sudoers-asetus ei vaan ole voimassa kun pitäisi. En ymmärrä.

Ja sitten kun aloin tutkia mikä sudoersia vaivaa, onnistuin sähläämään oikein kunnolla. Olin alkuaan tehnyt lisäyksen näin:

Koodia: [Valitse]
echo "$USER ALL NOPASSWD: /usr/bin/tomb" | sudo tee -a /etc/sudoers.d/tomb

Tuossa on syntaksivirhe. Pitäisi olla:

Lainaus
käyttäjätunnus ALL=(ALL) NOPASSWD: /usr/bin/tomb

tai suluissa voi olla myös root, koska tombia halutaan suorittaa root-tunnuksella.


Koodia: [Valitse]
cat /etc/sudoers.d/tomb | sudo tee -a /etc/sudoers

Sudo menee helposti kokonaan rikki, jos editoit tiedostoja tuolla tavalla. Käytä aina visudoa, joka huolehtii asetustiedostojen oikeuksista ja tekee lopuksi syntaksitarkistuksen!

Koodia: [Valitse]
EDITOR=nano sudo visudo -f /etc/sudoers.d/tomb
Jos esimerkiksi yritän kirjoittaa tiedostoon tämän virheellisen rivin:

Lainaus
käyttäjätunnus ALL NOPASSWD: /usr/bin/tomb

visudo herjaa ongelmasta ja kysyy mitä tehdään:

Lainaus
>>> /etc/sudoers.d/tomb: syntax error near line 1 <<<
Mitä nyt?
Valitsimia ovat:
  (e) muokkaa sudoers-tiedostoa uudelleen
  (x) poistu tallentamatta sudoers-tiedoston muutoksia
  (Q) poistu ja tallenna muutokset sudoers-tiedostoon (VAARA!)

Käytännössä tuohon ei sitten koskaan kannata vastata Q, koska silloin sudo hajoaa, etkä enää saa pääkäyttäjän oikeuksia sen kautta, jolloin virheen korjaaminen voi olla hyvinkin hankalaa. Käytännössä pkexec on ainoa toivo siinä tilanteessa.


No, joka tapauksessa tuo sudoers-asetus siis auttaa vain kun sudon suorittaa päätteessä. Muulloin sudo huutaa että salasanan kysymiseen tarvitaan pääte.

Onko /etc/sudoers-tiedoston syntaksi nyt varmasti kunnossa? Tarkista visudolla. Millainen nopasswd-asetusrivi siellä on nyt? Onko /etc/sudoers.d-hakemistoon jäänyt mitään säätöjä?

Suorittaako web-sovelluksesi "sudo tomb list" -komennon omalla käyttäjätunnuksellasi, eikä esimerkiksi www-data -tunnuksella?
« Viimeksi muokattu: 22.05.21 - klo:16.28 kirjoittanut nm »

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #17 : 22.05.21 - klo:17.03 »
Tuossa on syntaksivirhe. Pitäisi olla:

Lainaus
käyttäjätunnus ALL=(ALL) NOPASSWD: /usr/bin/tomb

tai suluissa voi olla myös root, koska tombia halutaan suorittaa root-tunnuksella.

No niinpä olikin. Mitähän olen mahtanut sählätä vielä sen jälkeen kun se kerran oli jo oikein. AI niin, kokeilin ilman sudoersia, ja sitten palautin sen väärin. Äh.

Suorittaako web-sovelluksesi "sudo tomb list" -komennon omalla käyttäjätunnuksellasi, eikä esimerkiksi www-data -tunnuksella?

Olen tarksitanut useampaan kertaan että se suoittaa skriptin mun omanlla tunnuksella, ja effective id on myös sama.

Nyt kun olen korjannut sudoers-virheen, tombin sisällä oleva sudo pyytää edelleen salasanaa. Mikä onkin loogista, kun tomb ei ole binääri vaan skripti. Eihän sudo-oikeus scriptiin voi periytyä komennoille joita se suorittaa, sen enempää kuin s-bittikään.

Löysin jostain ohjeen että pitää poistaa tty-viittaus  sudoers-tiedostosta, mutta ei siellä sellaista ole, eikä ilmoituksaan puhu ttystä vaan terminaalista.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #18 : 22.05.21 - klo:17.14 »
Pre-op-triggeri suorittaa komennon

Koodia: [Valitse]
! tomb -q list
eli kaikki on ok jos tomb list ei löydä yhtään auki olevaa "hautaa".

Periaattessa sen voisi yrittää suorittaa päätteessä, jos saisi päätteen palauttamaan exit-koodin, mutta en ole löytänyt päätettä joka sen tekee. Ja hassuahan se olisi jos pääte avautuu ja sulkeutuu vain muodon vuoksi.

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: sudo: a terminal is rquired to read the password
« Vastaus #19 : 22.05.21 - klo:17.19 »
Pre-op-triggeri suorittaa komennon

Koodia: [Valitse]
! tomb -q list

OK. Nythän tuo pitää suorittaa sudolla, koska olet asettanut sudoersiin /usr/bin/tomb -tiedostoa koskevan NOPASSWD-säännön.

Koodia: [Valitse]
! sudo tomb -q list
Entä mikä käyttäjätunnus suorittaa tuon pre-op-trigger-komennon? Tarkista vaikka korvaamalla komento skriptillä, joka kirjoitta $USER -ympäristömuuttujan tiedostoon.