[Apache2] PHP5 module en CGI tegelijkertijd - problemen

Pagina: 1
Acties:

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04-2025
Ik heb een aantal virtual hosts draaien op een Debian/Sarge systeem met Apache2. Dit heb ik altijd via mod_php5 (van dotdeb.org) gedaan zodat ik gemakkelijk via de Apache-config per virtual host PHP-instellingen kon doorgeven.

Aangezien de server een shared webserver is moest ik minstens een open_basedir restrictie instellen om te voorkomen dat mensen bestanden van anderen kunnen lezen. Safe_mode gaat vanzelfsprekend ook aan, anders kun je met een simpele exec() nog alles doen. Ook wil ik dat de sessions en temporary uploads in een speciale map per gebruiker komen, zodat deze goed gescheiden blijven. Dit is goed te regelen met de upload_tmp_dir en session.save_path instellingen.

Echter wil ik de gebruikers de mogelijkheid geven om wél system calls te doen door middel van exec(), zodat ze niet beperkt blijven tot PHP maar ook dingen daar buiten kunnen doen. Dit uiteraard onder hun eigen useraccount; hiervoor gebruik ik suPHP om een PHP5-cgi binary aan te roepen onder de useraccount die bij de betreffende virtual host hoort. Dit werkt! Alleen zit ik nu met het probleem dat ik de locatie waar de sessions en tijdelijke uploads worden opgeslagen alleen kan instellen via de globale php.ini. Hoe kan ik dit weer per-user regelen?

Verder las ik in de documentatie van suPHP dat het enorm gevaarlijk is om tegelijkertijd de suPHP CGI interface aan te bieden én de PHP5-module voor Apache2 te draaien. Weet iemand waarom dit is? (dit wisten ze weg te laten uit de documentatie)

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 09-04 16:59
PHP CLI en http file uploads en sessies :?
Heb het niet helemaal goed begrepen.. en begrijp het nog steeds niet goed.

Je wilt dat men exec() kan gebruiken. Deze kun je enablen in safe-mode.
Alleen wil je dat programma's welke dan worden uitgevoerd onder de useraccount van de gebruiker draaien, terwijl dit onder de user zal zijn waaronder Apache draait wanneer je de PHP5-module gebruikt.

Dus hoe wil je men gebruik laten maken van dat suPHP? Een standaardmap (/cgi-bin?) en bestanden welke daar in staan door die binary laten parsen in plaats van de php-module?
Je kunt een aantal configuratie-parameters via flags meegeven aan de windows-binary (CLI). Ik neem aan dat dit bij Debian ook het geval is.
Kun je dan niet in je Apache-config, waar je aangeeft dat de cgi binary moet worden gebruikt voor een bepaalde map, deze flags meegeven bij de aanroep van de binary?
Iets in de richting van;
code:
1
AddHandler .cgi "/usr/local/bin/suPHP/php -d upload_tmp_dir='/dev/null/' -d session.save_path='/dev/null'"
:?

[ Voor 99% gewijzigd door frickY op 01-02-2006 09:21 ]


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04-2025
frickY schreef op woensdag 01 februari 2006 @ 09:13:
Je wilt dat men exec() kan gebruiken. Deze kun je enablen in safe-mode.
Alleen wil je dat programma's welke dan worden uitgevoerd onder de useraccount van de gebruiker draaien, terwijl dit onder de user zal zijn waaronder Apache draait wanneer je de PHP5-module gebruikt.
De php5-module draait onder de account van de webserver, dus die moet zeker blijven draaien onder safe_mode en open_basedir. Daar ga ik niets aan veranderen.
Dus hoe wil je men gebruik laten maken van dat suPHP? Een standaardmap (/cgi-bin?) en bestanden welke daar in staan door die binary laten parsen in plaats van de php-module?
Je kunt een aantal configuratie-parameters via flags meegeven aan de windows-binary (CLI). Ik neem aan dat dit bij Debian ook het geval is.
Kun je dan niet in je Apache-config, waar je aangeeft dat de cgi binary moet worden gebruikt voor een bepaalde map, deze flags meegeven bij de aanroep van de binary?
Iets in de richting van;
code:
1
AddHandler .cgi "/usr/local/bin/suPHP/php -d upload_tmp_dir='/dev/null/' -d session.save_path='/dev/null'"
:?
Ik wil dat mensen bestanden met een extensie als .cgiphp door PHP5-cgi kunnen laten uitvoeren onder hun eigen account of, indien ze dit willen, de keuze krijgen om een handler toe te voegen waardoor alle .php bestanden worden uitgevoerd door de CGI binary van PHP (zoals ze hier bijvoorbeeld doen). suPHP wordt gecompileerd met een pad naar PHP en kan voor zover ik weet geen argumenten per virtual host aannemen voor dat soort opties.

[ Voor 5% gewijzigd door JeRa op 01-02-2006 09:25 ]


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04-2025
Minischøp :)

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 09-04 16:59
Dus je doet al iets in de richting van
code:
1
2
AddType application/x-httpd-phpcgi .phpcgi
Action application/x-httpd-phpcgi "suPHP"
?

Dan is de vraag of je via de commandline instellingen kunt opgeven zoals dat ook met de PHP binary kan. Anders is het misschien mogelijk om in de globale php-ini van suPHP een header-pagina mee te geven (welke altijdt wordt geinclude), en in die header pagina met een PHP-script bepalen welke user het bestand uitvoer, en realtime met ini_set de juiste mappen configureren?

Alleen vraag ik me af of dit uberhaupt mogelijk is. Bestanden worden geupload vorodat de webserver het request afhandeld, en dus voordat je PHP-parser aan het werk wordt gezet.
De lokatie waar de bestanden naar toe worden geupload zal dus van te voren vast moeten staan.