Spouštění aplikace z PHP

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Spouštění aplikace z PHP
« kdy: 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
« Poslední změna: 21. 10. 2013, 21:25:38 od Petr Krčmář »
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript


Jimm

Re:Spousteni aplikace z PHP
« Odpověď #1 kdy: 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...

Jimm

Re:Spousteni aplikace z PHP
« Odpověď #2 kdy: 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);

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Spousteni aplikace z PHP
« Odpověď #3 kdy: 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 :/
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

j

Re:Spousteni aplikace z PHP
« Odpověď #4 kdy: 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.


robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Spousteni aplikace z PHP
« Odpověď #5 kdy: 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
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Jimm

Re:Spousteni aplikace z PHP
« Odpověď #6 kdy: 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.

Pilgrim

Re:Spouštění aplikace z PHP
« Odpověď #7 kdy: 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.

Re:Spouštění aplikace z PHP
« Odpověď #8 kdy: 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  ;)
„Řemeslo se naučí každý. Umění nikdo.“
„Jednoduchost je nejvyšší úroveň sofistikovanosti.“
- Leonardo Da Vinci

samalama

Re:Spouštění aplikace z PHP
« Odpověď #9 kdy: 24. 10. 2013, 19:33:35 »
strelim... nie je to tym, ze apache user nie je v skupine audio?

samalama

Re:Spouštění aplikace z PHP
« Odpověď #10 kdy: 24. 10. 2013, 19:35:03 »
strelim... nie je to tym, ze apache user nie je v skupine audio?

najprv citaj, potom pis :)

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Spouštění aplikace z PHP
« Odpověď #11 kdy: 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 :/
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Pilgrim

Re:Spouštění aplikace z PHP
« Odpověď #12 kdy: 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');

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Spouštění aplikace z PHP
« Odpověď #13 kdy: 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
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Pilgrim

Re:Spouštění aplikace z PHP
« Odpověď #14 kdy: 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 ;-)