Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 3ugeene 21. 10. 2013, 18:15:03
-
Zdravim, rad bych se zeptal nejakeho PHP programatora, kde muze byt chyba kdyz pomoci se pomoci exec() nebo shell_exec() snazim spustit na serveru (ubuntu) skript s prikazem
exec('/usr/bin/espeak Testing');
a on se nevykona? Pokud prikaz ulozim do souboru a z konzole zavolam "php skript.php", tak jede vse ok a zvuk slysim, ale na Apache mi to proste nefunguje... Na nem mi vsak funguje treba "echo exec('whoami');", ktere spravne vypise uzivatele www-data, takze mnou pozadovany prikaz nahore ma patrne spolecne neco se zvukovym vystupem. Pro jistotu jsem pridal uzivatele www-data (apache) do skupiny audio, ale beze zmeny...
Diky za jakoukoliv radu
-
Ahoj, apache te nepustí do některých adresářů, proto ti šlape whoami. Pokud můžeš, dej mu to do adresáře který vlastni apache...
-
Takže prostě práva ke scriptu nastavit pro apache a zkusil bych i: ini_set('display_errors', true);
error_reporting(E_ALL);
-
Diky, nicmene chyby to zadny nepise a kdyz prekopcim espeak do /var/www/, ktere apache vlastni a ve skriptu zadam plnou cestu, tak to taky nebezi :/
-
Poustet cokoli takhle je primo koledovani si o pruser ... uvedom si, ze staci nepatrna dirka a k php se dostane kdokoli, jakmile mu das pristup k systemu ... Kdyz uz, tak se to dela opacne, trebas cronem neco spoustis, a data(=vysledek) ukladas nekam, kde si to uz php precte. Pripadne bambilion jinych bezpecnejsich variant.
Jinak je to vyhradne o pravech - apache/php ti bezi pod nejakym uctem a ten to jednoduse nemuze spustit.
-
Tohle vsechno vim, proto se ptam, jaka je optimalni cesta, cron pouzit nemuzu, potrebuji spoustet prikaz pri nejake akci - treba odeslani formu... Driv jsem to resil, ale ne s aplikacema se zvukovym vystupem, proto me to trosku rozhodilo
-
Je to na sto procent nastavením práv a cestou k tomu spustitelnému scriptu, řekl bych že to bude v php error logu, ale nejsem si úplně jist.
-
Zdarec,
problémů tam může být hned několik:
1. Práva
2. PHP přes Apache má jinou konfiguraci než přes CLI
3. Zkontroluj také v PHP disable_functions, zda nejsou systémové funkce vypnuté
4. Zkontroluj open_basedir, zda tam vůbec přes PHP můžeš do té složky
5. Pokud spoustíš nějakou binárku z /usr/bin, /var/lib, atp., je možný že to bude chtít, aby jsi měl nastavenou proměnnou HOME
...
...
Jak bych to řešil já:
1. Logy - /var/log/syslog, /var/log/messages, /var/log/audit.log, /var/log/apache2/error_log (a další dle virtual hostu např.)
2. Přihlaš se jako www-data uživatel (pokud má povolený login a svůj home dir) a zkus pustit ten skript za něj a ono ti to už něco napíše.
-
Může tam být i whitelistovaný adresář (tak jsem to taky měl nastavené) lze spustit jen to co je pod ním.
Pokud tam lze spustit cokoliv odkudkoliv, neměl bych důvěru ;)
-
strelim... nie je to tym, ze apache user nie je v skupine audio?
-
strelim... nie je to tym, ze apache user nie je v skupine audio?
najprv citaj, potom pis :)
-
Zdravim a diky za rady, je to opravdu pravama, pokud nastavim v apache2.conf uzivatele a group z www-data na muj ucet, tak to po restartu apache bezi. Nicmene nevim, kam mam pridat uzivatele www-data, aby to fungovalo i pod nim :/
-
Takhle, apache pouští root, který má super práva. Stejně tak jen root nebo autorizovaný uživatel s dostatečnými právy může spustit binárky.
Myslel bych si, že bude potřeba přidat pravidlo do /etc/sudoers, nebo to zkus pustit přes sudo:
exec('/usr/bin/sudo /usr/bin/espeak Testing');
-
Pres sudo to zrejme pujde, nicmene se mi to pres nej fakt delat nechce kvuli bezpecnosti - tu sice ted neresim ,ale do budoucna mi to neprijde moc koser :X
-
Pokud to chceš košér, tak to pusť třeba přes fastcgid kvůli lepší kontrole spouštěného PHP díky interpreteru a pak ještě suexec kvůli spuštění PHP jako uživatel:skupina linuxu ;-)
-
Já bych se zeptal jinak - a jak víš, že to neběží? Kde chceš ten zvuk slyšet - na serveru nebo u klienta, který ten vyplněný form odeslal?
-
na serveru, pochopitelně
-
a tu aplikaci kterou spoustis jsi napsal ty nebo mas aspon pristup ke zdrojakum? ze bys tam udelal nejaky logovani "byl jsem spusten uzivatelem X v DATETIME"
-
a tu aplikaci kterou spoustis jsi napsal ty nebo mas aspon pristup ke zdrojakum? ze bys tam udelal nejaky logovani "byl jsem spusten uzivatelem X v DATETIME"
Přečti si to, už jsme tu řešili logy a nějaký postup ;-)
-
pravda, na logy jsem zapoměl, jak mi je tu někdo radil. Doma se na ně mrknu!