ASPNL logo (1 kb)
Saturday, February 04, 2012




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Onder welke gebruiker werkt een script?

Door Michiel van Otegem
28 mei 2001

Als een gebruiker een pagina opvraagt op je server, mag deze gebruiker (of eigenlijk het script in de pagina) bepaalde dingen. Wat... dat hangt af van de situatie, of eigenlijk de identiteit die gebruikt wordt bij het uitvoeren van opdrachten.

De rechten van een script

De webserver werkt normaal gezien onder een speciaal gebruikersaccount, het IUSR_machinenaam account. Dit account wordt automatisch aangemaakt als je IIS (of PWS) installeert. Dit betekent dat alle bestanden die in je website staan uitgelezen kunnen worden als die gebruiker de juiste rechten heeft. Dit is het geval als die specifieke gebruiker de juiste rechten heeft OF als de gebruikersgroep Everyone de juiste rechten heeft(!). Anders verschijnt er een inlogvenster en moet je inloggen als een gebruiker die wel de juiste rechten heeft. Alle bestanden buiten de website kunnen natuurlijk niet zomaar opgevraagd worden. Het script kan deze bestanden echter wel openen met het Scripting.FileSystemObject.

Je kunt via het IUSR account geen bestanden opvragen via het netwerk. Ook dan verschijnt er een inlogvenster bij de browser. Dat komt omdat het IUSR account gebonden is aan de server, het is geen domein account, maar een lokaal server account. Om dit wel te kunnen moet de IUSR vervangen worden door een domein account. DIt is echter niet aan te raden, omdat een inbraak op de server dan ook toegang geeft tot de rest van het netwerk.

Je kunt de gebruiker waaronder IIS werkt veranderen met de Internet Service Manager. Dit heeft dus ook gevolgen voor wat IIS wel en niet mag. Let erop dat die gebruiker wel de benodigde rechten heeft op de componenten die het nodig heeft om te werken. Anders is alles wat je terug krijgt een blanco pagina, zonder enige foutmelding (moeilijk opsporen dus...).

De rechten van een component

Als een script een component aanroept, verwisselt de gebruiker als het ware van identiteit. Alles wat vanuit het component gedaan wordt, wordt gedaan door die nieuwe identiteit. Welke identiteit dat is hangt af van het soort component.

Een in-process component
Een zogenaamd in-process component werkt in dezelfde proces-ruimte als het script, ze zijn in feite hetzelfde programma. Single Threaded Appartment (STA) componenten, zoals gemaakt met Visual Basic 5.0 en hoger hebben daarom dezelfde identiteit. Omdat er bij het werken met andere typen componenten een soort vertaalslag gemaakt moet worden (alle operaties gebeuren via een zogenaamde proxy), krijgen die componenten de identiteit van het System account. Dit betekent dat het toegang heeft tot ALLE resources op de server, maar geen enkele op de rest van het netwerk, aangezien dit een lokaal server account is. Het is duidelijk dat de hoeveelheid rechten van dit account soms teveel is, maar ook wel eens te weinig. Je kunt dit verhelpen door gebruik te maken van Windows Component Services (voorheen Microsoft Transaction Server). Een component dat onder WCS draait, kun je expliciet een identiteit geven. Dit kan een lokaal account zijn, maar dat kan ook een account zijn dat onderdeel is van je netwerk domein. Het eerste is handig om niet overal toegang toe te geven, het laatste handig als je iets over het netwerk moet benaderen.

Een out-of-process component
Een zogenaamd out-of-process component werkt in een eigen proces-ruimte. Dit heeft als voordeel dat als het component faalt, de webserver gewoon door blijft gaan (normaal crasht dan ook de server). Het nadeel is echter dat dit betrekkelijk veel van de server vergt, daarom kun je in ASP standaard geen out-of-process componenten gebruiken. Om dit wel te kunnen, dien je de registry te wijzigen en de HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/W3SVC/ASP/Parameters/AllowOutOfProcCmpnts key op 1 te zetten.

Een out-of-process component werkt standaard onder het IWAM_machinenaam account. Hiervoor gelden eigenlijk dezelfde regels als voor het IUSR_machinenaam account. Een out-of-process component kan niet onder WCS werken, als je dus de identiteit van een dergelijk component wil wijzigen, zul je anders te werk moeten gaan. Je doet dat met de DCOM Configuratie tool dcomcnfg.exe.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL