bernhard frank’s blog

[bi:frængk] - freimütiges über webhosting auf windows

 

  • Bernhard Frank's Blog

    WebMatrix: Check Compatibility shows exclamation mark and states ASP.NET version Not Available

    • 0 Comments

    asp.net version not available in compatibility check in webmatrix

    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:

    Failed Request tracing shows:

    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)

    Reason and Solution:

    asp.net version not available in compatibility check in webmatrix solution

    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

  • Bernhard Frank's Blog

    Microsoft Cloud links für IT Pros

    • 0 Comments

    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

  • Bernhard Frank's Blog

    Configure Web Deploy Publishing missing in IIS console

    • 1 Comments

    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:

    IIS Manager UI 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:

    configure web deploy publishing

    I did so | prefer installing the “Web Deployment Tool 2.1 for Hosting Servers” using the Web Platform Installer:

    installing web deployment tool 2.1 for hosting servers using WebPI

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 6: Web Work Loads – oder wieso kann mein IIS .html, .jpg, .css,...?

    • 0 Comments

    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.

    servermanager add default iis role

    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.

    Was sind statische Inhalte und wo liegen die im IIS?

    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.

    Was sind dann dynamische Inhalte?

    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.

    Serverseitig(er) versus Browserseitig(er-Code):

    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:

    javascript mime type

    Mime-Type: Oder wo wird festgelegt welche Datei-Endungen als statische Inhalte gelten?

    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

    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:

    mime-type text_html

    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:

    wfetch content-type

    [Download zu wfetch Tool]

    Mime-Types bearbeiten? - Oder 404.3 Fehler bei unbekannten Dateiendungen!

    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:

    svg mime type error 404.3

    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

    add svg mime type

    Ein erneuter Aufruf im Browser erzeugt keinen Fehler und die Vektor Grafik wird korrekt dargestellt:

    variable resistor

    Wo bekomme ich den Mime-Type für ein Dateiformat her?

    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:

    handler mappings

    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:

    static file 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)

    Handler Changed aspnet40

    NewHandlerName="PageHandlerFactory-Integrated-4.0", NewHandlerModules="ManagedPipelineHandler", NewHandlerScriptProcessor="", NewHandlerType="System.Web.UI.PageHandlerFactory"

     

    "start.html"

    Handler Changed static file

    NewHandlerName="StaticFile", NewHandlerModules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"

     

    Zusammenfassung:

    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.

     

    Links:

    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

  • Bernhard Frank's Blog

    How to turn on IPv6 from the cmd line | script.

    • 0 Comments

    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:

    checkIPv6 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:

  • Bernhard Frank's Blog

    IIS7: How to enable webdav for (multiple) a website(s) via script

    • 0 Comments

    Configuring WebDAV requires some steps, e.g.:

    • enabling webdav for a specific site
    • add an webdav authoring rule for a specific user
    • configure WebDAV with Request Filtering (i.e. not to apply rules for webdav traffic)
    • enable / allow windows authentication for this site
    • creating windows accounts and give them NTFS permissions on the physical path where the website content is located.
    • (set dynamic IP restrictions)

    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:
    webdav.cmd output

    The following will be done:

    a user will be created “Default web site”

    default web site user

    permissions will be granted for this user on the web content directory:

    webdav ntfs permissions

    webdav will be enabled in IIS for the “Default web site” and an webdav authoring rule for this user created:

    webdav authoring rule

    additionally windows auth will be enabled on this site:

    windows authentication enabled

    and finally some webdav settings will be set for the site:

    webdav settings

    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 Zwinkerndes Smiley

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 5: FTP – oder wie lade ich Dateien auf meinen Webserver?

    • 12 Comments
    Beste Video-Qualität mit Silverlight Get Microsoft Silverlight

    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.

    Was muss ich tun um FTP auf dem IIS zu ermöglichen?

    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:

    • wie ist der FTP Dienst erreichbar (z.B. IP Adresse)
    • ob die Verbindung ver-oder unverschlüsselt erfolgen soll
    • ob sich ein FTP Benutzer anmelden muss oder ob der Anonymous Benutzer ausreicht.
    • welches Verzeichnis auf dem Webserver soll via FTP erreichbar sein soll
    • welche Zugriffsrechte die Benutzer (Lesen oder/und Schreiben) haben sollen

    3 Szenarien:

    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:

    1. Eine FTP Site zum Publizieren in alle Websites mit einen (oder wenigen) FTP Benutzer-Konto.
    2. Eine FTP Site pro Website mit jeweils unterschiedlichen Anmelde-Informationen (Benutzername, Adresse)
    3. Eine FTP Site mit mehreren FTP Benutzer-Konten + Isolierung, d.h. Benutzer sehen je nach Loginnamen nur ein bestimmtes Verzeichnis.

    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.

    (1) Eine FTP Site für alle Websites mit einem FTP Benutzer-Konto – keine Isolierung.

    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.

     

    (2) Eine FTP Site pro Website - "Per Site FTP Publishing"

    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:

     

    Fazit:

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

     

    (3) Eine FTP Site mit FTP Benutzer-Konten-Isolierung

    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:

    Fazit:

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

     

    Sechs FTP Sicherheits-Tipps:

    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:

    1. Nur Benutzerkonten mit wenigen Rechten für FTP verwenden

    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.

    1. Komplexe Passwörter verwenden

    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.

    1. Verschlüsseltes FTPS verwenden.

    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.

    1. FTP dienst abschalten wenn nicht benötigt

    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.

    1. IP Filtering für FTP aktivieren.

    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.

    1. Selbst weitere Sicherheitsfilter einbauen

    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.

     

    Was steht im Weg? Firewalls & Co. und Limitationen

    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.

     

    FTP Alternativen

    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)

    Dateien, Ordner

    Für große Down- oder Uploads. BITS Server Erweiterung zum IIS muss über den Server Manager installiert werden. Wenig dokumentiert – selten anzutreffen.

     

    Links:

  • Bernhard Frank's Blog

    How to stop all running IIS sites from the command line using appcmd with pipe (single line)

    • 0 Comments

    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.

  • Bernhard Frank's Blog

    Carshop Toolkit - Silverlight Applikation auf IIS deployen

    • 1 Comments

    der Kollege Christian Klasen stellt auf seinem Blog eine Beispiel Silverlight Applikation “CarShop” vor:

    image

    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: 

    • CarShop.2.081018.zip nach c:\work\CarShop entpacken
    • CarShop.Assets.2.081018.zip nach c:\work\CarShop entpacken (merge) um die Videos in die Solution zu bekommen.
         (->viele Dateien - kann etwas dauern.)
    • CarShop.sln mit Visual Studio öffnen (evtl. nach VS 2010 konvertieren.)
    • Photos ordner in die Lösung inkludieren:
      VS -> Solution Explorer-> "Show All Files" Ansicht aktivieren (Icon oben)
      CarShop.Web -> ClientBin -> Assets -> Images -> rechter Mouseklick auf Photos -> "Include in Project"
    • Videos ordner in die Lösung inkludieren:
      CarShop.Web -> ClientBin -> Assets -> Images -> rechter Mouseklick auf Videos -> "Include in Project"
    • DeepZoom Ordner exkludieren - dauert sonst zulange.
    • Builden - etwaige Build errors fixen:
      alt: new MouseWheelHelper(this).Moved += delegate(object sender, MouseWheelEventArgs e)
      neu: neu: new MouseWheelHelper(this).Moved += delegate(object sender, CarShop.Logic.MouseWheelEventArgs e)
      nächster build - sollte erfolgreich sein.
    • Rechter Mouseklick auf CarShop.Web -> Build Deployment Package
      Im Output Window von VS sollte nach erfolgreichen packaging in etwa so was stehen:
      ...
      Package "CarShop.Web.zip" is successfully created as single file at the following location:
      file:///C:/work/CarShop/CarShop.Web/obj/Debug/Package
    • Eine CMD mit elevated priviledges starten und in obiges VZ wechseln und das deploy cmd file starten (ggf. das Web Deployment Tool für den IIS via Web Platform Installer installieren):

    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.

    • Jetzt noch die DeepZoom Dateien in den Web-Ordner kopieren:
      Ordner DeepZoom aus C:\work\CarShop\CarShop.Web\ClientBin\Assets in den Ordner z.B: C:\inetpub\wwwroot\CarShop.Web_deploy\ClientBin\Assets kopieren.

    Damit sollte eigentlich alles funktionieren.

    Viel Spass

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 4: Authentifizierung und Autorisierung mit dem IIS

    • 7 Comments

    Warum ist das wichtig?

    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.

    Nicht authentifiziert - oder wer ist die Anonymous User Identity (IUSR)?

    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:

     

    Authentifizierung oder "Wer bin ich?"

    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

    AD + lokale

    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)

    AD 

    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 )

    Wie stelle ich nun Authentifizierung ein?

    Um die Auswahl der richtigen Authentifizierungs-Methode(n) etwas zu erleichtern hier mal 2 Beispiele um den Benutzernamen des Website Besuchers zu erfahren.

    1. Basic Authentication einrichten

    Meiner Meinung nach die einfachste Variante eine Benutzerauthentifizierung einzurichten und mit https Verschlüsselung auch recht sicher.

    • Erstelle einen Ordner in der myothersite "authentication\basic"
    • Wähle den Ordner aus und klicke auf Authentication.
    • Deaktiviere Anonymous- und aktiviere die Basic Authentication:

    Den Sicherheitshinweis nehmen wir ernst und aktiveren noch die SSL Verschlüsselung.

    • Lege ein neues Binding für den Https Port 443 für die myothersite an.
    • Wähle als Serverzertifikat das localhost Testzertifikat

    (Praktischerweise hat IIS 7 sich schon selbst ein Zertifikat für Testzwecke erzeugt):

    • Erzwinge SSL für den Pfad in dem authentifiziert wird:

    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.

     

    1. Windows Authentication einrichten

    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:

    • Erstelle einen Unterordner "windows" im Ordner "authentication"
    • Wähle diesen aus und aktiviere unter Authentication nur die Windows Authentication:

    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.

    Autorisierung oder "Was darf ich?"

    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:

    1. Autorisierung mittels Ordner & Datei-Rechte

    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

    • Erstelle lokale Benutzergruppe "myothersite authenticated visitors" und füge erlaubte Benutzer hinzu.
    • Erstelle Ordner "authenticated-visitors" in myothersite.
    • Aktiviere Windows Authentication.
    • Rechter Mousklick auf "authenticated-visitors" -> Edit Permissions -> Entfernen der Anonymous User Identity und hinzufügen der "myothersite authenticated visitors" Gruppe:

    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

    • der IIS Log Datei:

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

    • dem Failed Request Tracing Log:

    tun.

     

    1. Autorisierung mittels URL

    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

    • Erstelle einen Ordner "secure" in myothersite.
    • Wähle eine Authentifizierungs-Methode für "secure" z.B. Windows Authentication
    • In Authorization Rules:
      • "Allow All Users" löschen.
      • Allow Regel für Gruppe "myothersite authenticated visitors" anlegen.

    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:

     

    Links:

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 3: IIS Arbeitsweise verstehen: Anwendungspool, Arbeitsprozess und Co.

    • 0 Comments

    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:

    • classic: IIS 6 kompatibel
    • integrated: IIS7 Architektur

    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:

    • Haben nur die minimal notwendigen Rechte
    • Werden vom IIS automatisch angelegt (d.h. kein Eingeben von Passwörtern: kein Vergessen &Verfallen)
    • Ich kann NTFS Rechte pro ApplicationPoolIdentity vergeben z.B. um Zugriff auf Web-Verzeichnis einzuschränken – Isolation.

    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:

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 2: Erste Schritte nach der Installation

    • 7 Comments

    Was sind die wichtigsten Verzeichnisse und Dateien für den IIS, welche Benutzerkonten werden angelegt bzw. verwendet und wie heißen die IIS-Dienste welche bei der Installation des IIS7 erzeugt werden:

    Wichtige Verzeichnisse und Dateien.

    C:\Windows\System32\inetsrv

    Hauptverzeichnis des IIS beeinhaltet z.B. die Dateien zur IIS Konfiguration, Verwaltung (z.B.MMC), IIS-Module, Executables für die IIS Dienste.

     

    C:\Windows\System32\inetsrv\config\applicationHost.config

    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

     

    Web.config

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

    IIS7: feature delegation sample - caching settings are stored in local web.config file

     

    Inetpub-Verzeichnis

    Das C:\inetpub Verzeichnis ist das Lese- und Schreibverzeichnis des IIS. Es enthält folgende Unterverzeichnisse:

     

    Ordner

    Beschreibung

    IIS7: inetpub folder extended

    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

     

    Welche Dienste bringt die IIS Installation?

    Dienstname

    Prozessname

    Beschreibung

    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

    (C:\Windows\system32\inetsrv\)

    Ermöglicht die remote Verwaltung des IIS7 (via https). Nicht gestartet bei Default.

    Windows Process Activation Service (WAS)

    svchost.exe -k iissvcs

    (C:\Windows\system32\)

    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)

    svchost.exe -k iissvcs

    (C:\Windows\system32\)

    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!

     

    Wichtige IIS7 Benutzer Konten & Gruppen:

    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

     Siehe Understanding Built-In User and Group Accounts in IIS 7

    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

    Benutzer

    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)

     

    Jetzt geht’s los – „Die erste Webseite.“

    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.ä):

    IIS7: Exchanging the contents of the default website 

    Die Beispielseite finden Sie hier zum download.

    Zum Anzeigen der Seite im Browser wählen wir die Option „Browse" vom Action-Menü:

    IIS7: browse web site

    Der Internet Explorer startet und wir bekommen wahrscheinlich folgende Fehlermeldung:

    403.13 error when no default document configured and directory browsing is disabled

    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

     IIS7: configuring a default document (aka directory index)

    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:

    sample site 1

     

    „Noch eine Website anlegen!“

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

      IIS7: Error message cannot start website

     

    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

     IIS7: add a 2nd web site

    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):

     IIS7: exchange content for second website 

    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:

     IIS7: IUSR Permissions for a website folder

    Ein Aufruf von http://localhost:8080/im lokalen Internet Explorer liefert:

     sample site 2

    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.

  • Bernhard Frank's Blog

    IIS für Einsteiger Teil 1: Installation

    • 0 Comments

    Generelles zum IIS 7.x (Setup)

    Wie sich der folgenden Tabelle entnehmen lässt gibt es den IIS schon geraume Zeit:

    OS IIS Version by http server header Jahr
    Windows NT 4 Server Microsoft-IIS/4.0 1998 (als Teil des NT 4 Option Packs)
    Windows Server 2000 Microsoft-IIS/5.0 2000
    Windows XP Microsoft-IIS/5.1 2001
    Windows Server 2003 Microsoft-IIS/6.0 2003
    Windows Vista Microsoft-IIS/7.0 2006
    Windows Server 2008 Microsoft-IIS/7.0 2008
    Windows 7 Microsoft-IIS/7.5 2009
    Windows Server 2008 R2 Microsoft-IIS/7.5 2009

    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,

    Turn Windows features on or off dialog

    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.

    Windows Server 2008 Server Manager window

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

    Windows Server 2008: Select Role Services dialogKontrolle 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:

    Windows Server 2008: Select Role Services help

    Ebenfalls muss man keine Angst haben abhängige Komponenten zu vergessen – das Setup ist so schlau und zieht die Abhängigkeiten automatisch mit.

     

    Ein "Serviervorschlag"

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

     

    Die weitere IIS7.x Installation in Bildern:

    Windows Server 2008: Select Role Services dialogWindows Server 2008: Confirm Installation Selections dialogWindows Server 2008: Progress dialog

    Windows Server 2008: Confirm Installation Results dialog

    Windows Server 2008 Server Manager - selected Web Server Role window

    IIS installieren für die Befehlszeilen-Liebhaber

    Ohne GUI, für unattended Setups, nützlich für konsistente Massen-Installationen -Hier die Befehlszeilen Alternativen:

    Tool

    OS Variante / Edition

    Beschreibung

    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)

     

    Installation testen:

    Am einfachsten mittels Aufruf der Default-Seite im lokalen Browser mit http://localhost , das Ergebnis sollte so aussehen:

    IIS 7 Default Document

     

    Ein erster Blick auf die IIS-Verwaltungskonsole (inetmgr) und Starten | Stoppen der Website

    Die IIS Verwaltungskonsole basierend auf der Microsoft Management Console (MMC) erreicht man entweder über Start->Administrative Tools->Internet Information Services (IIS) Manager:

    Icon 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:

    Internet Information Services 7 (IIS) Management Console (aka inetmgr)

    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

    2x Sanity Check?! oder Nichts vergessen?

    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:

    MBSA Version 2.1 Scan Result 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:

    Windows Server 2008 R2: Best Practice Analyzer (aka BPA) in Server Manager showing Scan Result

     

     Web Platform Installer (aka WebPI) IconWeb Platform Installer - der „IIS Paketmanager“

    „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:

    • informiert mich über Neuerungen und interessante Apps für den IIS.
    • hilft mir Abhängigkeiten von Webanwendungen und Frameworks zu erkennen und installiert diese.
    • ist quasi „Windows Update“ für manche IIS Erweiterungen.

    Web Platform Installer (aka WebPI) Application

    Kurz: WebPI: Spart Zeit und Nerven.

  • Bernhard Frank's Blog

    WebsitePanel Installation mit Web Platform Installer

    • 0 Comments

    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.

    websitepanel

    Das dürfte deutlich Zeit sparen und etwaige Setupprobleme umgehen.

  • Bernhard Frank's Blog

    Betriebszeit (uptime) aus TCP Paket ermitteln?

    • 0 Comments

    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:

    TCP Timestamp TSval

    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.

  • Bernhard Frank's Blog

    "PHP on Windows" - MS Platform for PHP dudes.

    • 0 Comments

    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.aspx
    http://code.msdn.microsoft.com/Project/ProjectDirectory.aspx?ProjectSearchText=php
    http://www.codeplex.com/site/search?query=php%20sql&ac=1

  • Bernhard Frank's Blog

    Windows Server 2008 mit IIS 7.x zu teuer? Sind Sie Hoster und kennen Sie SPLA?

    • 0 Comments

    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

  • Bernhard Frank's Blog

    Wichtiger Sicherheitshinweis: "Vulnerability in ASP.NET Could Allow Information Disclosure" (2416728)

    • 0 Comments

    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)

  • Bernhard Frank's Blog

    Von 0 auf Wordpress in unter 10 Minuten

    • 0 Comments

    Sie,

    • haben sich schon mal gefragt warum das Einrichten von Web Server Software so mühsam ist,
    • möchten einfach nur mal schnell einen Blog verwenden ohne sich lange mit dem Setup rumschlagen zu müssen,
    • denken sowieso, dass PHP und Windows nicht zusammenpasst,

    dann könnten die nachfolgenden 4 Video-Minuten ein paar neue Erkenntnisse bringen:

    Wordpress installieren auf YouTube ansehen: Wordpress installieren in unter 10 Minuten!

  • Bernhard Frank's Blog

    Windows Media Stream Editor: Audio und Video aus unterschiedlichen Dateien zu einem Stream encodieren.

    • 0 Comments

    Weil ich grade danach ein bisschen gesucht habe.

    Szenario:

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

    Lösung:

    Die Windows Media Encoder 9-Reihe (vorsicht nicht mehr supported!) bringt ein nettes kleines Tool mit den “Windows Media Stream Editor”:

    Windows Media Stream Editor is part of the Windows Media Encoder 9 Series

    und der baut aus unterschiedlichen Video und Audio Quellen eine Ausgabe Datei zusammen (sehr schnell):

    Windows Media Stream Editor - to combine audio and video from different files

     

    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:

    Expression Encoder allows audio or sound overlay over video media content

  • Bernhard Frank's Blog

    Logparser: Web-Log Analyse in einer Website anzeigen.

    • 0 Comments

    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"

    Logparser Sample Output using 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:

    logparser - statuscodes

    (.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):

     Logparser Sample Website showing simple web log analytics

    Wie kriege ich obige Beispiel-Seite zum Laufen?

    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"

    Task Scheduler: yes!

    Einfach im Task Scheduler das „Task Scheduler Import (TaskSchedulerBatch).xml” importieren

    Benutzernamen ändern und evtl. Pfade korrigieren.

    Wichtige Anmerkungen:

    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ß!

  • Bernhard Frank's Blog

    Link Liste zu Web Application Platform White Paper

    • 0 Comments

    IIS7: Web Application Platform Whitepaper

    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.

  • Bernhard Frank's Blog

    Kostenloses – Open Source Control Panel für Windows

    • 0 Comments

    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:

    Screenshot WebsitePanel ein web-basiertes Konfigurationstool für Webserver und Webhosting

    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

  • Bernhard Frank's Blog

    Unattended Installation des Web Platform Installers (WebPI)

    • 0 Comments

    z.B. zum automatischen 'vorbetanken' von IIS-Webservern:

    1. Download des Web Platform Installer 2.0 von:
      http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=d87a71e4-00bd-4204-8f25-f245feb0c3ad
      in der entsprechenden Architektur.
    2. Unattended Installation des WebPI von der CMD line mit ausführlicher Log-Datei („/lxv* …“):

    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.

  • Bernhard Frank's Blog

    Shortcuts oder Verknüpfungen automatisch via Powershell-Script erzeugen

    • 0 Comments

    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()
    1. Erzeugt ein Shell Object (COM)
    2. Ermittelt Desktop Pfad des Benutzers und den Programm Ordner aus den Environment Variablen
    3. Setzt Icon Eigenschaften und erzeugt das Icon “MeinLink” auf dem Desktop
Page 1 of 2 (49 items) 12