Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: 3ugeene 21. 10. 2013, 18:15:03

Název: Spouštění aplikace z PHP
Přispěvatel: 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

Kód: [Vybrat]
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
Název: Re:Spousteni aplikace z PHP
Přispěvatel: Jimm 21. 10. 2013, 18:29:29
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...
Název: Re:Spousteni aplikace z PHP
Přispěvatel: Jimm 21. 10. 2013, 18:37:02
Takže prostě práva ke scriptu nastavit pro apache a zkusil bych i: ini_set('display_errors', true);
error_reporting(E_ALL);
Název: Re:Spousteni aplikace z PHP
Přispěvatel: 3ugeene 21. 10. 2013, 18:50:33
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 :/
Název: Re:Spousteni aplikace z PHP
Přispěvatel: j 21. 10. 2013, 18:55:43
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.
Název: Re:Spousteni aplikace z PHP
Přispěvatel: 3ugeene 21. 10. 2013, 19:05:59
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
Název: Re:Spousteni aplikace z PHP
Přispěvatel: Jimm 21. 10. 2013, 19:19:57
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.
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Pilgrim 24. 10. 2013, 16:46:44
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.
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Jan Forman 24. 10. 2013, 17:12:27
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  ;)
Název: Re:Spouštění aplikace z PHP
Přispěvatel: samalama 24. 10. 2013, 19:33:35
strelim... nie je to tym, ze apache user nie je v skupine audio?
Název: Re:Spouštění aplikace z PHP
Přispěvatel: samalama 24. 10. 2013, 19:35:03
strelim... nie je to tym, ze apache user nie je v skupine audio?

najprv citaj, potom pis :)
Název: Re:Spouštění aplikace z PHP
Přispěvatel: 3ugeene 24. 10. 2013, 20:37:37
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 :/
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Pilgrim 24. 10. 2013, 21:28:54
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:

Kód: [Vybrat]
exec('/usr/bin/sudo /usr/bin/espeak Testing');
Název: Re:Spouštění aplikace z PHP
Přispěvatel: 3ugeene 24. 10. 2013, 22:09:32
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
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Pilgrim 24. 10. 2013, 22:31:38
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 ;-)
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Mirek 25. 10. 2013, 09:00:09
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?
Název: Re:Spouštění aplikace z PHP
Přispěvatel: 3ugeene 25. 10. 2013, 09:53:17
na serveru, pochopitelně
Název: Re:Spouštění aplikace z PHP
Přispěvatel: to_je_jedno 25. 10. 2013, 10:06:57
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"
Název: Re:Spouštění aplikace z PHP
Přispěvatel: Pilgrim 25. 10. 2013, 10:17:07
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 ;-)
Název: Re:Spouštění aplikace z PHP
Přispěvatel: 3ugeene 25. 10. 2013, 10:45:08
pravda, na logy jsem zapoměl, jak mi je tu někdo radil. Doma se na ně mrknu!