init process futtatása nem rootként

Fórumok

Sziasztok!

Szeretnék csinálni egy olyan php oldalt, ami végretudná hajtani, egy az /etc/init.d -ben lévő process újraindítását, vagy leállítását meghívásakor. Ha végrehajtja a parancsot, mindig azt kapom vissza, hogy Csak a root felhasználó indíthat el init szolgáltatásokat. Hogy lehetne megoldani, hogy az init service elinduljon/újrainduljon , mégha weben is hívom meg ezt az oldalt?

ezt a parancsot használom:

$parancs3 = system('/etc/init.d/xxx restart', $vissza_ertek3);

Előre is köszönöm a hozzászólásokat!:)

Hozzászólások

bedobod oket egy listaba, a cron meg szepen kiszedi belole percenkent es lefuttatja...

jahh. vagy ha csak 1 démonról van szó. létrehoz egy akármilyen fájlt a php oldal, amiben mondjuk az van hogy igen. a cronos shell szkript percenként lefut rootként semmi mást nem csinál, mint beolvassa azt az egy darab szöveg vagy akrámilyen filet és ha a tartalma "igen", akkor újraindítja a daemont majd visszállítja a szövegfile tartalmát "nem"re, egyébként sleep 1 -et csinál. :)

persze ez nagyon gányolás. de megoldja a jogosultsági gondokat, és újraindítja a daemont is.

--------

Nem a zsömle kicsi, a pofátok nagy...

Hello Oscon! Igen, csak egy démonról volna szó, szóval elegendő lenne ez a megoldás is.
Viszont még nem használtam a cront eddig, nem igazán tudom hogy kellene "beledobni" as szkriptet, meg azt sem tudom, hogy meglehet-e hívni egy percnél kisebb intervallumonként, pl 5 másodpercenként a szkriptet.

Valaki nem tud véletlen cronhoz egy jó HOWTO-t, amiben ezek levannak írva?

Köszönöm mindenkinek a válaszokat, boldog Mikulást! :D

Raksz a cronba egy sort, ami lefuttat 1 scriptet, a script megnezi letezik-e a file, es lefuttatja a benne levo parancsot, vagy barmi ilyesmi.
Amennyire tudom cronban a legkisebb idotartam az 1 perc.
Arra azert vigyazz, mind script, mind jogosultsag teren, hogy ehhez senki ne ferjen hozza...
Cronba ilyet rakni szerintem eletveszely :o)

-megszerkeszt /etc/sudoers és NOPASSWD beállít a felhasználónak erre a parancsra.
-utána átír system parancs, hogyaszonygya system("sudo blablabla",$blabla_ret)

ez veszelyes lehet, mert a webes cuccok (apache, igy a php is) "www-data" user alatt futnak (akarki eseteben, tehat a szemelyes honlapok, szerver/~pistike is), igy annak kene jogot adni. az meg pont emiatt nem jo, mert ha egyik juzer el tudja inditani akkor a masik is...

Jo kerdes... Maga a pam konyvtar csak az autentikaciot vegzi. Pl. a shadow modul eseten, amennyiben a futo' processznek van joga turkalni az /etc/shadow-ban (gyk. tudja olvasni), akkor tudsz azonositani egy felhasznalot (csekkolni hogy a jelszava jo-e). De ettol me'g nem fogsz "azza' va'lni", es mivel nem vagy root, setuid()-ozni se tudsz. Azaz gyk a PAM arra jo, hogyha root vagy (pl. egy sshd vagy egy getty), akkor tudod autentikalni a juzereket _es_ tudsz uj processzeket inditani az adotot juzer neve'ben. Ebbol sajnos egyik sem igaz egy www-data-kent futo' apache-ra.

A.

Erre azert intelligensebb megoldasok is vannak. :-)
En a DBUS-t hasznalnam. /*Kell, hogy legyen PHP bindings is hozza.*/

A PHP oldalrol csak beledobsz neki egy parancsot a dbus queue-ba. Csinalsz egy egyszeru rc daemont is ami root jogokkal fut es figyeli a dbus-t. Ha megkapja az ujrainditasi uzenetedet, akkor ujrainditja az akalmazast. Meg parametert is adhatsz neki, hogy melyiket inditsa. :-)

Minél korszakalkotóbb ötlettel állsz elő, annál több hülyén kell átverekedned magadat.

Van olyasmi is, hogy phpsu. Azzal elvileg megoldható biztonságosan.