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.
|