Om een Windows 2003 (web-)server wat beter te beveiligen ben ik aan de gang gegaan met NTFS permissions. Op de server draait naast Apache 2.0.59 ook PHP/MySQL/MSSQL en enkele client/server applicaties, met bijbehorende data die ik liever niet op straat heb liggen in geval van een exploit in bijv. Apache. Natuurlijk is Apache niet het enige dat beveiligd moet worden, maar op dit moment is dit het zwakste punt qua beveiliging.
Omdat Apache standaard als LocalSystem draait heb ik als eerste een aparte account voor apache gemaakt, en de account uit de groep 'Users' gehaald en vervolgens de serviceinstellingen van Apache gewijzigd zodat het ook daadwerkelijk onder deze login draait. Hierna heb ik aan de hand van deze korte guide de volgende permissions geset:
Na heel wat gegoogle kwam ik erachter dat de group settings van de group 'Users' dit veroorzaken, ook al zit 'apache' niet meer in de Users group, deze group heeft bij properties wél NT AUTHORITY\Authenticated users staan waardoor al de rechten van deze group alsnog van toepassing zijn op 'apache'. Als oplossing heb ik Authenticated Users uit Users gehaald waardoor Apache inderdaad niets meer kon buiten de gegeven permissies. Helaas weigert hij dan ook te starten. RW + execute op windows/system32 en subdirs blijkt niet voldoende.
Om erachter te komen welke permissions dan nog meer nodig zijn heb ik FileMon erbij gepakt met een filter op Apache.exe. Naast enkele DLLs uit system32 (Winsock
) die netjes geopend worden zonder fouten na de permissions op system32 zie ik als laatste file i/o (voordat apache onverklaarbaar sluit) dat hij 'C:\' probeert te openen, waarvan apache niet mag lezen of listen volgens de permissions. Geef ik deze wel dan probeert hij hierna C:\Program Files. Zet ik ook hierop de juiste permissions dan is dat de laatste file i/o volgens FileMon (Terwijl Apache hierna o.a. nog config/logs/modules/webroot moet openen, maar inplaats daarvan stopt 'ie er gewoon mee).
Nu is de vraag: Hoe stel ik de permissions voor Apache in zodat het wél draait, maar verder niet de hele schijf leesbaar is (ik zou natuurlijk de directories van een aantal applicaties expliciet kunnen deny'en, maar als het impliciet werkt met expliciete allows zou het véél mooier/beter zijn)
Natuurlijk weet ik dat PHP/Apache ook verder dicht te schroeven valt met safemode/basedir restrictions, maar ik heb liever de NTFS permissions correct; En voor MySQL heb ik geen open_basedir
Omdat Apache standaard als LocalSystem draait heb ik als eerste een aparte account voor apache gemaakt, en de account uit de groep 'Users' gehaald en vervolgens de serviceinstellingen van Apache gewijzigd zodat het ook daadwerkelijk onder deze login draait. Hierna heb ik aan de hand van deze korte guide de volgende permissions geset:
- Apache directory en subdirs: read + execute
- Apache log directory: + write
- Httproot: read + execute
Na heel wat gegoogle kwam ik erachter dat de group settings van de group 'Users' dit veroorzaken, ook al zit 'apache' niet meer in de Users group, deze group heeft bij properties wél NT AUTHORITY\Authenticated users staan waardoor al de rechten van deze group alsnog van toepassing zijn op 'apache'. Als oplossing heb ik Authenticated Users uit Users gehaald waardoor Apache inderdaad niets meer kon buiten de gegeven permissies. Helaas weigert hij dan ook te starten. RW + execute op windows/system32 en subdirs blijkt niet voldoende.
Om erachter te komen welke permissions dan nog meer nodig zijn heb ik FileMon erbij gepakt met een filter op Apache.exe. Naast enkele DLLs uit system32 (Winsock
Nu is de vraag: Hoe stel ik de permissions voor Apache in zodat het wél draait, maar verder niet de hele schijf leesbaar is (ik zou natuurlijk de directories van een aantal applicaties expliciet kunnen deny'en, maar als het impliciet werkt met expliciete allows zou het véél mooier/beter zijn)
Natuurlijk weet ik dat PHP/Apache ook verder dicht te schroeven valt met safemode/basedir restrictions, maar ik heb liever de NTFS permissions correct; En voor MySQL heb ik geen open_basedir