Toon posts:

[suPHP met Apache] ownership/permissions

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

Verwijderd

Topicstarter
Beste tweakers,

Ik zit met een probleempje waar ik niet uit kom. Ik heb Apache 2 met PHP 5 en suPHP 0.6.1 geïnstalleerd op een Debian Etch systeem. Ik heb in een VirtualHost ingesteld voor al het HTTP verkeer die vervolgens m.b.v. mod_rewrite bepaalt welke directory hij moet benaderen. Een request voor http://www.domein.tld/bestand.php komt dan uit in /var/www/domein.tld/www/bestand.php. Nu heb ik suPHP geïnstalleerd zodat het script uitgevoerd wordt door de owner van het script. Ik wil niet dat de bestanden in /var/www world-readable zijn.

Nu komt het probleem. Alle bestanden in /var/www hebben als owner [de user]:[zijn primary group]. Maar nu zijn de bestanden niet meer toegankelijk voor Apache (die draait als www-data:www-data). Nu kan ik de group wel veranderen naar www-data maar dan kunnen de users elkaars bestanden alsnog lezen.

Wat is nu de elegantste en beste oplossing voor dit probleem? Ik had zelf al bedacht om alle domein.tld mappen o-rwx te chmodden en dan m.b.v. ACL de user www-data rx te geven, maar dan moet ik iedere keer weer zorgen dat die ACL aangemaakt wordt als ik een domein toevoeg.

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 16:00
Hoe ik het destijds heb opgezet:

/home/user/<letter>/<domeinnaam>/vhosts/<vhostname>/

/home/user/<letter> zijn gemaakt met 711 permissies, waardoor alles gewoon die directories in kan, maar niemand behalve root een listing kan maken van de directories en dus de klanten die we hosten.

/home/user/<letter>/<domeinnaam> wordt aangemaakt met met <username>:www-data ownership met als rechten 750 of 710. De users zelf zitten niet in de www-data groep, maar in een eigen groep.

Op deze manier kunnen gebruikers niet in elkaars directory komen, maar kan apache zelf wel gewoon in de verschillende VHosts komen om bestanden weer te geven. De bestanden die in die mappen geplaatst worden kan je desnoods 777 maken als je wilt, het maakt qua beveiliging toch geen ruk uit omdat er niemand anders dan de gebruiker in kan. Op deze manier zou apache theorethisch wel bestanden kunnen aanpassen, maar zolang jij zorgt dat je met tools als suexec alle scripts van users onder het eigen UID laat draaien is er niets aan de hand.

Overigens nog een tip: flikker dat suPHP de deur uit en stap over op mod_fastcgi of mod_fcgid en een losse SuEXEC. Deze oplossing is ten eerste sneller dan suPHP en ten tweede pakt het dankzij SuEXEC je andere CGI scripts ook gewoon mee.

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 09-01 14:32
Heb er nog geen gebruik van gemaakt. Maar de tekst bij mod_ruid stond mij wel aan... Misschien is dat een betere oplossing voor je?

[ Voor 15% gewijzigd door zeroxcool op 29-07-2006 15:22 ]

zeroxcool.net - curity.eu


Verwijderd

Topicstarter
Goed idee_JGC_. Ik zat er zelf ook al aan te denken maar ik wist niet of het sluitend was als je ergens in de directory tree de execute/read bits weghaalt.

Dat mod_ruid lijkt inderdaad wel aardig, maar dit is ook sneller dan suPHP?

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 16:00
Ik denk dat het zeker sneller is dan suPHP, aangezien suPHP niet veel anders dan een wrappertje om PHP in CGI mode is, terwijl die mod_ruid de gewone apache modules kan blijven gebruiken.

Het nadeel van mod_ruid is dat je apache server met root rechten moet draaien om steeds childs te kunnen switchen. Als je vervolgens een apache exploit tegenkomt op je server, ben je in de meeste gevallen wel meteen root. Dit is iets om in je achterhoofd te houden.

Overigens denk ik dat je met mod_fcgid of mod_fastcgi en PHP in fastcgi mode de native php apache module wel voorbij kunt komen in snelheid: de bovengenoemde modules zijn threadsafe voor zover ik weet, wat dus betekent dat je een threaded server kunt gaan gebruiken ipv een apache server die met preforking werkt. Met een native PHP module heb je dat niet.

Verwijderd

Topicstarter
Apache uitvoeren als root is inderdaad nogal gevaarlijk. FastCGI lijkt inderdaad een goede optie (sneller, wat jij zegt), maar ik zie nog niet hoe ik ervoor kan zorgen dat suEXEC het script uitvoert als de owner. Wel zie ik een mogelijkheid met mod_userdir maar dit gebruik ik niet.

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 16:00
Je kunt suexec aanzetten in apache en dan per VHost een user/group optie opgeven. Ik weet niet welke optie dit in apache2 precies is, aangezien ik nog vast zit aan 1.3 ivm een oude module.

Vervolgens kan je met zowel mod_fastcgi als mod_fcgid een suexec wrapper opgeven, waardoor er voor elke gebruiker een zwik PHP processen wordt opgestart als er een script voor die VHost uitgevoerd wordt. Na verloop van tijd sterven die processen vanzelf weer af als je het goed instelt.
Pagina: 1