legyőzhetetlen bash-script

Fórumok

Sziasztok!
Adott egy debian, KDE 3.5 felülettel.
Szükséges, hogy a bejelentkező felhasználónál fusson egy script, méghozzá interaktivan, tehát tudjon bele irni.
A scriptnek root jogokkal kell futnia, mert végrehajt egy-két parancsot, amit csak a root tud.
A ~/.kde/Autostart mappában van egy parancsikon, ami inditja ezt a scriptet, kde-username-nak megadtam a root-ot, és igy rootként is futtatja, de minden alkalommal amikor indul, kéri a rootjelszót.
Ez idáig rendben is van, de van pár dolog, amin szeretnék finomitani:
- meg lehet oldani valahogy, hogy rootkent futtassa, ám lehetőleg a jelszó-kérése nélkül?
- meg lehet oldani valahogy, hogy elpusztithatatlan legyen a script? értem ez alatt, hogy vagy ne lehessen bezárni, max root felhasználóként, vagy pedig ha bezárják, azonnal inditsa újra magát, vagy valami parancsot hajtson végre bezárás előtt?

jelenleg úgy van megoldva a 'bezárhatatlanság', hogy kde beállításaiban a konsole speciális ablakbeállításainál el van tüntetve a keret, és a global hotkeys is le van tiltva.
de hát ez igazából csak azok ellen véd, akiknek fogalmuk sincs a linuxhoz...
van valakinek ötlete?

Hozzászólások

- meg lehet oldani valahogy, hogy rootkent futtassa, ám lehetőleg a jelszó-kérése nélkül?
man sudo

A sudo-val lehet csak 1 programra adni futtatási jogot úgy, hogy semmilyen jelszót ne kérjen. Arra vigyázz, hogy azt a programot kézzel is elindíthatja a user és akkor adhat neki más paramétereket (ha ez gond, akkor egy scriptre adj jogot, ami a jó paraméterekkel indítja el).

A bezárhatatlanságra ez nem jó?

while true; do
sudo program
done

tehát az autostart egy másik scriptet inditson, ami sudoval inditja azt ami nekem kell?
jól hangzik, főleg lekorlátozott sudo-val.
igazából az nem gond ha az user is el tudja inditani, mert végülis arról lenne szó, hogy adott egy kocsma, ahol van ez az asztali gép, és ezen legyen internet, ha a pultos beüti a jelszót a megfelelő zseton fejében. a programnak nincsenek paraméterei.
de a pultoslányoknak kár lenne root jelszót adni, mert egyrészt alapszabály, hogy pultoslányok nem lehetnek root-ok, másrészt úgyis elmondanák mindenkinek, mert azt sem tudják micsoda...:)
szóval ha betölt a kde, induljon ez a script, ami a megfelelő jelszó beütésével beállítja iptablest arra, hogy legyen net. és adott idő lejártával vissza is zárja.
ez most működik is, a cél az, hogy ha valaki esetleg bezárja a scriptet futtató ablakot, akkor semmiképp ne maradjon nyitva a kapcsolat.
tehát ha bezárja, az sem konkrét baj, csak a lényeg, hogy visszazárja a netet.
csak arról sehol nem találtam infót, hogy scriptből el lehetne kapni az ablakzárás eseményt, ezért gondolkodom inkább abban, hogy egyáltalán ne lehessen bezárni.

----------------
mepis8-x86_64

Az autostart script sudo-val indítana egy másik scriptet, ami meghívja a programot a megfelelő paraméterekkel. Én így gondoltam. Így a usernek nincs joga a programot meghívni más paraméterekkel.

A bezárásáról úgy tudsz meg valamit, ha scriptből indítod. Ott le fog futni a következő sor. Pl.


while true; do
sudo parancs
lecsukjuk_a_netet
done

De én nem értek az ilyenekhez, csak ötletelek.

Pont ötletekre van szükségem.
A SUDO-s részt már meg is csináltam, tökéletes megoldás, jogok miatt olvasni továbbra sem tudja, viszont jelszó nélkül végrehajthatja, igy a pincérlányok mint kockázati tényezők, kikerültek a képből :)

és az ötleteiteknek hála, most találtam egy megoldást, ami legalább kellően elrejti a problémát
az autostart-beli ikon nem konzolt indit, hanem egy bash-t, ami meghivja az 1. scriptet, ami a while ciklusban nyitja a másikat. igy a másik bezárhatatlan marad, amig az első basht ki nem lövik, de ennek a bashnak nincs jele a kde-ben sehol, csak a ps -e bogarászása után lehet kilőni.
remek ötlet volt, köszönöm!

----------------
mepis8-x86_64

Valami ilyesmit lehetne:
Autostartba:

nohup sudo script1

script1:

while true; do script2; done

Így a scriptet futtató bash-t nem tudja kilőni a felhasználó.

Amúgy én inkább úgy csinálnám, hogy amikor engedélyezik a netet, akkor a sudo-val futtatott, jelszót is kérő engedélyező script beírja az időt egy (csak rootként írható) fájlba, és egy initscriptből indított script, ha a fájlban lévő időpont óta már adott idő eltelt, kikapcsolja a netet.

Az a probléma persze mindig felmerül, hogy mi van, ha valaki a scriptet lecseréli egy olyan scriptre, ami elmenti a jelszót.

Köszi az ötletet, végül hasonlóképp csináltam én is.
Van egy .net könyvtár a homeban, ott van a file, ami azt tárolja, mennyi idő van még hátra, esetleges fagyás vagy újraindulás miatt ne kelljen újra jelszavazni.
ez a file userként nem írható, csak a sudo-val futtatott script irja/törli, és ugyanez a script olvassa be belőle a perceket, már ha egyáltalán létezik a file.
igy tehát, ha be is zárják azt a konsole ablakot, amelyikben az idot szamlalo script fut, nem nyernek/veszitenek vele semmt, mert a masik script azonnal ujra elinditja, es ugyanannyirol indul a szamlalo, amennyin volt.
az elso script parancsikonon keresztul userkent is elindithato, de ez nem szamit, mert az iptables mar bootolas kozben lezar minden forgalmat, tehat ha netezni akar, muszaj elinditania legalabb egyszer.
viszont ha mar elinditottak neki, es a jelszot is megkapta, akkor ha az elso scriptet lelovi, es utana azt, amit az elso mindig ujraindit, akkor marad neki a net.
még valahogy ezt kellene megoldani, hogy ne tudja kilőni az első scriptet....

----------------
mepis8-x86_64

a nohup+duplascript lett a kulcsa végül az egésznek, köszönöm!
próbálgattam kicsinálni a dolgot, de csak az lett a vége, hogy a nohuppal inditott scriptet csak a rendszergazda kill-je tudja megölni, igy pedig a probléma meg is oldódott
még1szer kösz mindenkinek a segitséget

----------------
mepis8-x86_64