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!