Archive for the 'Windows Server' Category

Sign In As A Different User – Benutzer wechseln für IIS basierte Sites

Meine Kollege Karten Kleinschmidt und ich haben beim Kunden ein interessante kleine Aufgabe bekommen, in der es darum ging, den verwendeten Benutzer (Domainen Benutzer) an einer bestehenden Webseite zu wechseln.

In einem Unternehmensnetzwerk mit integrierter Anmeldung an der Domain muss der User im Normalfall keine weiteren Anmeldeinformationen eingeben, um auf Websites zuzugreifen. Anwendungen wie SharePoint, CRM und viele Eigenentwicklungen nutzen diese Funktion natürlich für Authentifizierung und Autorisierung aus. Es kommt aber immer mal wieder vor, dass der aktuelle Benutzer nicht der “richtige” Benutzer für die aktuelle Aufgabe ist. In vielen Unternehmen haben Benutzer neben dem eigenen Account einen administrativen Benutzer (gk\ms und gk\adm_ms). Ist man am PC mit dem normalen Account angemeldet und möchte nun den administrativen Account verwenden, dann muss man den ganzen Brower mit anderen Credentials starten, sich am PC ummelden oder per Terminal Services auf einem anderen Rechner anmelden. Anwendungen wie SharePoint bieten solche Funktionen Out-Of-The-Box bereits an. Für Anwendungen, welche das nicht können, ist es für den normalen Mitarbeiter im Unternehmen kein leichtes Unterfangen, diese Aufgabe zu lösen.

Karsten (und damit irgendwann auch ich) hat nun die Aufgabe, für eine Website im Lync Umfeld so eine Funktion anzubieten. Eine kurze Recherche (Bing | Google) hat gezeigt, dass Roel van Lisdonk in seinem Blogpost ASP .NET – C# – How to “Sign in as Different User” like in Microsoft SharePoint with Windows Authentication genau das beschreibt. Seine Lösung ist allerdings Page-basierend und ich wollte was allgemeineres. Ich habe dann einfach seine Code als Basis genommen, ein HTTPModule erstellt und das Ergebnis dann auf Codeplex veröffentlicht. Da nicht so viel Eigenleistung drin steckt, war es schnell klar, dass es nur “fair” ist es weiter zu teilen. Hier ist also das erste Glück & Kanja Codeplex Projekt.

http://signinas.codeplex.com – Glück & Kanja Consulting AG – Sign In As A Different User

Das Projekt steckt sicher noch in den Kinderschuhen und kann deutlich erweitert werden, aber dafür gibt es ja Codeplex :-)

Ich hatte übrigens viel “Spaß” mit Codeplex, aber das ist ne andere Geschichte und die Schuld von TFS ;-)

Windows Server 2008 DNS Snap-In – Copy & Paste

dnsManchmal sind es Kleinigkeiten, die mich erfreuen :-) Beim Eintragen eines A-Record über ein W2K8 Server ist mir eben aufgefallen, dass man hier endlich mit Copy & Paste arbeiten kann. Gerade im DNS kann ein Tippfehler echt tödlich sein :-) In den Vorgängerversionen waren die einzelnen Quads abgebildet und der Versuch, etwas in das geteilte Eingabefeld zu kopieren, scheitert. Manchmal in weniger mehr.

Ciao Marco

14-1=0 oder Windows Server 2008 SP2 als Development Workstation

Dirk Primbs hat seine Top 10 Tools auf 14 erweitert, nachdem er meinen Post gelesen hatte. Live Mesh wurde besonders hervorgehoben. Ich nutzte für einige Dev-Aufgaben wie angedeutet ja ein Windows Server 2008. Die Basis Installation wurde überarbeitet und ich starte direkt mit SP2 die Neuinstallation. Jetzt wollte ich die tollen Tools mit dem “tollen” Tool Live Mesh auf meine Maschine holen… aber es wollte sich nicht installieren lassen :-S

image
http://msdn.microsoft.com/en-us/library/aa368304.aspx

Mein Rechnung sieht also so aus:
14 Tools minus 1 Tool macht nicht 13 sondern 0, weil das eine Tool alle transportiert :-S

Ich glaube, ich hatte in der alten Installation UAC abgeschaltet und eventuell deswegen den Fehler nicht bekommen. Im Moment will ich doch mal versuchen mit UAC zu leben und dafür muss man dann kurzfristig folgenden RegKey setzen:

image

Nach der Installation habe ich den Key wieder gelöscht. Ich hoffe ich erlebe nicht noch mehr solcher Überraschungen.

Nach der Installation habe ich mich mal auf den Weg gemacht, den Grund zu finden… aber mehr als das habe ich nicht gefunden:
http://social.msdn.microsoft.com/Forums/en-US/liveframework/thread/d71d367a-7604-4b26-9459-1a8f3dcdf7fc

Ciao Marco

Windows Server 2008 Firewall, IIS7 und FTP mit SSL

Heute ist der Tag der Windows Firewall und NETSH. Nachdem ich unserem Cloud SQL Flügel gemacht hatte, musste ich mich kurz dem FTP des IIS7 annehmen. Wichtig: Der FTP Server, der unter Features hinzugefügt werden kann ist der IIS6 FTP und kann auch auf dem Windows Server 2008 nicht überzeugen. Erst der Download von IIS.NET bringt den “echten” FTP Server auf die neuste MS Serverplattform. Es geht noch immer um den selben und nun geht es darum sicher FTP Daten auszutauschen. FTP im Standard macht da wenig Spaß. Die heruntergeladene Komponente des IIS kann aber mit SSL (TLS) umgehen. Mit Hilfe diese Funktion kann ich mein Login und den Transfer vor Mithörern schützen. Eine Anleitung zum nackten Einrichten gibt es hier:
http://learn.iis.net/page.aspx/263/installing-and-troubleshooting-ftp7/

Jetzt hat man ein FTP auf der Kiste und nun kann man mit gesunden Menschenverstand oder dieser Anleitung die SSL Konfig vornehmen:
http://learn.iis.net/page.aspx/304/using-ftp-over-ssl/

Mit der Firewall hat das leider alles immer noch nicht viel zu tun. Ein Connect auf offenem Port 21 bringt nach der Erfolgreichen Anmeldung folgenden Fehler in FilZilla: “Error: Failed to retrieve directory listing”. Im IIS Manager kann man zwar für Passiv-FTP eine Portrange angeben, allerdings ist die Windows Firewall nicht in der Lage, eine Portrange entgegen zu nehmen. Eine Rule wie “21, 5000-6000” schlägt fehl… und all einzeln eingeben? Nö. Wie geht es also weiter? Keine Ahnung, warum MS da so wenig Wert drauf legt,  non LAN Szenarien einfach mal zu dokumentieren. Aber irgendwo wird dann auch auf den Blog von Jaro Dunajsky verlinkt:
http://blogs.iis.net/jaroslad/archive/2007/09/29/windows-firewall-setup-for-microsoft-ftp-publishing-service-for-iis-7-0.aspx

Für ein Server, der im Internet steht und FTP SSL sprechen soll, muss also folgendes getan werden:

  1. Download und Installation des FTP7
  2. Konfiguration des FTP zum Beispiel mit einem Self-Signed-Cert dank IIS7 Cert-Manager
  3. Binding auf einen Port (zum Beispiel 21)
    image
  4. Zertifikat zuweisen
    image
  5. NETSH Konfiguration
    netsh advfirewall firewall add rule name="FTP for IIS7" service=ftpsvc action=allow protocol=TCP dir=in
    netsh advfirewall set global Statefulftp disable
  6. Für den Zugriff aus .NET heraus ist wichtig:
    1. Es muss der Passiv-Mode verwendet werden
    2. Es muss kein spezieller Port verwendet werden, er muss nur mit dem des Servers übereinstimmen
    3. Die Zertifikate müssen bekannt sein oder ignoriert werden

Jetzt funktioniert’s und ist sogar mit den .NET Bordmitteln (.NET 2.0 oder höher) zu erreichen.

Ciao Marco

PowerShell, NETSH, Windows Server 2008 Advanced Firewall und Dynamische IP Adresse

Wir entwickeln gerade an einer Anwendung mit Cloud Komponenten. Wichtig… wir sind HIP… oder heißt das heute anders? In der Cloud hat den Vorteil, fast alles über HTTP(S) machen zu können. Das Arbeiten in der Cloud hat aber auch Nachteile… zum Beispiel, das es fast nur HTTP(S) gibt :-) Mir geht es hier nicht um Probleme anderer Leute, alternative Ansätze stehe nicht zur Diskussion… ich erzähle, das hier, weil ich damit gerade ein Problem hatte. Also zu den Details.

Wir haben ein Server im Internet (sucht euch ein Hoster aus und stellt euch da ein Server vor). Dieser Server wird auch zu Entwicklungszwecken genutzt, da wir die Probleme des Web 2.0 von Anfang an benötigen (DNS, Cross-Site-Access, SSL Validation, etc). Der Server hat als Betriebssystem Windows Server 2008. Ein IIS7 bietet die Cloud-Dienste an und ein SQL Server 2008 steht hinter unserer Cloud für das Persistieren der Daten bereit. Mit Hilfe von Astoria (aka ADO.NET Data Services) gibt es Zugriff auf die Daten. Für das Erstellen der Zugriffsschicht (EDMX) benötigt das Visual Studio direkten Zugriff auf die SQL Datenbank. Hier liegt nun das Problem: Für Browsing ins Internet nutzten wir eine schnelle DSL Leitung mit wechselnden IP Adressen. Ich kann dern Windows Server also nicht einfach eine IP Eintragen und fertig. Für den Quickstart (und für den Quasi-Securitytest) wurde der gepatchte Server einfach auf 1433 (SQL Standard TCP Port) geöffnet. Schon nach einem Tag zeige das EventLog massiv viele Einträge über fehlerhafte SA Loginversuche. Slammer lässt also noch 2008 grüßen :-)

Welche Optionen gibt es in solchen Fällen?

  • Die Clients benötigen eine Statische IP Adresse
    • Für die Servernetze ist das ok, aber fürs Browsen muss das nicht sein
  • Den Server ins Clientnetz holen
    • Einfach aber nicht realitätsnah
  • Eine VPN Lösung einsetzen
    • Administrativer Aufwand ist zu hoch und am Client muss man immer schauen das die VPN oben ist
  • Die dynamische IP Adresse am Server bekannt machen
    • Bingo… aber wie? Einfach weiter lesen.

Wir mache ich also eine dynamisch DSL IP, die täglich einmal wechselt, auf dem Server bekannt? Für die ersten zwei Tage habe ich unsere IP bei http://www.wasistmeineip.de nachgeschlagen und in der Firewall des SQL Server eingetragen. Funktioniert… aber ist auf dauer langweilig. Jetzt kommen die Tools aus dem Titel zum Einsatz:image

  1. Windows Server 2008 Advanced Firewall
    Eine Inbound-Rule anlegen, die 1433 erlaubt.
  2. NETSH
    Eine CommandLine, die in der Lage ist, Rules der Advanced Firewall zu modifizieren.
  3. PowerShell
    Die Script-Umgebung für den Zugriff auf .NET Objekte wir zum Beispiel: System.Net.DNS
  4. DynDNS
    Ein Dienst, der auf vielen Routern genutzt werden kann, um sein “privates” DSL Netz mit einer dynamischen IP im Netz auffindbar zu machen.
  5. Windows Task Scheduler 2.0
    Kurze Zeit nach dem IP Wechsel (der ja in der Regel immer zur selben Zeit ist) wird das PowerShell los getreten, um die Firewall zu modifizieren.

Und so sieht das ganze aus:

   1: ipconfig /flushdns
   2: $ip = [System.Net.Dns]::GetHostAddresses("meindynamischesnetz.dyndns.org")[0].ToString()
   3: $ip = $ip + "/255.255.255.255,192.168.1.1/255.255.255.255"
   4: netsh advfirewall firewall set rule name="SQL-Server" new remoteip=$ip

1: FLUSHDNS für einen frischen DNS Cache

2: Ermitteln der ersten IP Adresse des DYNDNS Eintrags

3: Hinzufügen der IP mit SubNetMask zu weiteren statischen IP Adressen

4: Die REMOTEIP auf die Rule mit dem Namen “SQL-Server” setzen

Die Lösung ist beliebig erweiterbar. Zum Beispiel,  die aktuelle Konfig auszulesen und die IP zu ersetzen. Für mich hat es so erst mal gereicht… und vielleicht reicht es auch für andere mit einem selben Problem. Wichtig: Die SQL-Verbindung ist da durch nicht geschützt! Eine Lösung hierfür: Encypt=yes

Ciao Marco

UPDATED: 2008-09-25 – FlushDNS ins Script mit aufgenommen

Nochmal: Default Zustand der Windows Server 2008 Firewall

Ich hatte meine Erfahrungen bereits geschildert:
Windows Server 2008 und der Default Zustand der Firewall

Lese eben meine Feeds und habe folgenden Artikel gefunden:
SQL Server Security: SQL Server and the Windows Server 2008 Firewall

via Michael Howard’s

Ciao Marco

Windows Server 2008 – IIS7 – Kerberos Kernel Mode Authentication

imageAuf einer internen Fortbildung hatte ich mir den IIS7 angesehen. Eine der unscheinbarsten Änderungen trifft alle, die sich mit Kerberos auf einem IIS auseinander setzen müssen. Meine SharePoint Installationen sind also in Zukunft davon betroffen. Der Internet Information Server 7 (IIS7) kommt in der Default Konfiguration mit der Einstellung "Enable Kernel-mode authentication" gleich ON daher. Damit unterscheidet sich das Auflösen der Service Principlal Names (SPN) drastisch von der Art, die der IIS6 durchführt. Normalerweise wurde der SPN auf dem Application Pool (AppPool) Acount gesucht. Also auf einem Domain Acount oder auf dem Machine Account, wenn es der "Network Service" oder das "Local System" ist. Die Konfiguration auf einem IIS7 sieht nun so aus, dass die Auflösung mit "Kernel-mode authentication" immer den Machine Account heranzieht. Es ist ein Detail welches man einfach kennen sollte. Wichtig: In einer SharePoint NLB Farm muss man natürlich dieses Feature abschalten, da hier der SPN auf einem Domain Account sitzen muss, da die virtuelle NLB Instanz anders als ein echter Cluster nicht im AD als Objekt vetreten ist und somit auch nicht korrekt für Kerberos und die Delegation konfiguriert werden kann. Das Setting kann aber über den neuen IIS Manager einfach gesetzt werden. Mehr Info’s gibt es auch bei dem Kollegen Spencer Harbar:
Using Kerberos with SharePoint on Windows Server 2008

Ciao Marco

Doppelte SPN’s finden

imageMeine SharePoint Installationen sind in der Regel Intranet Installationen. Je nach Szenario ist Kerberos über NTLM als Authentifizierung zu beorzugen. Es ist schwer mit Pauschalen zu arbeiten, aber in der Regel empfehle ich den EInsatz von Kerberos. Die Intrastruktur läßt sich so schnell an wachsende Aufgaben (Reporting, OTP, etc) anpassen. Beim Setzen der Service Principal Names (SPN) ist es wichtig, das der Service nur auf einm einzigen Objekt im Active Directory (AD) liegt. Zum Setzen und Auslesen der SPN’s gibt es SETSPN.exe aus dem Ressource Kit (oder in Windows Server 2008 bereits enthalten). In der W2K8 Version von SETSPN kann ich beim Hinzufügen gleich auf doppelte Einträge prüfen lassen. Nur wenn es den Service Name noch nicht auf einem anderen Objekt gibt, wird er auf das gewüschte Element auch gesetzt. Die W2K8 Version läuft (wie immer) nicht auf den Vorgänger-Versionen. Es kommt hinzu, dass ich so Doubletten vermeide, aber wenn ich den entsprechenden Eintrag setzen will, muss ich irgendwie an die Information kommen, wo der Service registriert wurde. Ich habe im Internet gegooglet und eine passende Lösung gefunden:

http://blogs.dirteam.com/blogs/carlos/archive/2006/04/21/812.aspx

   1: <GC_Server_Name> = CMD -> SET -> value of LOGONSERVER
   2: <Service> = e.g. HOST or HTTP or ...
   3: <URI> = e.g. URL of portal -> http://portal.ms.local
   4: ldifde -s <GC_Server_Name> -f c:<My_SPN_Dump_File>.txt -d "" -r "(serviceprincipalname=<Service>/<URI>)" -p subtree -t 3268 -l dn,serviceprinciplename

 

Ciao Marco

Windows Server 2008 und der Default Zustand der Firewall

Aus der Woche in der ich mich intensiver mit dem Windows Server 2008 und dem IIS7 beschäftigt habe, hat sich ein Detail eingebrannnt:

Achtung: Firewall ist by default eingeschaltet!

Total sicher, aber auch total ungewohnt. Ich bin gleich drei mal in den Fehler gelaufen:

  1. IIS7 FTP Server von einem Vista Client aus testen
  2. SharePoint Server in die Farm joinen
  3. Reporting Services Integration auf dem Shareoiint aktivieren
    image

Ich habe die Firewall nicht abgeschaltet, sondern einfach die Ports, die ich jetzt benötigte, eingetragen als Exception. Es ist einfach Gewohnheitssache. Ich habe nicht ganz so viel Zeit verloren, da ich nicht so viele Ports benötige, aber Kollegen in deutlich komplexeren Szenarien, hat es einiges mehr an Zeit gekostet.

Ciao Marco

Windows Server 2008 und fehlender POP Service

Ich beschäftige mich gerade mit dem Windows Server 2008 (wird ja auch Zeit) und schaue mir speziell den IIS an. Einen Post dazu wird es sicher in Zukunft geben. Meinem Interesse am W2K8 Server gilt natürlich auch speziell der SharePoint-Fähigkeit. Erstes Fazit ist toll, aber auch dazu später mehr. Negativ aufgefallen ist nun der fehlende POP3 Service. Ob die Mehrheit ihn benötigt, ist jetzt nicht die Frage. Für ein (schlanke) SharePoint Testumgebung war es allerdings die einfachste Möglichkeit, eine Szenario samt Mail zu realisieren.

imageIch bin natürlich nicht der einzige, der ihn vermißt:
http://patrickyong.net/2008/05/15/pop3-server-for-windows-server-2008/

Die Lösung habe ich nicht getestet, da ich überlege, ob ich nicht den hMailServer für so was nehme. Wenn jemand ein Vorschlag hat, der ohne Exchange auskommt, bin ich für alle Berichte bankbar.

Ciao Marco