Belépés
Apache újraindítása php-ból
2010. május 13. – 18.39 – thxer
Tisztelt Fórumozók!
Van egy nagy problémám melyet nem sikerül megoldani.
Ubuntu 10.04 szerver van telepítve, rajta apache2 + suexec + php5 fcgi-vel. Az lenne a feladat hogy php-ból execcel tudjam vezérelni az apache-ot. Ha kiadom azt a parancsot hogy /etc/init.d/apache2 stop az exec visszaadja azt hogy "done" de valójában nem történik semmi. Ha sudo-t eléírom akkor semmit nem ad vissza és nem is történik semmi, próbálgattam szerkesztgetni a /etc/sudoers-t de itt sem sikerült megoldásra jutni. Ezt szúrtam be a sudoersbe:
user<--->ALL=(root) NOPASSWD:/etc/init.d/apache2
De így nem jó.
Kérem aki tudja a megoldást, az ne tartsa magában.
- A hozzászóláshoz regisztráció és belépés szükséges
üdv
az adott "usert" hozzáaadtad a sudoers-ben ?
ha igen, akkor a privilégiumot ALL-ra állítottad? user ALL= ALL
a sudoers mivel/hogyan szerkesztetted? legkönnyebb : visudo (visudo -c)
ha így csináltad, és nem működik, akkor nincs ötletem sajnos
A teljes parancssort be kell jegyezni a sudoersebe (vagy kockázatosabban *-gal jelölni a további argumentumok helyét). És eszedbe se jusson közvetlenül szerkeszteni a /etc/sudoerst, mert kizárhatod magad (erre van a visudo).
Nem ismerem az fcgi-t, de én egy fájlt tennék le inkább php-ból, és azt figyelném valami daemonnal. Nem tűnik egészségesnek magad alatt újraindítani a szervert.
+1
Ugyan ez járt a fejemben. Cron-nal figyelni a fájl tartalmát, 1 perces ablakban.
||"Ha előre tudtad volna, hogy a gyertya lángja tűz, akkor már régen kész lenne az étel..." || My Homepage = Hasznos tippek & Trükkök
Ha a sudoers editelem utánna újra kell indítani valamit, vagy a beállítás egyből érvénybe lép?
Egyből érvénybe lép...
Egyébként mivel apache futtatja a fájlt, szerintem a www-data felhasználónak kéne sudora jogot adni.
Everybody poe-poe!
De mivel fcgi és suexec van az apacheon ezért egy megadott user nevében hívom meg a php-t, a php-scriptben az exec azt adja vissza hogy "...done", de semmi nem történik, a phpben ez van:
<?php
$output = exec('/etc/init.d/apache2 stop');
echo $output;
?>
Igen, az fcgi miatt bajban voltam, elvileg annak mennie kéne. Próbáld ki
exec('whoami')paranccsal. Esetleg érdekes lenne még egy $_ENV['user'] kiiratása is.Egyébként ha nincs joga a felhasználónak akkor is tudja futtatni a /etc/init.d/apache2 fájlt (nem tudom miért), és hiba nélkül végre is hajtódik, csak éppen a daemonnal nem történik semmi. Szerintem valami hasonlóról lesz szó.
Ha máshogy nem megy próbálj meg a usernek mindenre jogot adni (próbának csak, utána le lehet szedni).
Everybody poe-poe!
Azt a felhasználót írja ki akinek a nevével futtatom a php-t. Jelent esetben teszt.
Lehet hogy a sudoers-nél rontottam el valamit, jelenleg közvetlenül a root után ez szerepel:
teszt ALL=(ALL) NOPASSWD:ALL
A $_ENV['user'] -re hibát ír: Use of undefined constant user - assumed 'user'
Szerintem:
teszt ALL=(root) ALL NOPASSWD:ALLEverybody poe-poe!
system('/etc/init.d/apache2 stop')
ezt nem probaltad meg?
igen, en is ugyanolyan fogyatekos vagyok, mint te!
Üdv!
Sudoers fájlban:
Cmnd_Alias APACHE = /etc/init.d/apache2
userneve ALL=NOPASSWD:APACHE
Egyébként szerintem ne akard magad alatt leállítani webszervert. Milyen alapon vársz választ vissza? Gondolj bele, leállítod azt a webszervert, amely a programod futtását biztosítja ... 22-es csapda
Üdv, Medvesajt