bernhard frank’s blog
[bi:frængk] - freimütiges über webhosting auf windows
disclaimerThese postings are provided "AS IS" with no warranties, and confer no rights. Use of included code samples are subject to the terms specified at Microsoft - Terms of Use
Enabling Web Management Service Failed Request Tracing helped me to troubleshoot the WebMatrix (client)--- Web Deploy (server) communication. A special account (installed by Web Deploy) is used on the server on behalf of the requesting WebMatrix client to perform higher priviledge operations (e.g. config changes) however this account seems to have a problem:
53.
view trace
Error
-AspNetModuleDiagErrorEvent
Uri
/msdeploy.axd
eventData
Tracing deployment agent exception. Request ID ''. Request Timestamp: '10/24/2011 12:17:08'. Error Details:
Microsoft.Web.Delegation.DeploymentAuthorizationException: Not able to log on the user '.\WDeployConfigWriter'. ---> System.Runtime.InteropServices.COMException (0x80070532): Logon failure: the specified account password has expired. (Exception from HRESULT: 0x80070532)
Tracing deployment agent exception. Request ID ''. Request Timestamp: '10/24/2011 12:17:08'. Error Details: Microsoft.Web.Delegation.DeploymentAuthorizationException: Not able to log on the user '.\WDeployConfigWriter'. ---> System.Runtime.InteropServices.COMException (0x80070532): Logon failure: the specified account password has expired. (Exception from HRESULT: 0x80070532) --- End of inner exception stack trace --- at Microsoft.Web.Deployment.LogonUserHandle.LogonUser(String userName, String domain, String password) at Microsoft.Web.Delegation.SpecificUserDelegationContext.get_UserHandle() at Microsoft.Web.Delegation.SpecificUserDelegationContext.Impersonate() at Microsoft.Web.Deployment.DelegationHelper.ImpersonateForOperation(String deploymentAction, String deploymentProvider, String deploymentPath, DelegationContextCache cache) at Microsoft.Web.Deployment.DelegationHelper.ImpersonateForOperation(String deploymentAction, DeploymentObject deploymentObject) at Microsoft.Web.Deployment.DeploymentObject.Add(DeploymentObject source, DeploymentSyncContext syncContext) at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAdd(DeploymentObject destObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source) at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source) at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable) at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentWorkerRequest workerRequest)
at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentWorkerRequest workerRequest)
The WDeployConfigWriter has had "change password at next logon" option checked. After checking the option "Password never expires" ASP.NET version compatibility check in WebMatrix works J
Cloud Computing ist in (fast) aller Munde. Dieser Blogeintrag richtet sich an Alle, die ihre eigene IT-Infrastruktur dynamisch – bedarfsgerecht – elastisch – automatisch, anderen zur Verfügung stellen wollen.
D.h. eine Private Cloud aufbauen wollen auf der Basis von Microsoft Technologien.
Interessiert? Hier eine Linksammlung:
Weiterbildungsangebote
Downloads und Test-Software
Scenario:
You have installed the Web Deployment Tool on your IIS7 webserver. Now you want to configure a site for Web Deploy Publishing like described in:
http://learn.iis.net/page.aspx/984/configure-site-for-web-deploy-publishing/
i.e. you want to to this using the “Configure Web Deploy Publishing” dialog:
Problem:
You do a right-click the site you want to publish to, click Deploy and then there is no “Configure Web Deploy Publishing…” in the IIS Manager UI
i.e. the “Configure Web Deploy Publishing” sub menu is missing .
Solution:
You might, like me, do not have the latest version of the Microsoft Web Deploy 2.0 (I had 2.0.1042) on your IIS:
Install the latest version (e.g. 2.0.1070) of the web deployment tool on your IIS7 –> this will add the “Configure Web Deploy Publishing…” to the IIS Manager UI:
I did so | prefer installing the “Web Deployment Tool 2.1 for Hosting Servers” using the Web Platform Installer:
Diese Frage kommt einem vielleicht nicht so leicht in den Sinn, weil man von jedem Webserver erwarten würde, dass er in der Lage ist die Inhalte meiner Website an Browser auszuliefern.
Und in der Tat, schafft der IIS diese Anforderung in der Default Installationsvariante. D.h. wenn Sie den IIS 7 installieren, beinhaltet die Standardinstallation alle IIS-Module, die erforderlich sind, um statische HTML-Dateien, Dokumente und Bilder auszuliefern.
Meist wird dieses Work Load Szenario mit anderen Work Loads kombiniert z.B. um zusätzlich Seiten auszuliefern, die in PHP oder ASP.net geschrieben worden sind.
In Jetzt geht's los – "Die erste Webseite." haben wir gesehen, dass die Inhalte meiner Website letztlich auf der Festplatte des Servers liegen (auch remote Share ist möglich). Liefert ein Webserver den Inhalt (z.B. aus einer .html Datei) welcher beim ihm auf Platte liegt genauso beim Browser ab, dann spricht man von statischen Inhalten.
Liegen auf dem Server dagegen Code Dateien (.php, .asp,.aspx, etc.) wird erwartet, dass der Browser nicht Quellcode bekommt sondern dass der IIS Server die Code-Dateien nach abzuarbeitenden Code durchsucht (interpretiert) diesen kompiliert, ausführt und die Antwort Browser verständlich (z.B. html (+javascript) )zurückschickt – dabei spricht man von serverseitigen dynamischen Inhalten.
Serverseitige dynamische Inhalte (siehe auch Server-side scripting) werden auf dem Webserver bearbeitet und dienen meist dazu interaktive Websites bereitzustellen, die z.B. Inhalte aus Datenbanken darstellen (wie z.B. Webshops, CMS, Blog, o.ä.).
Daneben gibt es auch noch Inhalte/Skripte die im Browser ausgeführt werden (Client-side scripting) und dadurch die Darstellung / Interaktivität einer Website beeinflussen. In der Regel sind diese Inhalte in JavaScript geschrieben und im html eingebettet oder zugeladen.
Anm.: Da Serverseitig kein Javascript ausgeführt wird ist aus der Sicht des Webserver javascript statischer Inhalt – und wird entsprechendem Mime-Type Eintrag wie folgt ausgeliefert:
Welche Datei-Erweiterungen (in der URL) für den IIS als statisch gelten definiert man bei den Einstellungen für die MIME-Typen (siehe auch Internet media type – Wikipedia). Hier wird eine Liste aller Dateitypen hinterlegt die als statisch gelten.
Anm.: Einträge für dynamische Dateien (z.B. php ) sucht man deshalb hier vergebens.
Mime-Types haben die wichtige Aufgabe das übermittelte zu klassifizieren also zu beschreiben was da überhaupt vom Server gesendet wird (z.B. Text, Bild, Zip, etc.) – also ähnlich wie Dateiendungen.
Da man sich aber nicht (mehr) auf die Dateiendung in der URL Zeile verlassen möchte ist gerade für Browser der korrekte Mime-Type zum übermittelten Inhalt besonders wichtig. Warum?:
Nur wenn der Browser weiß was er vom Server bekommen hat, kann er den Inhalt richtig darstellen.
Mit einem Mime-Type Eintrag sage ich dem IIS welche Dateiendung statischen Inhalt transportiert und welchen Mime-Type der IIS beim Ausliefern einer solchen Datei an den Browser mitschicken soll:
Wenn ich Browser nun z.B. die "start.html" von meinem IIS aufrufe, dann bekomme als Antwort im Http-Protokol Header "Content-Type" den eingetragenen Mime-Type ausgeliefert:
[Download zu wfetch Tool]
Wenn Sie diese Fehlermeldung sehen:
HTTP Error 404.3 - Not Found
The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.
, dann haben Sie wahrscheinlich von ihrem IIS eine Datei aufgerufen dessen Datei-Endung und Mime Type dem IIS nicht bekannt ist.
Hintergrund: Statische Inhalte für die im IIS kein Mime-Type definiert ist werden nicht ausgeliefert – der IIS antwortet mit einer 404 (.3) Not Found Fehlermeldung.
Abhilfe: Der IIS hat zwar eine Standardliste mit Verknüpfungen von Datei-Endungen zu bekannten Mime-Types, dennoch kann es vorkommen, dass man diese Liste selbst erweitern muss (siehe auch z.B. Configuring IIS for Silverlight Applications)
Beispiel: Um statische Inhalte vom Typ Scalable Vector Graphics (.svg Dateien) vom IIS7 ausliefern zu können muss ein neuer Mime-Type Eintrag gesetzt werden (siehe auch Adding IE 9 MIME Types to IIS 7)
Als Test .svg-Datei kann z.B. der Variable Resistor von Wikipedia dienen. Ich platziere diese Datei in meinem c:\inetpub\wwwroot Ordner (=Standard Web Site).
Ohne zusätzlichen Mime-Type Eintrag bekomme ich, im Browser:
Wir fügen jetzt den notwendigen Mime-Type hinzu:
IIS Management Konsole -> Server Namen auswählen -> Mime-Types Feature auswählen -> Open Feature -> Mit "Add" einen neuen Eintrag festlegen:
File name extension
.svg
MIME type:
image/svg+xml
Ein erneuter Aufruf im Browser erzeugt keinen Fehler und die Vektor Grafik wird korrekt dargestellt:
Kurz: Im Internet ;-)
Bei der Internet Engineering Task Force (Wikipedia Eintrag zur IETF) liegen die sog. RFC – Beiträge aus, die u.a. dokumentieren wie die Mime-Typen zu setzen sind.
Anm. d. Autors: Ich musste noch nicht die RFC konsultieren um einen Mime-Type für einen Datei-Type herauszufinden, meist existiert ein Wikipedia Eintrag der den Mime-Type gleich mit angibt oder alternativ hilft eine Suchanfrage nach der Dateiendung und "Mime-Type".:
Wer hat die Antwort auf statische Inhalte - oder was macht der StaticFile Handler?
"Handler Mappings" im IIS7 legen fest, wer die Antwort auf eine http Anfrage übernimmt:Die Zuordnung welcher Handler für welche Anfragen zuständig ist geschieht auf Basis des angefragten Dateityps:
Ein IIS7 soll in der Regel viele unterschiedliche Inhalte (.html, .php, .asp, .aspx, etc.) ausliefern können. Je nachdem ob es ich dabei um statische oder dynamisch Inhalte handelt, ergeben sich daraus unterschiedliche Anforderungen an die Darstellung: Dynamische Inhalte müssen vor Versand noch "aufbereitet" (z.B. kompiliert) werden – statische Inhalte zuvor von der Platte geholt werden. Das erklärt die zahlreichen Handler-Einstellungen. Mehrfachbelegungen sind möglich, je nach Konfiguration bestimmt der IIS7 dann welcher Handler für eine Anfrage genommen wird.
Für alle statischen Inhalts-Dateitypen gibt es Default nur ein Handler-Mapping : Das StaticFile-Handler Mapping:
Anstatt für alle statischen Inhalte / Dateiendungen (.htm, .html, .jpg, etc. ) jeweils ein Handler-Mapping zu haben, verwendet der IIS7 ein Wildcard Mapping im Pfad ("*"). Die eigentliche Arbeit übernehmen die eingetragenen Handler: z.B. das StaticFileModule.
Das StaticFileModule liest den Inhalt einer Datei passend zur http Anfrage von der Festplatte und übergibt diesen als http Antwort.
Fehlt das StaticFileModule bekommt man bei einer Anfrage auf statische Inhalte o.ä.:
HTTP Error 500.21 - Internal Server Error
Handler "StaticFile" has a bad module "StaticFileModule" in its module list
Fehlt das Handler-Mapping für statische Inhalte erzeugt eine http-Anfrage darauf o.ä.:
HTTP Error 404.4 - Not Found
The resource you are looking for does not have a handler associated with it.
Tipp:
Wer wissen möchte welches Handler-Mapping für eine bestimmte http Anfrage vom IIS ausgewählt worden, kann das IIS7 Failed Request Tracing aktivieren:
z.B. "slow.aspx" (ASP.NET 4.0)
NewHandlerName="PageHandlerFactory-Integrated-4.0", NewHandlerModules="ManagedPipelineHandler", NewHandlerScriptProcessor="", NewHandlerType="System.Web.UI.PageHandlerFactory"
"start.html"
NewHandlerName="StaticFile", NewHandlerModules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"
Handler sind Komponenten im IIS7 und erzeugen den Inhalt den der IIS als http Antwort schickt.
Für den IIS7 sind Inhalte | Datei-Erweiterungen statisch (.html, .jpg, .css, etc. ), wenn dafür ein gültiger Mime-Type angegeben ist.
Für alle statischen Inhalte greift standardmäßig ein Handler Mapping -"StaticFile".
Dieses Mapping legt u.a. fest, dass das StaticFileModule den Inhalt passend zur http Anfrage von Festplatte lesen und als http Antwort zurückgeben soll.
Install Typical IIS Workloads : Installing IIS 7 : Installing and Configuring IIS 7
Deploying a Static Content Server (IIS 7)
IIS 7 Modules Overview : Introduction to IIS 7 Architecture
Why enable IPv6?
there are various reasons for this. One that might not be so obvious is because there are more and more applications that need IPv6 and rely on the fact that IPv6 is enabled by default (on Windows Vista or Windows Server 2008)
Turning IPv6 off brings you on untested grounds resulting in components that no longer function.
Support has solved a lot of problems that could have been avoided by keeping IPv6 turned on.
For more information on this please read Support for IPv6 in Windows Server 2008 R2 and Windows 7
So how to do this:
from the cmd line in case someone has unchecked IPv6 mistakenly.
This is especially useful when you have no GUI – e.g. on Server Core / Hyper-V Server or when you need to check network connection properties | network settings like below for an unattended installation.
Using WMI or other built-in tools seem to be a dead end. Doing so in the registry is one way.
Here is an unsupported tool that you could use at your own risk:
NVSPBind is the tool that lets you enable protocols (e.g. IPv6) on a network adapter using the command line:
nvspbind.exe /e "Local Area Connection" ms_tcpip6
ms_netbios NetBIOS Interface ms_server File and Printer Sharing for Microsoft Networks ms_pacer QoS Packet Scheduler ms_ndiscap NDIS Capture LightWeight Filter ms_wfplwf WFP Lightweight Filter ms_msclient Client for Microsoft Networks ms_lltdio Link-Layer Topology Discovery Mapper I/O Driver ms_rspndr Link-Layer Topology Discovery Responder ms_ndisuio NDIS Usermode I/O Protocol ms_pppoe Point to Point Protocol Over Ethernet ms_tcpip6 Internet Protocol Version 6 (TCP/IPv6) ms_netbt WINS Client(TCP/IP) Protocol ms_smb Microsoft NetbiosSmb ms_tcpip Internet Protocol Version 4 (TCP/IPv4) vms_pp Microsoft Virtual Network Switch Protocol
…
Download NVSBind from MSDN.
Links:
Configuring WebDAV requires some steps, e.g.:
If you want to do this for a couple of websites – you probably want to do this automatically.
This can be done by calling a batch file multiple times. Once for each website - doing all of the actions as stated above:
Here is my version:
here is what goes into the batch “webdav.cmd”:
@echo off rem the first input parameter %1 takes the website name with quotation marks e.g. "Default Web Site" rem the second input parameter %2 takes a password for the windows user that will associated with the webdav user has the same name as the website e.g."Default Web Site"
rem Create a windows account with the same name as the website net user %1 %2 /add /EXPIRES:NEVER
rem build command string to get the root directory of a website using appcmd.exe set name= %windir%\system32\inetsrv\appcmd.exe list vdir "%~1/" /text:physicalPath'
echo website "%~1/"
rem call icacls to set permissions on each directory for /F %%X in ('call %name%) do (echo add NTFS permissions on root: %%X for user "%~1" && call icacls "%%X" /grant "%~1:(OI)(CI)(M)")
rem IIS per web site settings rem enable windows authentication on webdav site rem you might use basic auth in conjunction with SSL and http://support.microsoft.com/default.aspx?scid=kb;EN-US;963047 %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/security/authentication/windowsAuthentication /enabled:"true" /commit:apphost
rem enable webdav on a site basis %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/webdav/authoring /enabled:"True" /requireSsl:"False" /commit:apphost rem create a webdav allow rule for the user e.g."Default Web Site" %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/webdav/authoringRules /+"[users='%~1',path='*',access='Read, Write, Source']" /commit:apphost rem disable locks for webdav authoring - you might need locks in a multi-source authoring environment. %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/webdav/authoring /locks.enabled:"False" /locks.requireLockForWriting:"False" /commit:apphost
rem make IIS Request filter behave nice to webdav requests rem note that these settings get into applicationhost.config - so that the inetmgr UI picks them up rem see also http://learn.iis.net/page.aspx/354/how-to-configure-webdav-with-request-filtering/ %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/security/requestFiltering /fileExtensions.applyToWebDAV:"False" /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/security/requestFiltering /verbs.applyToWebDAV:"False" /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/security/requestFiltering /hiddenSegments.applyToWebDAV:"False" /commit:apphost
rem if you have dynamic request filtering installed %windir%\system32\inetsrv\appcmd.exe set config %1 -section:system.webServer/security/ipSecurity /dynamicRestrictions.denyByRequestsOverTime.enabled:"true" /commit:apphost
Run webdav.cmd with 2 parameters e.g.: webdav.cmd “Default web site” password
and the output should look similar to this:
The following will be done:
a user will be created “Default web site”
permissions will be granted for this user on the web content directory:
webdav will be enabled in IIS for the “Default web site” and an webdav authoring rule for this user created:
additionally windows auth will be enabled on this site:
and finally some webdav settings will be set for the site:
To enable webdav for multiple websites on an IIS automatically you just need to call the script multiple times from the cmd line:
FOR /F %f IN ('%systemroot%\system32\inetsrv\APPCMD list site /text:name') DO CALL webdav.cmd %f password
backup before - no warranties – hth
Das File Transfer Protocol (FTP) ist zwar nicht das neueste Protokoll, dafür aber effizient und schnell wenn es darum geht große Dateien oder viele Dateien mit einem (Web)Server auszutauschen.
Ein weiterer Vorteil: Viele teilweise komfortable FTP Clients (z.B. Filezilla) stehen mir kostenlos zur Verfügung. Damit lassen sich einfach z.B. die Dateien meiner Website von meinem Entwicklerrechner auf den IIS Webserver übertragen.
Der IIS versteht auch FTP zur Übertragung von Dateien. Auf dem Server werden dazu Verzeichnisse zum Publizieren freigegeben.
Erstens sollte man sicherstellen, dass man den aktuellsten FTP Dienst für den IIS 7 installiert hat. Hintergrund: Der FTP 7.5 ist erst nach Fertigstellung des Windows Server 2008 entwickelt worden. Deswegen gibt es für diese IIS/OS Version einen separaten Download. Bei Windows Server 2008 R2 ist der FTP7.5 auf der OS DVD mit drauf.
Am einfachsten überprüft man mit dem Web Platform Installer ob der aktuellste FTP Dienst schon drauf ist oder installiert ihn darüber:
Den FTP Dienst verwaltet man in der IIS Administrationskonsole:
Im zweiten Schritt richten wir den FTP Dienst ein, dazu müssen wir angeben:
Man kann Verzeichnisse welche über FTP erreichbar sein sollen unterschiedlich konfigurieren. Die Verzeichnisse werden innerhalb einer FTP Site verwaltet. Ich möchte 3 Einstiegs-Szenarien vorstellen, die jeweils ihre Vor- und Nachteile besitzen:
Diese Beispiele sollen zeigen, wie eine FTP Site grundsätzlich aufgebaut werden kann. Weitere Anpassungen und Erweiterungen sind natürlich möglich, sollen jedoch nicht Fokus sein, siehe dazu auch die weiterführenden Links.
Hier die Schritte zum Einrichten der wohl einfachsten Variante. (Siehe auch Creating a New FTP Site)
In der IIS Administrationskonsole -> Rechter Mouseklick auf Sites ->Add "FTP Site":
Anschließend legen wir den Namen der FTP Site fest und geben an welches Root-Verzeichnis auf dem IIS über FTP erreichbar sein soll (in unserem Fall c:\webs):
Unter der Dialogseite "Binding and SSL" wird festgelegt auf welcher IP Adresse und Port der FTP Dienst für diese Website hören soll, wir nehmen hier die Standardeinstellungen.
Der FTP 7.5 unterstützt nun Verschlüsselung (FTPS). Eine Option die sehr sinnvoll ist gerade wenn man bedenkt, dass unverschlüsseltes FTP das Passwort bei der Benutzer-Anmeldung Clear-Text über das Internet schickt und mittels Netzwerk-Sniffer von Dritten mitgeschnitten werden könnte. Wer mehr Sicherheit möchte kann Verschlüsselung erlauben oder erzwingen. Wir erlauben SSL und wählen noch das selbstausgestellte Testzertifikat (hier "localhost") aus:
Im nächsten Dialog werden die Authentifizierungs- und Autorisierung-Einstellungen – also das "wer darf was über FTP" gemacht. Hier kann ich die erste Zugriffsregel festlegen:
Zunächst sollen sich Benutzer nur als Anonymous User beim FTP anmelden können (müssen also kein Passwort eingeben) – und haben nur Lese-Zugriff auf die Website.
Anm.: Den Lese-Zugriff des Anonymous User impersonifiziert der Microsoft FTP Dienst im Hintergrund standardmäßig auf den IUSR Account, da dieser als Anonymous User Identity für die Anonymous Authentication Methode eingetragen ist. D.h. der IUSR Account braucht Lese- Berechtigungen auf dem Filesystem für C:\Webs
Mit klicken auf "Finish" taucht die FTP Site in der Konsole auf und ist bereit FTP Verbindungen anzunehmen:
Über FTP ist jetzt das Root Verzeichnis (hier: C:\Webs) inklusive aller Sub-Ordner erreichbar. Wenn ich weitere Ordner freigeben möchte, dann erstelle ich ein virtuelles Verzeichnis in meiner FTP Site:
IIS Manager -> rechter Mausklick auf "FTP Site" -> Add Virtual Directory:
Der Server Ordner c:\somewhere ist damit per FTP als Verzeichnis vDir erreichbar. Im FTP Client wird dieser virtuelle Ordner standardmäßig nicht angezeigt. Ich muss den FTP Server anweisen virtuelle Verzeichnisse in Ordnerlisten anzuzeigen:
IIS Manager -> FTP Site auswählen -> FTP Directory Browsing -> aktiviere "Virtual directories" -> Apply:
Wir machen einen Test und greifen mit Filezilla einem FTP-Client (lokal) auf unsere FTP Site (lokal) zu.
Server: localhost
Benutzername: anonymous
In Filezilla ist Links die Ordneransicht auf dem "Client", Rechts: der "FTP Server. Unser vDir taucht in der Ordneransicht auf. Dateien können einfach per drag&drop (je nach Berechtigungen) kopiert werden. Wenn wir z.B. versuchen einen neuen Ordner auf dem Server anzulegen bekommen wir einen "Access denied":
Das ist auch gut so, denn schließlich handelt es sich hier um den Anonymous User, der nur Lese Berechtigungen auf den Server hat. Wenn wir bestimmten Benutzern Schreibrechte geben möchten dann muss ich auf dem IIS noch die FTP Authentifizierung aktivieren:
Wir wählen die Basic Authentication als Methode für die FTP-Authentifizierung. Jetzt müssen wir noch eine FTP-Autorisierungs / Zugriffs-Regel anlegen um z.B. den Benutzer ftpuser, Lese- und Schreib- (Read and Write) Berechtigungen für die FTP Site zu geben:
Das FTP Benutzer-Konto muss (bei Basic Authentication als Methode) auch als Windows Account existieren und die entsprechenden Ordner und Datei Berechtigungen (hier C:\Webs) haben. Den ftpuser erstellen wir uns über die Kommandozeile:
net user ftpuser * /add
Im Hintergrund impersonifiziert der Microsoft FTP Dienst () bei Zugriffen in das angemeldete FTP Benutzer Konto. Deswegen braucht der ftpuser auch die erforderlichen Berechtigungen im Filesystem auf C:\Webs. Andernfalls könnte es bereits beim Anmelden, Anlegen oder Löschen von Dateien und Ordnern zu Fehlermeldungen kommen, z.B.:
530-User cannot log in, home directory inaccessible ... Error details: File system denied the access.
MKD /Neues Verzeichnis ... 550-Access is denied ... Error details: File system denied the access.
RMD Neues Verzeichnis ... 550-Access is denied ... Error details: File system denied the access.
Hier zur Übersicht das Flow-Chart für das Anlegen eines neuen Ordners (bei verwendeter Basic Authentication):
Wir geben dem ftpuser von der Kommandozeile aus die notwendigen Filesystem-Berechtigungen (Modify) auf C:\Webs:
ICACLS c:\webs /grant ftpuser:(OI)(CI)(M)
(Alternativ auch von über den Windows Explorer)
Eine Person kann nun mit einem FTP Client über das FTP Konto ftpuser von remote aus über das FTP Protokoll auf Verzeichnisse des Servers zugreifen um Änderungen vorzunehmen.
Anm.: Es lassen sich natürlich noch weitere Benutzer Konten anlegen und über FTP Autorisierungs-Regeln festlegen worauf diese zugreifen können.
Fazit:
+ Einfacher Weg einen Verzeichnisse eines Servers per FTP erreichbar zu machen.
+ gut geeignet für ein bis wenige FTP User.
- Isolation, was ein User darf aufgrund von Autorisierungsregeln.
- Websites von FTP Site getrennt. Benutzer muss navigieren um in das richtige Verzeichnis für die richtige Website zu gelangen.
Diese Methode integriert, verheiratet eine Website mit FTP. Website und FTP Einstellungen liegen beieinander und nicht getrennt in separater Web und FTP Site. (Siehe auch Adding FTP to a Web Site)
Ein Administrator muss dazu lediglich "FTP Publishing" zu einer Website hinzufügen. Dieser Vorgang lässt sich für andere Websites wiederholen und man erhält letztlich mehrere FTP Sites auf einem IIS.
Für einen reibungslosen Betrieb müssen die FTP Sites sich in den Binding-Einstellungen voneinander unterscheiden.
Der FTP Benutzer muss nicht lange in den Webordner navigieren sondern landet direkt im Verzeichnis seiner Website, das "Routing" passiert aufgrund der Anmelde-Informationen.
Wie schon unter (1) wird ein Wizard gestartet und es werden sofort die Binding-Informationen abgefragt:
Wir haben ja bereits eine FTP Site am Laufen, aber genau wie bei Websites kann der IIS auch mehrere FTP Sites haben. Voraussetzung dafür ist, dass sich die FTP Binding Informationen unterscheiden. Ein FTP Binding setzt sich analog zu einem http Binding aus IP, Port, Virtual Host Name zusammen (siehe "Noch eine Website anlegen!" in Teil 2 IIS für Einsteiger.).
Wenn wir den "Virtual Host Name" verwenden oder variieren, dann können wir mehrere FTP Sites auf einem IIS anlegen, ohne dass wir dazu zusätzliche IP Adressen brauchen (oder vom Standard-Port abweichen müssen). Für einen Server im Internet mit Domäne könnte das z.B. ftpXXX.%meineDomäne%.de sein.
Für mein Demobeispiel im Intranet nehme ich localhost. Die anderen Einstellungen bleiben die Defaults.
Unter "Authentication and Authorization" verwenden wir die gleichen Einstellungen wie bei (1), d.h.
Nur der Anonymous User kann sich FTP anmelden und hat nur Lese-Zugriff.
Ist FTP Publishing erfolgreich für die Site aktiviert erscheint im Site Icon (nach einem Refresh)ein ‚?'. Zusätzlich wird in den Bindings ein Eintrag für das FTP Protokoll hinzugefügt:
Die Verwendung von Virtual Host Names hat eine praktische Auswirkung auf den FTP Benutzer:
Für das Anmelden muss der Benutzer den Loginnamen zusammenbauen aus: "Virtual Host Name+|%PipeSymbol%+Benutzername" (z.B. ftp.contoso.com|administrator )
Vergisst man den Virtual Host Name beim Login bekommt man den Fehler:
Antwort: 220 Microsoft FTP Service
Befehl: USER anonymous
Antwort: 530-Valid hostname is expected.
Antwort: Win32 error: No such host is known.
Antwort: Error details: Hostname didn't match any configured ftp site.
Anm.: Auch für den Anonymous User muss der Host Name vorangestellt werden. Wir melden uns mit localhost|anonymous für die myothersite an:
+ Web- und korrespondierende FTP-Site liegen beieinander – lästiges Navigieren fällt weg.
- gesamte FTP Einstellungen verteilt auf mehrere Sites.
- FTP Benutzer muss sich noch zusätzlich zum Login noch die FTP Verbindungseinstellungen merken.
Dieses Szenario stellt eine Erweiterung zu (1) dar. Die FTP Einstellungen werden in nur einer FTP Site zentral verwaltet aber mit vielen FTP Benutzer Konten. Der Benutzer-Isolationsmodus (FTP User Isolation) im FTP 7.5 ermöglicht es Benutzern individuelle FTP-Verzeichnisse zum Uploaden von Inhalte anzubieten. Die eine FTP Site nimmt alle FTP Anmeldungen entgegen und entscheidet aufgrund des Login-Namens was der FTP Benutzer sehen darf. Die Benutzer haben nur Zugriff auf ihre eigenen Verzeichnisse und können z.B. nicht nach oben heraus aus Ihrer Verzeichnisstruktur navigieren.
Dieses Szenario ist gut geeignet wenn Websites nur einem (oder wenigen) FTP Benutzer(n) zugeordnet werden soll.
Die FTP User Isolation setzt eine bestimmte Verzeichnisstruktur in der FTP Site voraus. Der FTP-Benutzer sieht nur den Inhalt des Verzeichnisses (physikalisch oder virtuell) welches den gleichen Namen trägt wie sein FTP-Benutzer-Konto. Wichtig ist noch, dass die Benutzer-Verzeichnisse sich im Ordner LocalUser befinden müssen:
Wir bauen obiges Szenario nach und modifizieren dazu unsere FTP Site. Zuerst legen wir uns auf dem Dateisystem folgende Ordnerstruktur an:
Anschließend in der IIS Administrationskonsole die FTP Site auswählen und rechts unter Advanced Settings den Physical Path ändern, z.B. in c:\inetpub\ftproot
Dann rechter Mauseklick auf FTP Site und "Add Virtual Directory" mit Namen LocalUser welches auf den LocaUser Ordner im Dateisystem zeigt:
Dann ändern wir noch die Autorisierungs-Regeln, sodass nur user1 Lese und Schreib-Berechtigungen für das Verzeichnis user1 hat.
Die Basic Authentification muss aktiviert sein. Wir erzeugen uns noch das Benutzerkonto user1 von der Kommandozeile:
net user user1 * /add
und geben diesen Account noch Modify-Berechtigungen auf den physikalischen Ordner:
ICACLS C:\websites\LocalUser\user1 /grant user1:(OI)(CI)(M)
Dann aktivieren wir noch die FTP User Isolation:
IIS Administrationskonsole -> FTP Site auswählen -> FTP User Isolation -> "User name directory (disable global virtual...)" auswählen -> Apply:
Eine Verbindung mit Filezilla für user1 sollte ungefähr so aussehen:
+ Gut für ein "Hosting Szenario" mit vielen FTP Benutzern: Ein FTP Benutzer auf 1 bis x Website(s). Benutzer sollen voneinander isoliert sein.
+ Benutzer muss nicht mehr groß navigieren um in das richtige Verzeichnis für die eigene Website zu gelangen.
- stellt Anforderungen an Verzeichnisstruktur.
- Website von FTP Site getrennt.
- unübersichtlich wenn viele FTP Benutzer auf die gleichen Websites zugreifen sollen.
Das "öffnen" eines Webservers für FTP bringt Gefahren mit sich – gerade der Schreibzugriff macht FTP so interessant für Angreifer, sei es zum Zwischenlagern von illegalen Dateien oder dem Hochladen von Spionageprogrammen. Steht ihr Server im Internet und haben Sie FTP aktiviert ist es nur eine Frage der Zeit bis Angreifer versuchen die Passwörter zu knacken. Deswegen hier ein paar Sicherheits-Tipps:
Also nicht Administrator-Konten für FTP freischalten! Denn sollte jemand mittels Netzwerkverkehr-Mitschnitt an das Passwort gelangen, hat er nicht gleich die Komplett-Herrschaft über die Maschine.
Noch besser wäre es, wenn für die Anmeldung am FTP Dienst Benutzer verwendet würden, die nicht im Active Directory oder im Windows angelegt sind. Der IIS und FTP 7.5 bieten (auf dem Windows Server 2008) die Möglichkeit IIS interne Benutzer Accounts zu verwenden – siehe dazu Configure FTP with IIS 7 Manager Authentication.
Nur ausreichend komplexe Passwörter für FTP Benutzer Konten bieten Schutz. Die Angreifer testen automatisch verschiedene Benutzer Konten und Passwortkombinationen durch (brute force). Wie energisch? Auf einen meiner Demo FTP Server hatten es Angreifer mehr als 3,5 Mil. / Tag mal versucht. Daher sollte man es den Angreifern mit komplexen Passwörtern so schwer wie möglich machen.
Bei unverschlüsseltem FTP werden Passwörter beim Anmelden im Klartext übertragen. Jemand der in der Lage ist den Netzwerkverkehr mitzuschneiden (mittels Sniffer) kommt an das Passwort. Bei FTPS ist der Netzwerkverkehr verschlüsselt.
Klingt banal aber reduziert das Angriffs-Zeit-Fenster. Vor dem Update über Remote Desktop den FTP Dienst starten und nach dem publizieren die FTP Site wieder stoppen.
Reduziert das Angriffs-Standort-Fenster. Ideal, wenn FTP Verbindungen nur aus einem bestimmten Netzwerkbereich gemacht werden. Angenommen werden nur FTP Clients, die eine bestimmte IP Adresse(n) haben die anderen werden abgewiesen.
Der FTP 7.5 ist erweiterbar: Im How to Use Managed Code (C#) to Create an FTP Authentication Provider with Dynamic IP Restrictions wird beschrieben, wie man einen Lösung bauen kann um IP-Adressen zu blockieren, von denen innerhalb eines bestimmten Zeitraums fehlgeschlagene Anmeldeversuche ausgehen.
Aktivierte Firewalls auf Server sind zum Glück die Norm. Um den FTP Dienst auf einem Server von außen erreichbar zu machen verlangt es eine Firewall Regel um eingehenden TCP/IP Verkehr auf Server Port 21 (Control Channel) zu akzeptieren. Allerdings ist das bei FTP nicht alles: Die Dateien- und Ordneransichten werden über Daten Kanäle übertragen. Diese zusätzlichen Datenverbindungen machen den Firewalls Arbeit und setzen voraus dass FTP überhaupt unterstützt wird. Die eingebaute Windows Firewall hat das sowohl auf dem Client als auch auf dem Server im Griff und die Ausnahmeregeln werden beim Server, bei der Installation des FTP Dienstes, und beim Client bei erster Verwendung von z.B. Filezilla eingerichtet.
Problematischer wird das wenn man im Betrieb sitzt und noch die firmeneigene Firewall überwinden muss. Leider birgt auch die verschlüsselte FTPS Verbindung ein paar Konfigurationstücken – Ich hatte die beste "Experience" wenn ich im Filezilla Client die Server-Verbindung über "Explizites FTP über TLS" im Active Mode aufgebaut habe. Wenn es zu Problemen kommt empfehle ich Windows Firewall setup for Microsoft FTP Publishing Service for IIS 7.0.
Limitationen: Obwohl es mit anderen FTP Servern möglich ist, z.B. Verzeichnisberechtigungen via FTP Client zu vergeben – so wird dies vom FTP 7.5 nicht unterstützt:
Status: Berechtigungen für '/test/blubber' werden auf '755' gesetzt
Befehl: SITE CHMOD 755 blubber
Antwort: 500 'SITE CHMOD 755 blubber': command not understood
Entpacken von Archiven oder Einspielen von Datenbanken macht man ebenfalls nicht über den FTP 7.5.
Es gibt Alternativen zu FTP (für IIS) für den Datei- oder Datenaustausch, allerdings leider nicht einfacher zu implementieren. Web Deploy ist die Neueste und hat den Vorteil über Dateien hinaus Konfiguration und Datenbanken, etc. auf den Server zu spielen.
Protokoll / Technologie
Was?
Anmerkungen:
WebDAV
Dateien, Ordner
WebDAV ist eine Erweiterung zum Trägerprotokoll http(s). Stellt als Protokoll weniger Anforderungen an Firewalls. Nicht so häufig anzutreffen.
Web Deploy (aka msdeploy)
Dateien, Ordner, Konfiguration, Datenbanken, RegistryKeys, Zertifikate, etc.
Das ist die Zukunft! Nicht nur schnöder Dateiupload sondern Komplett-Deployment von Websites inkl. DB via http(s). Derzeit noch ein bisschen komplex für einfachen Datei-Upload.
Background Intelligent Transfer Service (BITS)
Für große Down- oder Uploads. BITS Server Erweiterung zum IIS muss über den Server Manager installiert werden. Wenig dokumentiert – selten anzutreffen.
c:\windows\system32\inetsrv\appcmd.exe list site /xml /state:"$=started" | appcmd stop site /in
results in:
"Default Web Site" successfully stopped "myothersite" successfully stopped
stopping all running websites on an IIS7 server.
der Kollege Christian Klasen stellt auf seinem Blog eine Beispiel Silverlight Applikation “CarShop” vor:
Hier kurz die Schritte um die Beispiel Applikation auf einem IIS7 ans Laufen zu kriegen.
Quelle: http://blogs.msdn.com/b/christianklasen/archive/2009/01/22/carshop-toolkit-auf-silverlight-gratis-verf-gbar.aspx
Quellcode und Assetdateien von Skydrive herunterladen: http://cid-b53f1cd9745af0e4.skydrive.live.com/browse.aspx/CarShop%20V2
Setup:
C:\work\CarShop\CarShop.Web\obj\Debug\Package>CarShop.Web.deploy.cmd /Y ========================================================= SetParameters from: "C:\work\CarShop\CarShop.Web\obj\Debug\Package\CarShop.Web.SetParameters.xml" You can change IIS Application Name, Physical path, connectionString or other deploy parameters in the above file. ------------------------------------------------------- Start executing msdeploy.exe ------------------------------------------------------- "C:\Program Files\IIS\Microsoft Web Deploy V2\\msdeploy.exe" -source:package to,includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink: \CarShop\CarShop.Web\obj\Debug\Package\CarShop.Web.SetParameters.xml" . . .
Das erstellt eine eine CarShop.Web_deploy Application in der "Default Web Site" im IIS.
Damit sollte eigentlich alles funktionieren.
Viel Spass
Jeder IIS Administrator sollte das prinzipiell verstanden haben, da dieses Thema, wenn falsch konfiguriert, immer wieder nette Probleme, Fehlermeldungen, nervenden Passwortabfragen oder Sicherheitslöchern verursacht.
Das eigentliche Anwendungsszenario ist einfach:
Ich möchte meine Websites oder Teile einem eingeschränkten Besucherkreis zugänglich machen – alle anderen sollen ‚draußen' bleiben.
Kurz: Wer darf was auf meiner Website sehen – und wie gehe ich vor.
Im IIS ist standardmäßig ist die anonyme Authentifizierung aktiviert. Diese ermöglicht es allen Website Besuchern auf Inhalte zuzugreifen ohne dass eine Abfrage von Benutzername und Passwort im Clientbrowser erfolgt – also quasi anonym. Für das Dateisystem jedoch erfolgt so ein Zugriff unter dem Benutzerkontext der Anonymous User Identity des "IUSR" Accounts. Im Hintergrund impersonifiziert der IIS nämlich anonyme Browseranfragen auf den IUSR Account – da dieser Standardmäßig als Anonymous User Identity eingetragen ist:
Der IUSR (Default Anonymous User Identity) ist ein Benutzerkonto das bei der Installation des IIS7 angelegt wird. Daher sollte der IUSR Benutzer NTFS Berechtigungen auf den Ordner mit den Inhalten für Ihre Website haben z.B. Read / Execute:
Fehlen der Anonymous User Identity (Default: IUSR) die Rechte auf die angeforderte Datei (Seite) wird ein "Access Denied" = http Status 401 zurückgegeben. Der Website Besucher wird dann, je nach Konfiguration des IIS, nach Benutzernamen und Passwort gefragt (Password Prompt (s.u. links)| Login Seite) oder bekommt eine Fehlerseite (s.u. rechts), falls keine alternative Authentifizierungsmethode aktiviert ist:
Will ich Jedermann Zugriff auf meine Website geben, dann muss ich lediglich dafür sorgen dass die Anonymous Authentication beim IIS aktiviert ist:
und dass die eingetragene Anonymous User Identity (Default: IUSR) Read / Execute NTFS Rechte auf die Inhalte hat.
Möchte ich im Gegenzug nur bestimmte Besucher auf meine Website lassen, dann brauche ich eine Authentifizierung um herauszufinden wer ist der Besucher überhaupt. In der Regel passiert das über eine Benutzername- und Kennwort-Abfrage. Der IIS prüft dann in der Benutzerdatenbank ob dieser Benutzername mit diesem Passwort existiert. Die Benutzerdatenbank kann sein z.B. die lokale Windows Accounts Datenbank, das Active Directory oder z.B. eine ASP.Net Membership DB. Für die Art der Authentifizierung stehen mir im IIS7 diverse Authentifizierungsmethoden zur Verfügung mit unterschiedlichen Vorzügen und Voraussetzungen:
Methode
Wie loggt sich der Besucher ein?
BenutzerDB | Welche Accounts können verwendet werden?
Anmerkungen
Anonymous Authentication
Kein Login (notwendig)
Active Directory (AD) oder/und lokale Windows Accounts
Default. Um anonyme Benutzer Zugriff auf die öffentlichen Bereiche Ihrer Web- oder FTP-Site zu erlauben ohne Abfrage nach Benutzernamen oder Kennwort.
Basic Authentication
Einfache Benutzer- & Passwort-Abfrage mit Dialog
AD + lokale
Kennwort und Benutzername werden nur leicht verschlüsselt übertragen. Bitte nur mit Verschlüsslung (https/SSL) verwenden! Häufig verwendet für Internet facing Websites – wird von allen gängigen Browsern unterstützt.
Forms Authentication
Login via Formularfeld auf Website
ASP.NET Membership
Häufig von Webanwendungen verwendet. Vorteil: hier liegen Benutzer z.B. in einer Datenbank welche auch in der Webanwendung einfach "wiederverwendet" werden können.
Bitte nur mit Verschlüsslung (https/SSL) verwenden, da Kennwörter übertragen werden!
Anm.: Forms Auth. kann nicht mit anderen Auth. Methoden wie z.B: Basic, Windows, Digest kombiniert werden.
Windows Authentication
Für den Benutzer i.d. Regel transparent - Authentifizierung läuft automatisch ab.
Login Dialog nur im Fehlerfall
Versucht wird den gerade am Browsing-Client angemeldeten Benutzer beim Server zu authentifizieren. Sicherer als Basic Authentication da Benutzername und Passwort nicht übers Netz übertragen werden. Eher für Intranet Szenarien geeignet - Single Sign On.
Digest Authentication
Benutzer- & Passwort-Abfrage
AD
Sicherer als Basic Authentication da Benutzername und Passwort nicht übers Netz gehen. Gut geeignet für Internet. Wird von vielen Browsern unterstützt.
Client Certificate Mapping authentication
Benutzer wird aufgefordert ein Client-Zertifikat für die Authentifizierung auszuwählen
(=Zertifikatsauswahl-Dialog)
Ordnet einem Zertifikat einen Benutzer zu. IIS frägt das Active Directory an welchem Benutzer das vorgezeigte Zertifikat zuzuordnen ist, d.h. im AD ist vorher eine Verknüpfung (User:Zertifikat) vorzunehmen. Benutzer muss Clientzertifikat auf seinem Rechner installiert haben.
Setzt eine verschlüsselte Verbindung https/SSL voraus.
IIS Client Certificate Mapping authentication
Zertifikatsauswahl-Dialog
lokale + AD
Benötigt https/SSL. Besucher braucht ein Clientzertifikat welches von einer für den IIS7 vertrauenswürdigen Zertifizierungstelle ausgestellt worden ist.
Der IIS ordnet einem (One-To-One) oder vielen (Many-To-One) Besucher-Zertifikat(en) einen Benutzer-Account zu.
Anm.: Aufgelistet sind Authentifizierungsmethoden welche Microsoft mit dem IIS 7 liefert. Es gibt Dritthersteller-Erweiterungen wie z.B. RSA Authentication Agent 7.0 for Web for Internet Information Services). Alternativ lässt sich der IIS7 einfach erweitern um z.B. eine eigene Authentifizierungsmethoden zu implementieren (siehe Developing a Module Using .NET oder Custom Basic Authentication for IIS )
Um die Auswahl der richtigen Authentifizierungs-Methode(n) etwas zu erleichtern hier mal 2 Beispiele um den Benutzernamen des Website Besuchers zu erfahren.
Meiner Meinung nach die einfachste Variante eine Benutzerauthentifizierung einzurichten und mit https Verschlüsselung auch recht sicher.
Den Sicherheitshinweis nehmen wir ernst und aktiveren noch die SSL Verschlüsselung.
(Praktischerweise hat IIS 7 sich schon selbst ein Zertifikat für Testzwecke erzeugt):
Die myothersite ist nach wie vor über http erreichbar, nur unser "basic" Unterordner erfordert eine verschlüsselte Verbindung, andernfalls wird ein Fehler aufgeworfen. Das bedeutet aber auch dass ich auf die Seite von nun an mit https://localhost/authentication/basic/.... zugreifen muss.
Jeder der jetzt auf die Seite zugreifen will muss sich zuvor authentifizieren:
Anm.: Der IE beschwert sich über das Testzertifikat, das sich der IIS selbst ausgestellt hat aber normalerweise von einer vertrauenswürdigen Zertifizierungsstelle (Verisign, Thawte, o.ä.) kommen sollte. Der Verschlüsselung tut das keinen Abbruch.
Nach erfolgreicher Anmeldung kann ich auf die Inhalte zugreifen. Die Benutzerinformationen können auch von einer z.B. in ASP.NET geschriebenen Seite ("Auth_User.aspx") ausgelesen werden:
Wichtig ist lediglich noch, dass der Benutzer mit dem ich mich anmelde NTFS Rechte auf die im Ordner "basic" liegenden Dateien hat.
Die Windows Authentication Methode ist auch ohne SSL Verschlüsselung sicher zu verwenden und erfordert weniger Mouseklicks in der Konfiguration. Diese Methode ist sehr gut geeignet für Intranet Szenarien, bringt allerdings ein paar Tücken mit wenn man diese Methode auch für die Authentifizierung von Websites im Internet einsetzen möchte (siehe HTTP Error 401.1 – Unauthorized bei Verwendung von Windows Authentication). Hier kurz die Vorgehensweise:
Was ist der Unterschied?
Die Windows Authentication erfolgt normalerweise ohne Benutzer und Kennwort-Abfrage, es wird versucht den am Browsing-Client angemeldeten Benutzer (In meinem Fall ein Domänen Benutzer) beim IIS zu authentifizieren. Dies geschieht für den Benutzer transparent. Bei dieser Autentifizierungs-Methode wird das Kennwort nicht übertragen, der IIS bekommt kein Passwort, kann dieses nicht in den Server-Variablen ablegen und deshalb zeigt die obige Seite auch nur einen leeren String an.
Der authentifizierte Benutzer braucht NTFS Berechtigungen auf die Datei | Ordner ("windows") damit der IIS diese ausliefert.
Nach erfolgreicher Authentifizierung erfolgt die Autorisierung. Hierbei bestimmen die Autorisierungs-Einstellungen den Zugriff des Besuchers auf die verschiedenen Bereiche einer Website.
Ich habe 2 Möglichkeiten um festzulegen worauf ein Benutzer zugreifen darf:
Hierzu werden einfach mittels NTFS Berechtigungen auf Basis der Benutzer-Accounts | Gruppen der Zugriff auf Dateien | Ordner erlaubt.
Beispiel: Wir erlauben nur Benutzer einer bestimmten Gruppe Zugriff auf ein Verzeichnis
Jeder Besucher der auf diesen Ordner zugreifen will muss sich authentifizieren und Mitglied der Gruppe "myothersite..." sein.
Wenn ich sehen möchte wer den Zugriff gemacht hat, dann kann ich das z.B. mittels
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2011-04-07 07:36:04
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username ...
2011-04-07 07:36:04 ::1 GET /authenticated-visitors/ - 8080 EUROPE\bfrank ...
tun.
Wem das editieren von NTFS-Rechten zu mühsam ist hat eine 2te Alternative die Zugriffsrechte festzulegen, die IIS 7 URL Authorization. Diese Variante ist einfach zu bedienen und Einstellungen lassen sich leicht von einer Maschine zur anderen kopieren. Die Einstellungen "Wer worauf zugreifen darf" stehen in der web.config Datei. Somit ist diese Variante ideal, wenn man z.B. auf einer gehosteten Website nur Zugriff auf die Webinhalte hat nicht aber auf die UI um NTFS Rechte zu ändern. Ein weiterer Vorteil der URL Autorisierung: Sie funktioniert auch für Nicht-Windows Benutzer-Accounts (also Accounts die z.B. in einer ASP.NET Membership DB liegen)
Kurz: Autorisierungsregeln werden auf Basis des URL Pfads und Benutzers anstelle der zugrunde liegenden Dateisystemressource gesetzt.
Diese Variante setzt voraus, dass die "URL Authorization" Option für den IIS installiert wurde.
("Internet Information Services" –>" World Wide Web Services" –> "Security")
Beispiel: Wir erlauben nur Benutzer einer bestimmten Gruppe Zugriff auf einen URL-Pfad
Die Authentifizierung läuft wie gehabt. Anschließend stell das URL Authorization Modul sicher, dass der Benutzer Zugriffsrechte auf die URL http://localhost:8080/secure/... hat.
Ich würde diese URL Autorisierungsmethode derjenigen mit NTFS Rechten vorziehen, da man die Zugriffsrechte über die IIS Konsole verwalten kann und die Vergabe der Zugriffsrechte auf URL Pfad einfacher nachzuvollziehen ist, als über NTFS Rechte – gerade dann wenn mit virtuellen Verzeichnissen gearbeitet wird (d.h. die Ordner in der URL anders heißen als der Ordner auf dem Laufwerk).
Anm.: NTFS Rechte muss der authentifizierte Benutzer dennoch haben um auf Inhalte zuzugreifen, allerdings kann man diese getrost ‚grob' halten weil ja die URL Autorisierung vorgeschaltet ist und eine granularere Zugriffsverwaltung ermöglicht.
Was passiert wenn mehrere Authentifizierungsmethoden aktiviert sind?
Werden dem Browser mehrere Authentifizierungsmethoden angeboten kann er entscheiden. Der IE wählt z.B. immer die sicherste Option (also Windows vor Basic Auth) macht aber auch keinen Fallback auf die nächstunsicherere sollte bei der Ersten die Authentifizierung fehlschlagen.
Deshalb macht es meiner Meinung nach keinen Sinn z.B. Basic Authentication und Windows Authentication gleichzeitig zu aktivieren. Denkbar wäre eher die Kombination aus Anonymous Authentication und einer anderen Authentication Methode: Dadurch könnten alle Benutzer auf Inhalte zugreifen auf die die Anonymous User Identity NTFS-Rechte hat und für die Inhalte wo der Anonymous User Identity die Rechte fehlen würde dann eine Authentifizierung gemacht – der Ablauf sieht vereinfacht etwa so aus:
Eine Authentifizierung und Autorisierung wie hier beschrieben ist nur eine Facette aus dem Bereich Webserver Sicherheit, deshalb empfehle ich Interessierten noch folgende Links:
In den beiden vorangegangen Kapiteln haben wir den IIS installiert und 2 Beispielwebseiten angelegt. Nur wer oder welcher Windows Prozess ist für die Abarbeitung der http-Anfragen auf die beiden Websites verantwortlich?
Für die Verarbeitung einer Http-Anfrage sind mehrere Stellen des IIS verantwortlich, den Administrator und Entwickler sollten jedoch besonders die sog. Arbeitsprozesse interessieren. (siehe Introduction to IIS 7 Architecture)
Warum sind Arbeitsprozesse interessant?
Weil ein Arbeitsprozess (w3wp.exe) http Anfragen verarbeitet und die dazu passende Antwort erzeugt. Verarbeiten heißt z.B. einen Benutzer authentifizieren, Inhalte (html, jpg, etc.) von der Festplatte | Cache holen oder ASP.NET bzw. PHP Code Ausführen lassen und das Ergebnis an den Anfrager zurücksenden.
Was ein Arbeitsprozess tut um Anfragen zu bearbeiten lässt sich konfigurieren und anprogrammieren.
Über die IIS Management Konsole kann ich einsehen welche http Anfragen gerade pro ausgeführten Arbeitsprozess ausgeführt werden:
Auf einem IIS sind in der Regel mehrere Arbeitsprozesse aktiv, wie viele ist Konfigurationssache.
Warum brauche ich mehrere Arbeitsprozesse?
Das Konzept der Arbeitsprozesse ermöglicht Websites oder Teile von Websites voneinander zu isolieren, so können z.B. 2 Websites in ihren eigenen w3wp.exe's laufen und unterliegen damit der Prozessisolation des Windows OS. Zusätzlich lassen sich den Arbeitsprozessen jeweils unterschiedliche Benutzerkonten zuweisen, dadurch kann man mittels NTFS Berechtigungen Datei und Ordnerzugriff einschränken.
Warum sollte ich isolieren?
Das erhöht die Stabilität, weil Website X auch dann noch antwortet wenn Website Y abgestürzt ist.
Troubleshooting wird einfacher, weil man sich peel-the-onion-mäßig an den Problemteil einer Website heran-‚isolieren' kann.
Sicherheit wird erhöht indem man unterschiedliche Accounts für die Arbeitsprozesse verwendet und den Arbeitsprozessen damit nur NTFS Rechte auf den eigenen Webordner gibt.
Verhalten | Leistung von Websites wird planbarer, weil sich die Zuweisung von CPU- und Speicher- Ressourcen auf die Arbeitsprozesse steuern lässt und man kontrollieren kann was passiert wenn Limits überschritten werden. (mehr dazu Verwalten von Anwendungspools in IIS 7 und Using WSRM to manage IIS 7 AppPool CPU Utilization)
Wie isoliere ich mit Arbeitsprozessen?
Die Arbeitsprozesse werden im IIS über Anwendungspools (Application Pool) angelegt und verwaltet:
In einem Anwendungspool ist definiert welche (Teile einer) Website von welchem Arbeitsprozess(en) ausgeliefert werden – letztlich heißt das, dass ein Anwendungspool definiert wer die Bearbeitung einer (oder mehrerer) URL(s) übernimmt.
Um z.B. eine Website nun einem Anwendungspool zuzuordnen sind folgende Schritte notwendig:
IIS Manager -> Sites -> Website auswählen ->Advanced Settings -> "Application Pool" drop down box auswählen -> aus einer Liste von Anwendungspools auswählen.
In diesem Beispiel wurde eine ganze Website dem Anwendungspool "myothersite" zugeordnet, alternativ könnte man nur Teile z.B. ein Unterverzeichnis einem Anwendungspool zuordnen. Voraussetzung ist, dass das Unterverzeichnis (wie z.B. unten "shop") eine Anwendung (im Sinne des IIS) ist:
Ordner welche als IIS Anwendungen markiert sind erhalten in der Ansicht eine kleine Weltkugel.
Was ist eine IIS Anwendung?
Eine Site ist für den IIS ein Container in dem Anwendungen und (virtuelle) Verzeichnisse mit Inhalten (*.html, *.css, *.gif,....) und Code (ASP.NET Seiten o.ä.) liegen. Auf eine Site kann von außen z.B. über http zugegriffen werden.
Ein (virtuelles) Verzeichnis ist für den IIS ein Ort (Pfad) wo er Inhalte einer Website findet. Dabei wird der Name des Verzeichnisses Teil der URL der Website über die von ‚draußen' auf die Inhalte zugegriffen werden kann (z.B. http://www.meinewebsite..../gallery/).
Eine IIS Anwendung (aka application) definiert wie ein Verzeichnis eine Gruppe von Dateien die Inhalte einer Website liefert - zusätzlich kann für eine Anwendung noch die Zugehörigkeit zu einem Anwendungspool definiert werden.
Anm.: D.h. durch ‚Aufspalten' meiner Website in mehrere Anwendungen wäre ich in der Lage diese Website durch mehrere Anwendungspools ausliefern zu lassen.
(Mehr dazu unter Understanding Sites, Applications, and Virtual Directories on IIS 7)
Welche Websites (oder Anwendungen) sollten in einen Anwendungspool isoliert werden?
Persönliche Meinung des Autors: "Jede Website sollte im eigenen Anwendungspool mit eigener Identität – idealerweise der Application Pool Identity – laufen." Das ist übrigens auch das Standardverhalten beim Neuanlegen einer Website beim IIS7 unter Windows 7 oder Windows Server 2008 R2.
Um Ressourcen zu sparen mag man möglicherweise davon abrücken und mehr Websites in einen Anwendungspool packen, jedoch in folgenden Fällen würde(müsste) ich immer isolieren:
Szenario
Link zur Vorgehensweise
Websites mit Problemen (z.B. Memory Leaks), Experimenteller oder Beta Code sollten in eigenen Application Pools laufen.
Verwalten von Anwendungspools in IIS 7
Websites von unterschiedlichen Leuten (gehostet auf einem IIS) bei denen sichergestellt werden soll dass sie nicht auf die Inhalte des anderen zugreifen (lesen, schreiben, löschen) können.
Websites welche unterschiedliche .NET Framework-, PHP- Versionen o.ä. verwenden.
s.o.
Wenn die IIS-Anwendung einen höher privilegierten Benutzerkontext braucht.
Specify an Identity for an Application Pool (IIS 7)
Wenn IIS-Anwendungen zu IIS 6 kompatibel sein müssen bzw. wenn ASP.NET 1.1 auf IIS7 verwendet werden soll
Was sind jetzt die wichtigsten Einstellungen für einen Anwendungspool?
Sehen wir uns dazu die Einstellungen des Anwendungspools "myothersite"an:
IIS Manager -> Application Pools -> doppelclick auf "myothersite":
Der Name eines Anwendungspools muss eindeutig und sollte aussagekräftig sein. Pro Anwendungspool kann nur eine Version des .NET Frameworks geladen werden (Evtl. mit dem Entwickler abklären, welche Version des .NET Frameworks benötigt wird).
Der Managed pipeline mode bestimmt welche Architektur im Arbeitsprozess (w3wp.exe) genommen wird:
Der Managed pipeline mode beeinflusst wann .NET Module aufgerufen werden und das hat Auswirkung wie http Anfragen abgearbeitet werden.
Persönliche Meinung des Autors: "Ich würde Anwendungspools immer im Integrated Pipeline Mode betreiben, weil: neu, verständlicher, erweiterbarer und nur bei Problemen den Classic Modus verwenden"
(Mehr dazu Introduction to IIS 7 Architecture und ASP.NET Integration with IIS 7)
Anwendungspool-Identität und Recycling
Für Mehr Isolation/Sicherheit und Stabilität sollte man noch 2 Einstellungen von Anwendungspools kennen:
IIS Manager -> Application Pools -> "myothersite" auswählen -> Advanced Settings auswählen:
Identität
Der Benutzerkontext unter dem der Arbeitsprozess läuft kann ein Built-in Account wie z.B. Network Service, die ApplicationPoolIdentity oder ein anderer Windows Benutzer sein.
Was ist eine ApplicationPoolIdentity?
Seit Windows 7 (oder Windows Server 2008 R2, bzw. ab Windows Server 2008 Service Pack 2) kann der IIS7 pro ApplicationPool einen virtuellen Benutzer verwenden – die sog. ApplicationPoolIdentity. Dieser Benutzer trägt den gleichen Namen wie der Anwendungspool.
Vorteile von ApplicationPoolIdentities:
Beispiel: Anwendungspool "myothersite" läuft unter der ApplicationPoolIdentity im Taskmanager sehe ich den Arbeitsprozess w3wp.exe dessen Benutzername "IIS AppPool\myothersite" ist:
(mehr dazu Application Pool Identities)
Recycling
Standardmäßig wird der Arbeitsprozess(e) eines Anwendungspools nach 29min (=1740 min) neu gestartet ("Regular Time Intervals"). Das gibt bis dahin vergebenen Speicher wieder frei und initialisiert die Webanwendung. Dabei wird ein neuer Arbeitsprozess gestartet, dieser bekommt neue eingehende http-Anfragen zugewiesen. Der ‚alte' Arbeitsprozess(e) darf seine verbleibenden Anfragen abarbeiten und wird dann beendet. D.h. das Recyclen geht ohne Ausfallzeit und der Websitebesucher merkt davon nichts (=Overlapped Recycle). Um Ressourcen zu sparen wird ein neuer Arbeitsprozess immer nur dann gestartet wenn auch wirklich http-Anfragen dafür anliegen – d.h. die erste http Anfrage nach 30min Leerlauf auf einen Webserver könnte wegen des Startups ein bisschen länger dauern. (Abhilfe siehe:Using the IIS Application Warm-Up Module)
Ist die Webanwendung gut programmiert, geht bewusst mit Ressourcen um und ist über einen längeren Zeitraum stabil dann spricht nichts dagegen das Zeitraum für das Recycling zu verlängern oder ganz abzuschalten.
(mehr unter Verwalten von Anwendungspools in IIS 7)
Kurz zusammengefasst:
Der IIS bearbeitet http-Anfragen durch die Arbeitsprozesse (w3wp.exe).
(Teile von) Websites lassen sich über die Arbeitsprozesse voneinander isolieren für mehr Stabilität.
Arbeitsprozesse und Stabilitäts-Funktionalitäten werden im IIS über Anwendungspools konfiguriert.
Weiterführend empfehle ich Introduction to IIS 7 Architecture zu lesen.
Wer einfach mal sehen möchte worauf ein w3wp.exe unter welchem Account zugreift sollte mit dem Process Monitor spielen – auch für Troubleshooting zwecke ganz hilfreich:
Hauptverzeichnis des IIS beeinhaltet z.B. die Dateien zur IIS Konfiguration, Verwaltung (z.B.MMC), IIS-Module, Executables für die IIS Dienste.
ApplicationHost.config ist eine editierbare XML Datei welche die Root-|Hauptdatei des IIS 7.0 Konfigurationssystems darstellt. Sie beeinhaltet Definitionen für alle Websites , Anwendungen, virtuelle Verzeichnisse und Anwendungspools , sowie globale Standards für die Web-Server -Einstellungen. Die Konfiguration sollte in regelmässigen Abständen gebackupt werden, z.B. mit dem Commando:
C:\Windows\System32\inetsrv>appcmd add backup
BACKUP object "20100623T150732" added
Die Backups landen im Verzeichnis: C:\Windows\System32\inetsrv\backup
Mehr unter Introduction to ApplicationHost.config und Arbeiten mit Konfigurationsdateien in IIS 7.0
Der IIS erlaubt das Delegieren von Einstellungen. D.h. es können IIS Einstellungen außerhalb der applicationHost.config überschrieben | modifiziert werden, um das Verhalten des IIS auf z.B. Website-, Anwendungs- und Verzeichnis-Ebene zu verändern. Beispiel (s.u.): Caching für einen Untordner deaktivieren. Die Einträge werden in eine web.config Datei geschrieben und im selben Order der Webinhalte abgelegt (i.d.R).
Das C:\inetpub Verzeichnis ist das Lese- und Schreibverzeichnis des IIS. Es enthält folgende Unterverzeichnisse:
Ordner
Beschreibung
C:\inetpub\AdminScripts
VB Skript zur Administration der IIS Vorgängerversion (IIS6) - wg. Kompatibilität - kommt mit den „IIS 6 Scripting Tools"
C:\inetpub\custerr
Enthält die Fehler-Seiten welche der IIS im Fehlerfall (z.B. File not found 404) dem Websiten Besucher schickt. Unterstützt Mehrsprachigkeit. Mehr unter How to Use HTTP Detailed Errors in IIS 7.0
C:\inetpub\history
Sicherheitsnetz: Die IIS Konfiguration wird automatisch bei Änderungen gesichert. Ermöglicht den „rollback" zu einer früheren funktionierenden Konfiguration falls Fehler bei Einstellungen gemacht wurden.
C:\inetpub\logs
Ordner für IIS Log-Dateien aller Art, u.a. Web Zugriff- Log-Dateien und Fehlerlogs
C:\inetpub\temp
Zwischenspeicher-Verzeichnis u.a. um komprimierte Web-Dateien vorzuhalten oder für bereits kompilierte ASP.NET Dateien
C:\inetpub\wwwroot
Beherbergt das Verzeichnis für die IIS7 Default Web Seite.
Anm.: Standardmäßig wird der Inetpub Ordner auf der Systempartition installiert. Aus Sicherheitsgründen mag es evtl. Sinn machen diesen Ordner zu Verschieben siehe hierzu: IIS7: Moving the INETPUB directory to a different drive
Dienstname
Prozessname
Application Host Helper Service (AppHostSvc)
svchost.exe -k apphost
(C:\Windows\system32\)
Verantwortlich u.a. für automatische Konfigurationssicherung. App -Pool -Konto -Mapping. (-> C:\inetpub\history)
Sinnvoller Dienst.
IIS Admin Services
inetinfo.exe
(C:\Windows\system32\inetsrv\)
Für Kompatibilität: Bestandteil der „IIS6 Management Kompatibility" Features. Verantwortlich für das schreiben in das „alte" IIS6 Konfig-System „metabase.xml". Nur erforderlich wenn der Windows SMTP Dienst oder der „alte" FTP-Dienst betrieben wird (also vor FTP7.5).
Web Management Service (WMSVC)
wmsvc.exe
Ermöglicht die remote Verwaltung des IIS7 (via https). Nicht gestartet bei Default.
Windows Process Activation Service (WAS)
svchost.exe -k iissvcs
Verwaltet Anwendungs-Pool Konfiguration und Web-Arbeitsprozesse (w3wp.exe) und startet diese ggf. (Prozess Aktivierung). Dieser Service ist für den IIS unerlässlich! Benötigt auch für WCF Anwendungen.
World Wide Web Publishing Service (W3SVC)
Konfiguriert und updated den HTTP.sys. Informiert den WAS wenn eine http Anfrage eintrifft. Sammelt Performance Counter für Websites.Dieser Service ist für den IIS unerlässlich!
Die unten aufgeführten Benutzerkonten benötigen Rechte auf die Ordner mit Website Inhalten siehe hierzu Secure Content in IIS Through File System ACLs
Name
Typ
Bedeutung | Verwengungszweck
IUSR
Siehe Understanding Built-In User and Group Accounts in IIS 7
Benutzer
Der IIS greift standardmäßig unter diesen Benutzerkontext für anonyme Website Besucher auf html Dateien zu.
IIS_IUSRS
Gruppe
Webseiten verrichten ihre Arbeiten auf dem System in w3wp.exe Prozessen und sind, da i.d.Regel mehrere w3wp.exe's, voneinander isoliert (Prozessisolation).
Die w3wp.exe Prozesse können mit verschiedenen Benutzern betrieben werden um die Isolation der Seiten durch unterschiedliche Benutzerrechte weiter zu erhöhen (z.B. durch unterschiedliche Rechte für w3wp.exeUser1 auf Verzeichnis X zu w3wp.exeUser2 auf Verzeichnis Y ).
Benutzer welche dieser Gruppe zugeteilt sind haben die notwendigen Rechte auf Dateien und Systemressourcen um für den IIS als Anwendungs-Pool Identität (und damit w3wp.exe User) zu fungieren.
ApplicationPoolIdentity z.B. "IIS APPPOOL\DefaultAppPool"
Mehr dazu unter Application Pool Identities
Neuer Benutzeraccount , eingeführt (für IIS7.x) ab SP2 für Windows Vista und Windows Server 2008.
Ab diesen SP Stand können Application Pools je unter einer eigenen quasi dynamisch für ihn erzeugten Identität laufen. Vergibt man Zugriffsrechte auf Ordner pro Application Pool Identität, erreicht man eine einfache Isolation der Application Pools untereinander und kann somit Websites voneinander sicher abgrenzen.
Ist automatisch Mitglied in der IIS_IUSRS Gruppe.
Sollte man sich ansehen grade wenn man Isolation von mehreren Websiten auf ein und demselben System sicherstellen muss (z.B. in Hosting Szenarien bzw. Betreiben von Websites von Dritten)
Start -> Eingabe von „inetmgr" öffnet die IIS Verwaltungskonsole. Wir wählen die Default Web Site aus und gelangen über einen rechten Mouseklick + Explore in den für die Website konfigurierten Inhalts-Ordner. Wir tauschen die vorhandenen Dateien gegen eine Beispiel Site bestehend aus statischen Inhalten (Html, Bilder, Stylesheet u.ä):
Die Beispielseite finden Sie hier zum download.
Zum Anzeigen der Seite im Browser wählen wir die Option „Browse" vom Action-Menü:
Der Internet Explorer startet und wir bekommen wahrscheinlich folgende Fehlermeldung:
Grund für diese Fehlermeldung ist:
Der Besucher hat ein Verzeichnis angesurft (siehe URL http://localhost/), daher wird versucht dem Besucher eine Start Seite (z.b. index.htm) zurückzuspielen. Dazu hat der IIS eine Liste an Default Dokumenten (aka Webserver directory index), die definiert welche Dateien einer Seite als mögliche Startseiten in Betracht kommen. Findet der IIS im Verzeichnis keine Datei welche in der Liste aufgeführt wird versucht er das Verzeichnis als Ganzes aufzulisten, da dies aus Sicherheitsgründen standardmäßig untersagt ist bekommen wir die Fehlermeldung 403 Forbidden.
Abhilfe: Wir teilen dem IIS mit dass er die Seite start.html in die Default Document Liste aufnehmen soll:
Default Web Site auswählen -> Doppelklick auf Default Document -> Add -> start.html
Anm.: Dieser Eintrag wird in eine lokale (also im Ordner der Website) web.config Datei geschrieben, d.h. man hätte auch die Einstellung direkt mit einem Texteditor machen können. Das ist kein absonderlicher Weg und dazu ist kein Neustart der Website notwendig - sondernd der IIS reagiert automatisch Änderungen in der web.config Datei. Warum?: Damit haben Entwickler welche z.B. nur Dateien per FTP hochladen können (und keinen anderen Zugang zu Verwaltungstools haben) die Möglichkeit dem Webserver Einstellungen für die eigene Website selbst zu regeln.
Greifen wir nun auf unsere Website mit http://localhost/ zu, erscheint folgende gewünschte Ansicht:
Auf einem IIS lassen sich natürlich mehrere Websites anlegen. Die Frage „Wieviele?" läßt sich nicht generell beantworten, da dies davon abhängig ist wie stark die Websites den Server beanspruchen. Soviel sei jedoch gesagt, bei Internet Service Providern können das schon mal hunderte bis wenige tausende sein.
Es gibt 3 Parameter welche eine IIS-Website eindeutig bestimmen: Die IP Adresse, den Port und Host Namen. Das Triplet IP:Port:Hostname wird als Binding bezeichnet:
Binding Parameter
Beispiele
Bedeutung
IP Adresse
All Unassigned oder * Alle auf dem Server vohandenen IPs
192.168.2.1 IPv4 Adresse
2a01:110:8:f001:200:5efe:65.53.236.86 Ipv6 Adresse
Die IP ist quasi die ‚Telefonnummer' des Servers, davon kann ein Server mehrere haben. Einzelne Websites können auf eine, mehrere oder alle IP Adressen ‚hören'. Egal ob Ipv4 oder Ipv6.
Port
80 Standardport für http
443 Standardport für https
Oder andere
Die ‚Durchwahlnummer'
I.d. Regel würde man im Browser den Port mit bei der URL angeben z.B. http://www.microsoft.com:80 macht kein Mensch - außer wenn kein Standardport verwendet wird (z.B. AdministrationsSite welche nicht für jedermann gleich sichtbar sein soll)
Host Name
www.microsoft.com Fully Qualified Domain Name
bfrank7 Host Name
„Kann ich bitte den Klaus sprechen?":
Beim Aufruf von http://www.microsoft.com im Browser wird in einem Teils des Nachrichtenkopfes der http Anfrage dem sog. Host Header mit dem String „www.microsoft.com" geschrieben. Der IIS wertet diesen Header aus leitet die Anfrage an die entsprechende Website weiter. D.h diverse Websites können dieselbe IP haben müssen aber unterschiedliche Hostnamen haben. Als Host Header funktionieren FQDN's (Internet). Im Intranet finden auch Host | Maschine-Namen Verwendung.
Vorsicht: Host Namen lassen sich nur mit Einschränkung für https verwenden. Siehe dazu: SSL certificates on Sites with Host Headers
Bei der Erstellung von mehreren Websites auf einem IIS ist darauf zu achten, daß die Bindings sich voneinander unterscheiden. Ansonsten läßt der IIS die Website erst gar nicht starten, z.B.:
Mögliche Konstellation von mehreren Websites auf einem IIS:
Konstellation
Beispielszenarien
Gleiche IP, gleicher Port und unterschiedlicher Hostname
Häufig anzutreffen auf Internet Webservern mit einer IP auf dem mehrere unterschiedliche Domains gehostet sind, welche alle über den http Standardport angesprochen werden sollen.
Gleiche IP, unterschiedlicher Port und gleicher (oder kein) Hostname
Seltener anzutreffen, gut zum mal schnell testen. Die Ports müssen explizit in der URL im Browser angegeben werden z.B. http://www.xyz.de:8080 und http auf nicht Standardports werden ggf. von Firewalls blockiert bzw. müssen explizit erlaubt weren.
Unterschiedliche IP, gleicher Port, und gleicher (oder kein) Hostname
Z.B. Wenn mehrere Websites auf einem Server via verschlüsseltem https erreichbar sein müssen (z.B. mehrere Internet shops auf einem Server)
Anm.: Bei Verwendung von https machen Hostnamen nur im Ausnahmefall Sinn. Siehe dazu: SSL certificates on Sites with Host Headers
Wir erstellen nun eine 2te Website die sich zur 1sten bei im Port (80 vs. 8080) unterscheidet. Default Web Site auswählen -> rechter Mouseklick auf Sites -> Add Web Site -> Folgende Einstellungen:
Site name: myothersite
Physical path: c:\webs\myothersite
Port: 8080
Die neu erstellte myothersite bekommt die ID 2 zugewiesen und ist bereits gestartet. Man beachte, daß als Website Verzeichnis ein neu angelegter Ordner (c:\webs\myothersite) angegeben worden ist.
Dieser Ordner wird mit Inhalten gefüllt (Beispiesite download hier):
Und bekommt abschließend noch die für den IIS notwendigen Benutzerrechte:
Jeweils Read & Execute für den Benutzer IUSR und die Gruppe IIS_IUSRS auf den Ordner mit den Web-Inhalten:
Ein Aufruf von http://localhost:8080/im lokalen Internet Explorer liefert:
Damit haben wir erstmal was es braucht um mehrere anonyme Websites auf einer IIS Installation einzurichten. Weitere Einstellungen des IIS gibt es in nachfolgenden Einträgen.
Wie sich der folgenden Tabelle entnehmen lässt gibt es den IIS schon geraume Zeit:
Nach NT4 wurden die IIS Versionen an das OS gekoppelt, d.h. höhere Versionen des IIS bekomme ich nur mit Installation einer aktuelleren Version von Windows. Einzelne Installer des IIS für frühere Betriebsystemversionen stehen nicht zur Verfügung. Beim Upgrade eines OS auf eine hörere Version wird auch der IIS mit upgegradet.
Aktuell sind die Versionen 7.x welche es sowohl für Client als auch Server Betriebsysteme gibt, der Vorteil: Entwickler haben keinen Versions- und (vernachlässigbaren) Feature-Bruch mehr zwischen den Entwicklungs- und Betriebs-Webserver mehr.
Die Installation von IIS7.x auf dem Client OS unterscheidet sich nur geringfügig von der Installation des IIS7.x auf Windows Server 2008 (R2).
Während man beim Client OS den IIS7.x über die Option Windows Features installiert,
Bekommt man beim Server OS den IIS7.x über den Server Manager auf das System. Beim Server OS lassen sich die Internet Informationsdienste einfach durch Auswahl der Webserver Rolle installieren.
Das Setup ist in beiden Fällen deutlich granularer als im Vergleich zu früheren Versionen des IIS, so hat der IIS7 (Windows Server 2008) mehr als 40 auswählbare Sub-Features (bei IIS6 waren es < 20).
Kontrolle ist gut, auch in punkto Sicherheit ist weniger installierte Komponenten mehr, aber…
"…welche Standard Rollendienste für den IIS brauch ich denn?"
It depends, deswegen der Tipp für die, die es genau wissen wollen|müssen: Eine Beschreibung der einzelnen Features werden im Installations Dialog angezeigt, bzw. können über die eingebaute Hilfe abgefragt werden:
Ebenfalls muss man keine Angst haben abhängige Komponenten zu vergessen – das Setup ist so schlau und zieht die Abhängigkeiten automatisch mit.
„Was oder welche Serverrollendienste sollte ich also bei einer Standardinstallation auswählen? Hier meine Auswahl in Anlehnung an folgenden link“:
Weitere Infos und beschreibungen zu den Einzelnen Features finden sich hier
Wer keine Lust hat zu klicken hier die Befehlszeilenvariante:
start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-Security;IIS-BasicAuthentication;IIS-URLAuthorization;IIS-IPSecurity;IIS-RequestFiltering;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn
Wichtig: Kein Stress wenn man was vergessen hat. Es lassen sich jederzeit Features im Server Manager nachträglich hinzufügen oder entfernen.
Weiterer Vorteil von Windows Server 2008: Die für die IIS installation notwendigen Dateien sind bereits bei der Installation des OS mit auf dem System abgelegt worden, d.h. das Installieren des IIS oder aktivieren von Sub-Features braucht keine Installations DVD.
Ohne GUI, für unattended Setups, nützlich für konsistente Massen-Installationen -Hier die Befehlszeilen Alternativen:
Tool
OS Variante / Edition
pkgmgr.exe
Windows Vista, Windows 7, Windows Server 2008 (R2)
Windows Package Manager
Cmd line Werkzeug zum Installieren,Enfernen und Updaten von Windows Paketen. Seit Vista wurde auf ein Image basiertes Setup umgestellt in dem Funktionalitäten in Komponenten paketiert wurden.Sehr mächtig siehe Package Manager Technical Reference
Beispiele:
Installing IIS 7.0 from the Command Line
servermanagercmd.exe†)
†) The ServerManagerCmd.exe command-line tool has been deprecated in Windows Server® 2008 R2.
Windows Server 2008 (R2†))
Nicht Server Core
Command line Variante des Server-Manager unter Windows Server® 2008. Wird eingestampft daher nicht mehr verwenden -> die Powershell übernimmt die Funktionalitäten – s.u.
Beispiele: Install Typical IIS Workloads
Powershell 2.0 mit den Cmdlets:
Add-WindowsFeature,
Get-WindowsFeature,
Remove-WindowsFeature
Windows Server 2008 R2
Windows PowerShell-Cmdlets für den Server-Manager
Ersatz für servermanagercmd.exe
Commandlets müssen vor der Verwendung über Befehl:
import-module servermanager
importiert werden.
Siehe: Server-Manager-Befehle (Übersicht)
Am einfachsten mittels Aufruf der Default-Seite im lokalen Browser mit http://localhost , das Ergebnis sollte so aussehen:
Die IIS Verwaltungskonsole basierend auf der Microsoft Management Console (MMC) erreicht man entweder über Start->Administrative Tools->Internet Information Services (IIS) Manager:
Oder direkt über Eingabe von inetmgr im Suchfeld bei Start. Ein erster Blick auf die Console lässt erahnen dass es zahlreiche Konfigurationsmöglichkeiten für den IIS gibt:
Der IIS ist so konzipiert dass er alle Konfigurationsänderungen sofort anwendet, d.h. in der Regel kein Durchstarten der Webdienste notwendig ist. Für diejenigen, die dennoch die den IIS manuell durchstarten möchten z.B. gerade wenn man am Anfang viele Dinge durchspielt ist iisreset das wichtigste Kommando:
C:\Users\Administrator>iisreset
Attempting stop...
Internet services successfully stopped
Attempting start...
Internet services successfully restartedarted
1. Der Microsoft Baseline Security Analyzer (MBSA)
Mit dem MBSA Version 2.1 (Stand 11.06.2010) Tool läßt sich einfach der Sicherheitsstatus des Servers auch nach IIS und SQL Gesichtspunkten hin überprüfen. Den MBSA gibt’s als separaten Download.
Ein Scan Ergebnis sieht etwa so oder ähnlich aus:
Umfassender als der BPA (s.u.) so werden u.a. Dinge überprüft wie z.B. ob die interne Firewall verwendet wird, Ablaufenden Kennwörter verwendet werden und wie Berechtigungen auf wichtige SQL Server Verzeichnisse gesetzt sind.
2. Der Best Practice Analyzer (aka BPA) ist im Server Manager ab Windows Server 2008 R2 zu finden.
Anhand von Regeln kann man sich die Konfiguration von installierten Rollen (auch des IIS) überprüfen lassen. Geprüft wird auf Sicherheit und Performanz. Derzeit gibt es noch nicht allzuviel was geprüft wird -schaden kanns aber auch nicht:
„Das wichtigste zum Schluss oder wie geht es weiter?“
Der Web Platform Installer (kurz WebPI) hilft mir u.a. Web-Anwendungen in wenigen Schritten einfach zu installieren (siehe blogpost).
Und nicht nur das sondern:
Kurz: WebPI: Spart Zeit und Nerven.
Das kostenlose web-basiertes Konfigurationstool (aka “Control Panel”) WebsitePanel (siehe auch Blogeintrag “Kostenloses – Open Source Control Panel für Windows”) lässt sich jetzt einfach mit dem Web Platform Installer installieren.
Das dürfte deutlich Zeit sparen und etwaige Setupprobleme umgehen.
Kurios aber vielleicht mal nützlich:
Mein Windows 7 schickt in TCP Paketen im TCP Timestamp Feld (TSval) die Zeit seit dem letzten OS-Boot in hunterdstel Sekunden:
d.h. mein letzter Reboot war ca. 1066 sekunden oder 17,8 Minuten her.
TCP timestamps (siehe RFC 1323) werden dazu verwendet die Laufzeiten von Paketen zwischen Sender und Empfänger zu ermitteln. Im sog. TSval Feld schickt der Sender einen 4-byte langen Wert – dieser sollte laut RFC “…least approximately proportional to real time…” sein. Mein Win7 nimmt einfacherhalber gleich die Zeit welche seit dem Boot vergangen ist.
My personal link list regarding "php on windows":
Install the Microsoft Web Platform for PHP
How to use – install PHP with MS webserver IIS
www.iis.net/php
IIS Product Team site over PHP
MS interopability bridges for PHP
Interesting projects to improve MS technology - PHP interop
http://windows.php.net/
Official PHP Community site – get latest bits and extensions from there. Dedicated to supporting PHP on Microsoft Windows.
Microsoft Drivers for PHP for SQL Server
Php devs please use this one – the old one was too slow.
PHP on Windows Training Kit (March 2010)
Demo, Hands on Labs Content (going GEOspatial with SQL Server, Reporting Services, Troubleshooting,…)
· TechNet Virtual Lab: PHP Sessions on IIS
· TechNet Virtual Lab: Installing ASP, ASP.NET and PHP/FastCGI Applications on IIS 7
Try it out – pay & install nothing!
Get your own virtual test machine – training – for free!
Free SQL Server Reporting Services SDK for
Haven’t tried it out – but looks good.
Eventually:Expression Web2 -> PHP-> http://expression.microsoft.com/en-us/library/cc295181.aspxhttp://code.msdn.microsoft.com/Project/ProjectDirectory.aspx?ProjectSearchText=phphttp://www.codeplex.com/site/search?query=php%20sql&ac=1
Im Hosting Umfeld gibt es ein spezielles Lizenzprogramm: SPLA (Services Provider License Agreement) SPLA gibt Hostern die Möglichkeit Microsoft Software an 3te weiterzuvermieten.
Für die jeweilig genutzte Software (z.B. Windows Server 2008 Web) fallen pro Monat, Nutzer oder/und Processor, Lizenzgebühren an, die über einen unserer SPLA Reseller zu entrichten sind. Die Vorteile liegen klar auf der Hand: Keine großen Software Anschaffungskosten – sondern deutlich geringere Preise - monatlich abgerechnet – Nur zahlen was man/Kunde verwendet hat.
Details über die verbindlichen Lizenzierungsbestimmungen für jedes Produkt sind in den SPURs (Services Provider Use Rights) zu finden. d.h. Am Ende eines Monats melden Sie (Hoster) die erforderlichen Lizenzen an den SPLA Reseller und dieser ist dann für die Rechnungstellung und das Weiterleiten Ihrer monatlichen Reports nach Microsoft Ireland verantwortlich.
In das Tätigkeitsfeld der SPLA Reseller fallen auch Lizenzberatungen.
Welche Produkte und wie diese in SPLA zu reporten sind, ist in der SPUR (Services Provider Use Rights) hinterlegt.
SPLA Collaterals (englisch-sprachig) finden sich unter: http://www.microsoft.com/licensing/licensing-options/spla-program.aspx
Wir haben eine Sicherheitslücke in ASP.NET (1.0 - 4.0)!
Microsoft Security Advisory 2416728: Vulnerability in ASP.NET Could Allow Information Disclosure Friday, Sep 17
“…Note that this vulnerability would not allow an attacker to execute code or to elevate their user rights directly, but it could be used to produce useful information that could be used to try to further compromise the affected system.”
Die Fixes liegen im Microsoft Download Center mit Suchbegriff "MS10-070" (oder werden natürlich über Windows Update ausgeliefert)
Sie,
dann könnten die nachfolgenden 4 Video-Minuten ein paar neue Erkenntnisse bringen:
Wordpress installieren auf YouTube ansehen: Wordpress installieren in unter 10 Minuten!
Weil ich grade danach ein bisschen gesucht habe.
Ich habe eine Video Datei (*.wmv), diese ist zwar mit Ton aber ich möchte ein anderes Audio File darunter legen, z.B. weil ich zwar dasselbe Video aber in eine anderen Sprache möchte oder ein anderer Audio-Codec verwendet werden soll. Welches Tool nehme ich her um Audio und Video zu zusammenzufügen (bzw. aufzusplitten).
Die Windows Media Encoder 9-Reihe (vorsicht nicht mehr supported!) bringt ein nettes kleines Tool mit den “Windows Media Stream Editor”:
und der baut aus unterschiedlichen Video und Audio Quellen eine Ausgabe Datei zusammen (sehr schnell):
Alternative: Expression Encoder erlaubt mir ein Overlay von Audio über ein Video mit Ton – allerdings finde ich das Handling (man muss das Volume des ursprünglichen Audiokanals auf 0 stellen) für den Verwendungszweck nicht ganz so einfach:
Das Logparser Werkzeug kann die Ergebnisse einer Abfrage unter Verwendung einer Vorlagendatei in eine Ausgabedatei schreiben. Dieser Funktionalität lässt sich z.B. verwenden um das Ergebnis einer Web-Log Analyse in eine .html Datei schreiben zu lassen:
logparser -i:w3c "SELECT sc-status As Status, COUNT(*) AS Total FROM c:\temp\logfiles\w3svc11\*.log TO c:\temp\result\StatusCodes.html GROUP BY Status ORDER BY Status ASC" -o:TPL -TPL:".\Samples\TemplateFiles\StatusCodes.tpl"
Als Vorlagendatei verwenden wir ein sog. „Structured Format Template“ (siehe Logparser Hilfe). Die Vorlage definiert einen sich wiederholdenden Bereich (<LPBODY>) in dem die Werte (in „ %xyz%“) aus den Spalten (der Abfrage) geschrieben werden:
<TABLE...
.
<LPBODY>
<TR>
<TD>%Status%</TD>
<TD>%Total%</TD>
</TR>
</LPBODY>
</TABLE>...
Um Logparser Web-Log Analysen später automatisieren zu können (z.B. via den Task Scheduler) bietet sich an die jeweilige Query („SELECT ….“) parameteriesiert in eine Text Datei auszulagern (z.B. .\Samples\TemplateFiles\StatusCodes_mod.sql):
SELECT STRCAT(TO_STRING(sc-status), REPLACE_IF_NOT_NULL(TO_STRING(sc-substatus), STRCAT('.',TO_STRING(sc-substatus)))) AS Status,
COUNT(*) AS Total
FROM %InputLog%
TO %OutputPath%
GROUP BY Status
ORDER BY Status ASC
und so o.ä. aufzurufen:
logparser -i:w3c file:".\Samples\TemplateFiles\StatusCodes_mod.sql?InputLog=c:\temp\logfiles\w3svc11\*.log+OutputPath=c:\temp\result\StatusCodes.html" -o:TPL -TPL:".\Samples\TemplateFiles\StatusCodes.tpl"
Man sammle nun ein paar Web-Log Analyse Queries nach eigenen Bedarf z.B. in der Form:
(.sql für die Query und .tpl für das html snippet)
Schreibe ein Batch Datei welches Queries einzeln aufruft und Ausgabe z.B. in eine default.htm kombiniert. Dieser Batch sollte Eingabeparameter verabeiten wie wo sind die zu analysierenden Logfiles und wohin sollen die Ergebnisse geschrieben werden:
echo on if not exist "C:\Program Files\Log Parser 2.2\" (cd "c:\Program Files (x86)\Log Parser 2.2") else (cd "C:\Program Files\Log Parser 2.2\") rem MonitoringPeriod start /wait LogParser.exe -i:w3c file:%1\MonitoringPeriod.sql?InputLog=%2+OutputPath=%3\100.html -o:TPL -tpl:%1\MonitoringPeriod.tpl . . . type %1\header.html > %3\default.htm for %%f in (%3\*.html) do type %%f >> %3\default.htm type %1\footer.html >> %3\default.htm del %3\*.html Als Ergebnis hier eine simple rudimentäre Web-Log Analyse Beispiel-Seite (demo):
echo on
if not exist "C:\Program Files\Log Parser 2.2\" (cd "c:\Program Files (x86)\Log Parser 2.2") else (cd "C:\Program Files\Log Parser 2.2\")
rem MonitoringPeriod
start /wait LogParser.exe -i:w3c file:%1\MonitoringPeriod.sql?InputLog=%2+OutputPath=%3\100.html -o:TPL -tpl:%1\MonitoringPeriod.tpl
type %1\header.html > %3\default.htm
for %%f in (%3\*.html) do type %%f >> %3\default.htm
type %1\footer.html >> %3\default.htm
del %3\*.html
1. Software Vorraussetzung: Logparser2.2 + Chart Unterstützung (Office Web Components 11) müssen installiert sein.
2. Download des Beispiels von hier oder s.u.
3. Extrahieren der Zip Datei nach z.B. C:\inetpub\analytics\
4. Aufruf von TaskSchedulerBatch.cmd von der Commandline mit den Parametern:
TaskSchedulerBatch.cmd [Where are the .sql and .tpl files folder] [Where are the logs folder + logname] [Where should the output go folder]
Beispiel:
TaskSchedulerBatch.cmd "C:\Users\bfrank\Documents\My Logparser Queries" "c:\temp\logfiles\w3svc11\*.log" "c:\temp\result"
Einfach im Task Scheduler das „Task Scheduler Import (TaskSchedulerBatch).xml” importieren
Benutzernamen ändern und evtl. Pfade korrigieren.
Ich übernehme kein Verantworung für die Verwendung des Codes. Use at your own risk! J
Log analysen können lange dauern brauchen evtl. viel CPU sollten daher nicht auf der Produktivmaschine gemacht werden J
Die Ausgaben sollten evtl. nicht jedermann zur Verfügung gestellt werden. J
Viel Spaß!
Wohl auch eher als Gedankenstütze für mich: Link Liste für interessante “Articles and White Papers” zum IIS7, Windows Server 2008 und mehr.
Der Software Hersteller DotNetPanel hat kürzlich eine DotNetPanel-Codebase Revision unter dem Namen WebsitePanel als Open Source Projekt online gestellt. Bei dem Projekt handelt es sich um web-basiertes Konfigurationstool (aka “Control Panel” andere kommerzielle Vertreter z.B. Plesk oder … ) für Windows Webserver und Webhosting.
Nett weil kostenlos – ein Blick auf WebsitePanel:
http://sourceforge.net/projects/websitepanel http://www.websitepanel.net/
Vorteile: Entwickler, Web-Admins: Ideal zum Verwalten von Kunden- oder Entwicklungs-Server und Webseiten Hoster, Service Provider: Kostenlose, erweiterbare und anpassbare Systemsteuerung als Mehrwert für Windows Hosting Kunden
z.B. zum automatischen 'vorbetanken' von IIS-Webservern:
msiexec /i c:\temp\WebPlatformInstaller_x86.msi /qn /lxv* c:\temp\webpi.log
Anm: Der Installer für WebPI 2.0 hat keine Switches | Optionen | Properties welche man msiexec mitgeben könnte um WebPI-Voreinstellungen (wie z.B. die Auswahl anderer Feeds) schon bei der Installation zu machen.
Icons automatisch z.B. von der command line auf dem Desktop erzeugen ist gar nicht so trivial. mklink ist ideal für Verzeichnisse um dagegen Verknüpfungen zu Programmen zu erstellen bietet sich z.B. die Powershell an.
“CreateIconOnDesktop.ps1:”
$wshShellObject = New-Object -com WScript.Shell $userProfileFolder = (get-childitem env:USERPROFILE).Value $programFilesFolder = (get-childitem env:ProgramFiles).Value $wshShellLink = $wshShellObject.CreateShortcut($userProfileFolder+"\Desktop\MeinLink.lnk") $wshShellLink.TargetPath = $programFilesFolder+"\Internet Explorer\iexplore.exe" $wshShellLink.WindowStyle = 1 $wshShellLink.IconLocation = $programFilesFolder +"\Internet Explorer\iexplore.exe" $wshShellLink.WorkingDirectory = $programFilesFolder + "\Internet Explorer\" $wshShellLink.Save()