[debian] echo naar speaker vanaf PHP

Pagina: 1
Acties:

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 04-02 09:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Goedemorgen iedereen :)

Ik heb altijd een Windows server gehad waar ik een los .exe bestand op had staan welke de speaker 1 piepje kon laten geven als iemand bijvoorbeeld een plaatje had geupload. Dit deed ik gewoon met het exec(beep.exe) commando.

Nu heb ik Debian op deze machine draaien en wil ik hetzelfde doen, maar krijg ik het niet voor elkaar. Ik wil namelijk het 7 character echoen naar mijn speaker. Als ik dit commando uitvoer vanuit de commandline werkt t prima. Ook via SSH werkt t goed. Als ik t aanroep via PHP gebeurt er echter helemaal niets.

Ik wil ook berichten naar mijn LCD scherm kunnen laten sturen dmv commando
echo -en "Wat een leuk bericht" > /dev/lcd
maar dit werkt ook alleen vanaf de console en SSH. Als ik
echo "Wat een stom bericht"
Doe, krijg ik wel meteen de output in PHP te zien, dus echo wordt wel degelijk aangeroepen, alleen niet naar het apparaat waar ik em naar stuur.

PHP staan niet op safe mode, dus ik neem aan dat ik gewoon exec, system en shell_exec commando's mag draaien. Echter doen geen van de vorige 3 genoemde commando's iets :'( Weten jullie misschien hoe ik dit wel werkend krijg?

Thnx alvast!

  • Inspector
  • Registratie: Juli 2005
  • Laatst online: 05-01 10:31
Ik neem aan dat de callback van je sound via een bash of ander sciptje aangeroepen word.
Dit verklaard dat vanaf de comandline (root) alles prima werkt.

Je php server (apache i presume) draait niet als root... Zodat als je een exec of system van het aan te roepen script doet, hij deze uitvoert onder de user van de webserver.
Op debian is dit geloof ik www-data, op redhat systemen heet deze geloof ik apache.
Je zult dus Sudo of sticky bits moeten gebruiken voor je soundscript.

[ Voor 8% gewijzigd door Inspector op 06-07-2005 09:56 ]


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 05-02 15:20

chem

Reist de wereld rond

Ik zou eens kijken naar procopen() en bondgenoten, want een echo in PHP geeft alleen output naar de stdout. Als je terminal-like de boel wil pipe'en dan zul je een shell-command vanuit PHP moeten aanroepen; of zelf de gegevens verwerken en doorsturen.

Klaar voor een nieuwe uitdaging.


  • Inspector
  • Registratie: Juli 2005
  • Laatst online: 05-01 10:31
chem schreef op woensdag 06 juli 2005 @ 10:04:
Ik zou eens kijken naar procopen() en bondgenoten, want een echo in PHP geeft alleen output naar de stdout. Als je terminal-like de boel wil pipe'en dan zul je een shell-command vanuit PHP moeten aanroepen; of zelf de gegevens verwerken en doorsturen.
Dit deed ik gewoon met het exec(beep.exe)

ik neem aan dat hij vanuit php een exec of system gebruikt.
de echo is alleen voor output richting lcd

toch ??? :P

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Permissions op /dev/dsp en /dev/lcd? :)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • RTBravo
  • Registratie: April 2000
  • Laatst online: 04-02 09:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Thnx voor de reacties. Ik ben nog maar een linux n00b, maar probeer jullie antwoorden te begrijpen ;) Als ik het goed begrijp heeft de user waaronder PHP de echo aanroept geen rechten om naar /dev/lcd te schrijven? Ook niet om naar tty te schrijven voor een beepje? Echo mag alleen naar de output van PHP schrijven dus? Ik roep het idd aan met exec('echo "hoi" > /dev/lcd'). Dus als ik de rechten van de www-user van debian goed zet zal het wel moeten lukken? Zit helaas nu op mn werk, dus kan nog niet testen, maar zal vanavond meteen kijken :) thnx!

PHP server is idd Apache trouwens ;)

Hmm, ik heb ff gezocht hier en vond dit:
www-data ALL = (hlds1) NOPASSWD: /local/servers/hlds1/
www-data ALL = (srcds1) NOPASSWD: /local/servers/srcds1/

als voorbeeld om hlds1 en srcds1 rechten aan www-data te geven. Echter, moet ik rechten gaan geven om echo * > /dev/lcd te kunnen doen. Hoe stel ik dit in dan?

[ Voor 31% gewijzigd door RTBravo op 06-07-2005 17:07 ]


  • RTBravo
  • Registratie: April 2000
  • Laatst online: 04-02 09:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Hmm, ik heb sudo geprobeert, maar helpt nix.
Ik heb in sudoers dit staan :

code:
1
2
3
# User privilege specification
root    ALL=(ALL) ALL
www-data        ALL=(ALL) ALL


In PHP doe ik dit:
PHP:
4
5
6
7
8
$command='/usr/bin/sudo echo "aap3" > /dev/lcd';
echo $command;
shell_exec($command);
exec($command);
system($command);


Alle commando's leveren nix op, zelfs een proc_open() met pipes (was teveel code om er nog onder te kwakken ;)) geeft nix :(

Iemand nog een idee wat ik mis? Of tips die ik kan proberen?

[ Voor 10% gewijzigd door RTBravo op 06-07-2005 19:02 ]


  • TimDJ
  • Registratie: Februari 2002
  • Nu online
chmod 777 /dev/lcd
en chmod 777 /dev/dsp
try that one?

Freelance Drupal Developer


Verwijderd

RTBravo schreef op woensdag 06 juli 2005 @ 19:00:
code:
1
2
3
# User privilege specification
root    ALL=(ALL) ALL
www-data        ALL=(ALL) ALL
Dit is wel een wonder van wanbeveiliging :P

De makkelijkste manier lijkt mij om het zootje in een shellscript te gooien, chown root:www-data && chmod 4710 doen (iig NIET world-writable), en dat ding aanroepen vanuit PHP. Kijk eens wat dat voor resultaat geeft?

edit:
blaataaps: oh, ok. Waarom is dat? Voor beveiliging? Dan mag het topic over rm * met een file die -rf heet ook weer gekickt worden imho :P

[ Voor 17% gewijzigd door Verwijderd op 06-07-2005 19:12 ]


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Verwijderd schreef op woensdag 06 juli 2005 @ 19:06:


De makkelijkste manier lijkt mij om het zootje in een shellscript te gooien, chown root:www-data && chmod 4710 doen (iig NIET world-writable), en dat ding aanroepen vanuit PHP. Kijk eens wat dat voor resultaat geeft?
Niks, aangezien elke unix die zichzelf serieus neemt al bijna 20 jaar het suid-bitje op scripts negeert.

Verwijderd

RTBravo schreef op woensdag 06 juli 2005 @ 19:00:
Hmm, ik heb sudo geprobeert, maar helpt nix.
Ik heb in sudoers dit staan :

code:
1
2
3
# User privilege specification
root    ALL=(ALL) ALL
www-data        ALL=(ALL) ALL


In PHP doe ik dit:
PHP:
4
5
6
7
8
$command='/usr/bin/sudo echo "aap3" > /dev/lcd';
echo $command;
shell_exec($command);
exec($command);
system($command);


Alle commando's leveren nix op, zelfs een proc_open() met pipes (was teveel code om er nog onder te kwakken ;)) geeft nix :(

Iemand nog een idee wat ik mis? Of tips die ik kan proberen?
Niet om het één of ander maar vergeet de 'illegal chars' niet te escapen ;)

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Waarom probeer je dat zowiezo met echo te doen als je ook gewoon dat device kan openen als normaal file en er dan data heen feeden?
En verder.. als er toch vanuit het web van alles op gezet mag worden waarom chmod je dat device niet gewoon als world writable? Zoals aapopfiets al zegt, je webserver sudo rechten geven wil je echt niet :P

  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 10-02 16:44

M-ThijZ

Riding on Rails

Anders de apache user aan de groep 'audio' toevoegen?

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 04-02 09:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
FAD schreef op woensdag 06 juli 2005 @ 19:05:
chmod 777 /dev/lcd
en chmod 777 /dev/dsp
try that one?
Dit was de oplossing :D Thnx!!!

Ik heb echter om de speaker werkend te krijgen dit gedaan : chmod 620 /dev/tty0
(en voor lcd ook chmod 620 /dev/lcd)

Owjah, en ik had www-data uiteraard alle rechten gegeven voor test. Als je test geef je namelijk eerst iets alle rechten en dan knijp je het steeds verder ah tot het niet meer werkt. Dan net 1 rechtje meer geven en klaar :P Maar aangezien dit al niet werkte, was het al snel duidelijk dat deze manier niet ging werken. Daarom wilde ik ff weten of ik een syntax fout had oid.

Thanx voor de reacties, hoop dat andere mensen hier ook iets aan hebben :D
Pagina: 1