Toon posts:

programma executen via php

Pagina: 1
Acties:
  • 199 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb thuis een linux servertje draaien, redhad 8 met apache & php en de hele zooi erop.

Nu heb ik dus een php script gemaakt met het php command system(""); dat een executable runned in de webroot. Dit werkt op zich prima, alleen als ik een programma opstart dat i/o wil plegen met de parallelle poort lukt het niet meer.

Mijn bedoeling is namelijk om via een web interface in php relais te schakelen die aan de parallelle poort hagen. Een C applicatie die ik geschreven heb kan de relais al schakelen, echter nu ben ik erachter gekomen dat apache draait als user "apache" en dat enkel de root user genoeg rechten heeft om de i/o aan te spreken, dus als ik mijn relais wil schakelen via de php webpagina gaat het niet, enig ander programma zonder i/o werkt perfect.

Ik wil niet mijn apache user 'upgraden' omdat ik bang ben dat dit ten koste gaat van de veiligheid van mijn systeem. Ik zat er eerder aan te denken om op de enervandere manier met een omweg het programma uit te laten voeren, via een shellscript ofzo.

Heeft iemand ideeen hoe ik dit voor elkaar kan krijgen? of hoe ik een dergelijk script in elkaar zet?

Groeten Marcel348

  • Flapp
  • Registratie: December 2004
  • Laatst online: 02-01 20:16
Je zou in principe een socket kunnen schrijven in php, en die dan aan je applicatie binden . zo kan je zelfs console acces krijgen voor je app
PHP.net

[ Voor 22% gewijzigd door Flapp op 31-03-2006 21:34 ]

"Stilte, een gat in het geluid...."


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

en als je niet met een socket wilt werken kan je altijd nog de suid bit zetten met chmod waardoor je programma gestart wordt als root (als die file van de user root is natuurlijk)

Want anders als je het wel met een socket wilt doen, moet je ervoor zorgen dat je programma wel altijd draait

[ Voor 24% gewijzigd door Erkens op 31-03-2006 21:37 ]


Verwijderd

Verwijderd schreef op vrijdag 31 maart 2006 @ 21:28:
Heeft iemand ideeen hoe ik dit voor elkaar kan krijgen? of hoe ik een dergelijk script in elkaar zet?
Met setuid. Je maakt dus een script dat werkt onder een privileged user (of dat nou root is of niet maakt in deze niet zoveel uit, als het maar geen apache is), en maakt het script setuid.

Let wel dat ongeacht wie het script uitvoert, dit script altijd zal draaien met de rechten van de eigenaar. Wees dus voorzichtig met systemen waar meerdere gebruikers toegang op hebben :)

En Erkens was me voor! ;)

[ Voor 3% gewijzigd door Verwijderd op 31-03-2006 21:39 ]


Verwijderd

Topicstarter
idd

het werkt!

bedankt:D

Verwijderd

In plaats van via een SUID de uitvoerder uit te rusten met root-rechten kun je het ook andersom doen:

Je zou de toegangsrechten van de paralelle poort kunnen aanpassen zodat Apache er op mag schrijven.

Bijvoorbeeld door de poort eigendom van een groep "parallel_users" te maken, Apache onderdeel van deze usersgroep te maken en group-write toegang op de poort toe te staan.


Btw. Let je met je SUID scriptje op dat er geen write-rechten op dat scriptje staan?
Want het is natuurlijk niet de bedoeling dat Harry de Hacker dat scriptje voor zijn eigen onnobele doelen aanpast en vervolgens afwacht tot zijn scriptje met root-rechten wordt uitgevoerd.

[ Voor 43% gewijzigd door Verwijderd op 31-03-2006 21:52 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 31 maart 2006 @ 21:44:
Btw. Let je met je SUID scriptje op dat er geen write-rechten op dat scriptje staan?
Want het is natuurlijk niet de bedoeling dat Harry de Hacker dat scriptje voor zijn eigen onnobele doelen aanpast en vervolgens afwacht tot zijn scriptje met root-rechten wordt uitgevoerd.
over het algemeen kan je geen SUID zetten op een script, enkel op een binairy file, maar uiteraard ook dan geen write rechten :)

Verwijderd

Erkens schreef op vrijdag 31 maart 2006 @ 22:31:
[...]

over het algemeen kan je geen SUID zetten op een script, enkel op een binairy file, maar uiteraard ook dan geen write rechten :)
Setuid bits kan je overal op zetten, maar wat jij bedoelt (denk ik) is wel helemaal juist: als je een binary vanuit dat script aanroept dan wordt die binary niet automatisch ook uitgevoerd onder de eigenaar van het script waarvanuit je het aanroept.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 31 maart 2006 @ 22:46:
[...]

Setuid bits kan je overal op zetten, maar wat jij bedoelt (denk ik) is wel helemaal juist: als je een binary vanuit dat script aanroept dan wordt die binary niet automatisch ook uitgevoerd onder de eigenaar van het script waarvanuit je het aanroept.
Wat dus op hetzelfde neerkomt, aangezien je niks kan doen zonder het aanroepen van een binary vanuit je script ;)

Voor wie het wilt testen:

C:
1
2
3
4
// test.c
int main(){
  printf("%d\n",geteuid());
}


code:
1
2
#!/bin/sh
id -u


Deze twee doen allebij hetzelfde, namelijk de effectieve userid weergeven, en niks meer dan dat.
compile de zooi (gcc -o test test.c) en zet de suid bitjes: (dit allemaal als root natuurlijk)
# chmod u+s test test.sh
# ls -l
-rwsr-xr-x   1 root    root    11144 2006-03-31 23:07 test
-rw-r--r--   1 root    root       46 2006-03-31 23:07 test.c
-rwsr-xr-x   1 root    root       36 2006-03-31 23:10 test.sh


log nu in als normale user en zie voor jezelf:
$ ./test
0
$ ./test.sh
1000


:)

Verwijderd

Verwijderd schreef op vrijdag 31 maart 2006 @ 22:46:
[...]

Setuid bits kan je overal op zetten, maar wat jij bedoelt (denk ik) is wel helemaal juist: als je een binary vanuit dat script aanroept dan wordt die binary niet automatisch ook uitgevoerd onder de eigenaar van het script waarvanuit je het aanroept.
?? Oh ??
Is dat zo?

Het zou wel wat mislukte experimentjes met het SUID bit verklaren, maar als je in je SUID script geen binaries met SUID kunt uitvoeren, heb je er dan nog wel wat aan?
Dan kun je dus alleen maar shell-commando's met SUID runnen?

Is dit altijd zo geweest? Ik meen me te herinneren dat het writable SUID script een groot beveiligingslek was... met deze maatregel patch je een hoop problemen, dat klopt. Maar het is dan toch niet altijd al zo?

Dan val ik eigenlijk toch weer terug op mijn eerste oplossing: Het is wellicht beter om hetgeen dat je toegankelijk wilt maken in een aparte groep te plaatsen en de users die erbij moeten kunnen in dezelfde groep ... is een veiliger benadering dan dingen als Wortel uit te voeren.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 03 april 2006 @ 13:25:
Het zou wel wat mislukte experimentjes met het SUID bit verklaren, maar als je in je SUID script geen binaries met SUID kunt uitvoeren, heb je er dan nog wel wat aan?
Dan kun je dus alleen maar shell-commando's met SUID runnen?
nee, je kan alleen binary executables met suid runnen, zie mijn voorbeeldje :)
Is dit altijd zo geweest? Ik meen me te herinneren dat het writable SUID script een groot beveiligingslek was... met deze maatregel patch je een hoop problemen, dat klopt. Maar het is dan toch niet altijd al zo?
suid op een writable file is niet handig, en kan een groot beveiligingslek zijn.
Dan val ik eigenlijk toch weer terug op mijn eerste oplossing: Het is wellicht beter om hetgeen dat je toegankelijk wilt maken in een aparte groep te plaatsen en de users die erbij moeten kunnen in dezelfde groep ... is een veiliger benadering dan dingen als Wortel uit te voeren.
dat kan niet in alle gevallen :)

Verwijderd

Je kan ook PHP apart draaien van je webserver, en een eigen user geven.
Pagina: 1