Archiv der Kategorie: Windows Server

Windows/Windows Server: Get Volume ID / Hard Disc Serial Number / Seriennummer der Festplatte herausfinden

Problem

The serial number / volume id of a hard drive is needed i.e. to generate node locked licences for a software program

Es wird die Seriennumer / Volume ID benötigt, um beispielsweise Lizenzen für eine Computerprogramm/eine Software zu generieren, die auf einen Rechner beschränkt sind

Ansatz – Approach

Usage of the DOS command WMIC

Usage of the DOS command vol

Lösung – Solution

  1. Open the DOS Command prompt / Öffnen Sie die MS DOS Eingabeaufforderung
  2. Geben sie folgendes ein: wmic diskdrive get serialnumber -> Seriennummer/Serial number
  3. Geben sie folgendes ein: vol c: -> Volume ID von Laufwerk c:

ASP.NET C#: Windows Authentication / Single Sign On

Problem

In einer ASP.NET Seite möchte man den Windows-Anmeldebenutzer ermitteln.

Ansatz / Approach

In der Web-Anwendung muss man zunächst den Haken „Enable Anonymous Access“ entfernen und einen Haken bei „Enable Windows Authentication“ setzen.

Lösung / Solution

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for AuthenticationService
/// </summary>
public class AuthenticationService
{
   public AuthenticationService()
   {
	//
	// TODO: Add constructor logic here
	//
   }

    public string getUsername()
    {
        string windowsLogin = System.Web.HttpContext.Current.User.Identity.Name;

        if (windowsLogin == null) return "none";

        int hasDomain = windowsLogin.IndexOf(@"\");
        if (hasDomain > 0)
        {
            windowsLogin = windowsLogin.Remove(0, hasDomain + 1);
        } //end if 

        return windowsLogin;
    }
}

Microsoft IIS 7: Windows Authentication fehlt / missing (Single-Sign-On einstellen)

Problem

Eine Seite soll für Windows Authentication konfiguriert warden, im Bereich IIS unter dem Punkt „Authentication“ soll ein Punkt „Windows Authentication“ sein. Dieser ist nicht vorhanden.

Voraussetzungen

Es wird eine Windows Server Variante verwendet (nicht Windows 7 Home Editions)

Ansatz – Approach

Die Server-Rolle muss nachinstalliert warden.

Lösung – Solution

1.) Den Server Manager starten
server_manager_starten

2.) Einen Rollenservice auf dem IIS-Unterpunkt hinzufügen
Add_Role_Services

3.) Auswahl der Authentifizierungsmethode
select_authmethods

4.) Nun ist unter dem Punkt „Windows Authentication“ im Bereich IIS der Punkt „Windows Authentication“ vorhanden, dieser kann ausgewählt warden und Anonymous Login kann disabled warden.
punkt_vorhanden

Welcher Prozess / Benutzer sperrt eine Datei?

Problem

Man erhält die Meldung, dass ein Prozess oder ein Benutzer eine Datei sperrt

Ansatz

* Herausfinden welcher Prozess die Datei sperrt bzw…
* Herausfinden welcher user die Datei sperrt (Windows Server)
* Prozess beenden

Lösung

Prozess sperrt Datei

Um herauszufinden welcher Prozess eine Datei sperrt, gibt es von Dr. Hoiby das Freeware Tool WhoLockMe. Es bietet an, den Prozess zu beenden

User sperrt Datei

Wenn ein User eine Datei sperrt, kann man auf dem Server unter Benutzung von

net file

oder

net share

entsprechende Benutzerlocks auffinden.

C#.NET: LDAP Zugriff

Aufgabenstellung

In größeren Firmen kann über das LDAP-Protkoll auf Personendaten und -informationen zugegriffen werden. Die kann z.B. für eine Authentifizierung per Singlesignon genutzt werden.

Ansatz

Möchte man diesen Dienst nutzen, muss man zunächst wissen auf welchem Server im Unternehmen ein solcher Dienst angeboten wird. Dies könnte z.B. ein Active Directory Server (Windows Server) oder ein Lotus Notes Server (notesldap) sein.

Zunächst benötigt man den Import:

using System.DirectoryServices;

Lösung

private void button1_Click(object sender, EventArgs e)
{
    DirectoryEntry DirEntry = new DirectoryEntry();
    {
        DirEntry.Path = "LDAP://notesldap.it.company.com";
        DirEntry.AuthenticationType = AuthenticationTypes.ServerBind;
    }
    Console.WriteLine(DirEntry.Name);

    DirectorySearcher search = new DirectorySearcher(DirEntry);
    {
        // Tweak this to refine your search
        search.Filter = "(sn=Karpenstein)";
        // I limit my results while I tweak          
        search.SearchScope = SearchScope.Subtree;
    }
    try
    {
        foreach (SearchResult result in search.FindAll())
        {
            if (result != null)
            {
                DirectoryEntry de = result.GetDirectoryEntry();
                textBox1.Text += "===================================="+br();
                textBox1.Text +=
                "User: \t\t" + de.Properties["uid"].Value.ToString() + br() +
                "objectclass:\t\t" + de.Properties["objectclass"].Value.ToString();

                IDictionaryEnumerator ide = de.Properties.GetEnumerator();
                ide.Reset();

                try
                {
                    while (ide.MoveNext())
                    {
                        PropertyValueCollection pvc = ide.Entry.Value as 
                                               PropertyValueCollection;

                        textBox1.Text += ide.Entry.Key.ToString();
                        textBox1.Text += pvc.Value;
                    }
                }
                catch (Exception sdf)
                {
                    textBox1.Text += sdf.Message;
                }
                
                //textBox1.Text += "location:\t\t" + de.Properties["location"].
                                              Value.ToString() + br();
                //textBox1.Text += "maildomain:\t\t" + de.Properties["maildomain"].
                                              Value.ToString() + br();

                textBox1.Text += "sn:\t\t" + de.Properties["sn"].
                                            Value.ToString() + br();
                //textBox1.Text += "dominocertificate:\t\t" + 
                    de.Properties["dominocertificate"].
                                             Value.ToString() + br();
                textBox1.Text += "mail:\t\t" + de.Properties["mail"].
                                             Value.ToString() + br();
                textBox1.Text += "l:\t\t" + de.Properties["l"].
                                            Value.ToString() + br();
                textBox1.Text += "displayname:\t\t" + de.Properties["displayname"].
                                            Value.ToString() + br();
                textBox1.Text += "givenname:\t\t" + de.Properties["givenname"].
                                           Value.ToString() + br();
                //textBox1.Text += "dc:\t\t" + de.Properties["dc"].
                                           Value.ToString() + br();
                //textBox1.Text += "dn:\t\t" + de.Properties["dn"].
                                           Value.ToString() + br();
                textBox1.Text += "cn:\t\t" + de.Properties["cn"].
                                            Value.ToString() + br();
                textBox1.Text += "====================================";
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message.ToString());
    }
    finally
    {
        search.Dispose();
        DirEntry.Close();
    }
}

WebDAV-Laufwerk mit Microsoft Windows Server 2003 und IIS konfigurieren

Aufgabenstellung

Es soll auf ein Dateisystem eines Internetservers zugegriffen werden, um z.B. Internetseiten zu bearbeiten oder z.B. Daten (CSV-Dateien, Excel-Sheets, Access-DBs… ) zu übertragen.

Problem

Aus einem sicherem Firmennetzwerk sollen Dateien komfortabel auf einen entfernten Windows Server kopiert werden. Der Begriff „komfortabel“ bedeutet, das man völlig orts- und relokationstranparent mit diesem Speicherort umgehen kann, es also keine Rolle spielt ob ich von Photoshop aus meine PSD-Dateien lokal habe oder mit einem entfernten Ort arbeite. Das Firmennetzwerk erlaubt über einen Proxy-Server Internetzugriff lediglich auf Port 80, so das man Internetseiten aufrufen darf. Eine FTP-Verbindung mit einem Internet-Server ist nicht möglich, da der FTP-Port 21 geblockt wird.

Auch das Arbeiten mit einer Web2FTP-Lösung oder eines Tunnels über ein FTP-Uploadformular erscheint sehr unbefriedigend, da ich in Photoshop über „Speicher Unter…“ ja kein Webformular auswählen kann, sondern vorerst die Datei zwischenspeichern und hochladen muss.

Vorraussetzungen

Dieser Artikel geht davon aus, das sie den Microsoft Windows Server 2003 oder höher (32- oder 64-Bit) bereits für ein laufendes Netzwerk konfiguriert haben und mindestens IIS 6 sowie den IIS Manager installliert haben. Der IIS sollte durch Zugriff auf die IP-Adresse erreichbar sein.

Ansatz

Das WebDAV-Protokoll erlaubt das Mounten von Dateisystemen über den in Windows integrierten WebDAV-Client. Sollte dieser Dienst deinstalliert sein, oder aus irgendwelchen Gründen nicht funktionieren, bietet das kostenlose Freewartool „Netdrive“ einfachste Einstellmöglichkeiten für Proxyserver und entfernte HTTP-Locations (wie http://meinserver/webdavfreigabe).

Lösung

Zuerst wird IIS konfiguriert

* WebDAV muss eine erlaubte Webdiensterweiterung im IIS-Manager sein

* Unter Webdiensterweiterungen muss für 64-Bit-Systeme ebenfalls das x64 Modul für Webdav eingebunden werden:

C:\Windows\Syswow64\inetsrv\httpext.dll


* HTTP (TCP-Port 80) muss in der Firewall erlaubt sein

Anschließend das Verzeichnis freigegeben

Die Einrichtung erfolgt über einen Ordner im Dateisystem der mit Hilfe der Registerkarte Webfreigabe bei den Eigenschaften des Ordner freigegeben wird.
Wählen Sie einen Alias aus und legen Sie die Webseite fest unterhalb der Webdav-Freigabe sichtbar ist.

Anonymer Zugriff ermöglichen

Soll der Ordner anonym für jeden zugänglich sein, kann man den Internet Guest Account „IUSR_TEMPLATE“ in den Ordneroptionen hinzufügen

Authentifizierter Zugriff (Benutzername/Kennwort)

In den meisten Fällen möchte man eine Standard Authentifizierung haben, wo zumindest Benutzername und Kennwort abgefragt wird, um den WebDAV-Ort vor ungewollten Zugriffen zu schützen.

Zunächst legt man hierfür einen User auf dem Windows-Server an (z.B. Schludi) (Anmerkung: Ich habe ihn in die gleichen Gruppen gesteckt wie IUSR_TEMPLATE, weiß nicht ob das notwendig ist…) . Der User kann am Server über START, Administrative Tools, Computer Management angelegt werden:

Das Passwort, was man dem User gibt, ist gleichzeitig das Passwort für den WebDAV-Zugriff.

Anschließend weißt man in den Ordereigenschaften (hier der User schludi) dem Ordner den Nutzer zu:

Hat man dies getan sollte man die Default-Website im IIS markieren und F5 klicken (aktualisieren). Es erscheint im aufgeklappten „Default-Website“-Knoten ein Zahnrad-Icon mit dem Alias-Namen des Ordners. Hier klicken wir wieder mit der rechten Maustaste und wählen den Menüpunkt Properties/Eigenschaften. Unter dem Reiter „Directory Security“ wird der Haken „Enable anonymous access“ entfernt und die Authentifizierungsmethode auf Basic Authentication gestellt. Die Einstellungen sollten mit dem Apply/Übernehmen-Button gesichert werden.
Ich habe übrigens eine Default-Domain „CT42946\“ eingetragen, damit es nicht nötig wird, den Domainpräfix vor den Usernamen zu schreiben. Ich habe in internationalen Intranets die Erfahrung gemacht, das Server in unterschiedlichen Domainen oftmals den Benutzernamen nicht akzeptieren, wenn man den Default-Domainpräfix nicht angegeben hat.

Zugriffmöglichkeiten mit Windows Methoden

Es gibt nun diverse Möglichkeiten diese WebDAV-Location als Netzwerklaufwerk mit herkömmlichen Windows-Methoden zu mounten, wovon je nach Client-Konfiguration nicht jede funktionieren muss…
Generell sollte der Dienst „WebDAV-Client“ auf dem Client-Rechner unter Services installiert und aktiviert sein, dies kann über die Systemsteuerung/Control Panel unter „Dienste/Services“ vorgenommen werden.

Laufwerksbuchstabe über Kommandozeile/Eingabeaufforderung mounten

Es wird die MS DOS Eingabeaufforderung geöffnet und der folgende Befehl eingegeben:

net use u: http://serveroderip/webdavalias

Ist eine Basic Authentication nach der Vorgehensweise oben eingestellt worden, fragt die Eingabeaufforderung nun User und Kennwort ab. Sollte ein Proxy erforderlich sein, wird der Standard-Proxy der Interneteinstellungen (Systemsteuerung/Internet Explorer) genommen.
Nun sollte Laufwerk U: gemountet sein. Ist dies nicht der Fall empfehle ich testweise einen Zugriff per Netdrive (siehe einige Zeilen weiter unten) auszuprobieren. Probieren Sie auch aus, ihren Domain-Präfix vor den Username DOMAINPRÄFIX\User zu schreiben (siehe auch weiter oben im Text: Empfehlung zur Einstellung des Default-Domain-Präfix).

Netzwerklaufwerk über Explorer zuordnen

Nachdem man den Windows-Explorer geöffnet hat, gibt es die Möglichkeit mit einem Rechtsklick auf das Netzwerk-Icon die Option „Netzwerklaufwerk verbinden“ zu wählen. Hier öffnet sich ein Dialog, der normalerweise einen typischen Windows-Filesharingpfad erwartet, aber unten einen Link „Verbindung mit einer Website herstellen, auf der Sie Dokumente und Bilder speichern können“ hat. Dieser Link ermöglicht mit Bordmitteln von Windows das mounten eines Netzwerklaufwerkes.

Zugriff mit einem Netdrive-Client

Obwohl man ihn erst runterladen muss, finde ich die Nutzung des Netdrive-Clients viel komfortabler und weniger problematisch als die Nutzung der Windows-Bordmittel. Einfach mal nach „netdrive download“ googeln, und man findet irgendeinen Ort (z.B. CHIP-Server) wo er runterladbar ist.

Nach der Installation lässt sich einfach die Verbindung eintragen, der „Advanced“-Button ermöglicht die Angabe eines Proxyservers, über den Verbindung aufgenommen werden kann.

Resumee

WebDAV ist eine gute Methode um bei stabiler Internetverbindung mit entfernten Dateisystemen zu arbeiten, auch wenn der Zugriff nach außen lediglich über Port 80 möglich ist. Hierbei muss der Web-Server nicht umkonfiguriert werden, sondern lediglich ein WebDAV-ALIAS auf der Defaultwebsite hinzugefügt werden.

Security Event Log auslesen bei Microsoft Windows Server

Das nachfolgende Konsolenprogramm gibt eine Liste des Security Event Logs beim Windows Server aus. Hier sieht man welche Person zu welchem Zeitpunkt eine Windows-Authentifizierung über eine Windows/ASP.NET-Anwendung am IIS Server getan hat.

namespace APITester
{
class Program
{
static void Main(string[] args)
{
EventLog test = new EventLog();
test.Log = „Security“;

for (int i = 0; i < test.Entries.Count; i++) { try { Console.WriteLine(test.Entries[i].TimeGenerated + " " + test.Entries[i].UserName); } catch (Exception e) { } } Console.ReadLine(); } } }[/javascript]