Scripting von Dateifreigaben

Das Skripten von Dateifreigaben hat mehrere Vorteile:

  1. Dokumentation
  2. Automatisation

1. Dokumentation

Ein Netzwerk sollte und muss (je nach Unternehmensgröße, jedoch ab 10 Mitarbeitern Pficht) sorgfältig dokumentiert werden. Durch die Dokumentation ist man in der Lage, auch noch 3 Monate nachdem man eine Konfiguration durchgeführt hat, zu verstehen, was man dort getan hat. Werden jetzt verschiedene Tasks auch noch geskriptet, dann kann dieses Skript für sich schon als Dokumentation dienen und mehr Aufschluss geben als so manche nachher erstellten Dokumente.

2. Automatisation

1 Netzwerkfreigabe anzulegen, deren Berechtigungen auf Netzwerk- und auf Dateiebene einzustellen ist kein Problem. Doch was ist, wenn es 10, 20, 50 oder 100 Netzwerkfreigaben sind? Und was ist, wenn diese nach ca. 1 Monat oder 1 Jahr wieder geändert werden sollen? Z.B. von einem Laufwerk auf ein anderes, oder von einem Server auf den anderen? Dann stößt die GUI sehr schnell an die Grenzen der Praktikabilität. Ein Skript kann hier schnell angepasst werden und den Änderungsaufwand drastisch reduzieren.

Die Befehle

Für das Skripting braucht man eigentlich nur 2 Befehle:

  • net share
  • cacls (für Windows XP/Server 2003)
  • icacls (für Windows Server 2003 SP2/Vista/Server 2008)

Zunächst müssen die möglicherweise bestehenden Netzwerkfreigaben (Shares oder Shared Folders) gelöscht werden:

  • net share freigabename /delete

Danach werden die Freigaben inkl. der Berechtigungen auf Netzwerkebene neu angelegt:

  • net share freigabename=Laufwerk:Pfad /grant:”benutzername“,accesslevel /unlimited

Die kursiv-gedruckten Wörter müssen durch Ihre Werte ersetzt werden. accesslevel kann die folgenden Ausprägungen haben:

  • FULL (Vollzugriff)
  • READ (Lesen)
  • CHANGE (Ändern)

Sollten mehrere Berechtigungen gesetzt werden, wird der /grant Parameter einfach so oft wiederholt, wie Berechtigungen vergeben werden müssen:

  • net share freigabename=Laufwerk:Pfad /grant:”benutzername“,accesslevel /grant:”gruppenname“,accesslevel /grant:”benutzername2“,accesslevel /unlimited

Die Berechtigungen können nachträglich nicht mehr verändert werden. Die Freigabe muss hiefür gelöscht und wieder neu erstellt werden.

Der nächste Schritt besteht darin, die Berechtigungen auf Datei-Ebene zu setzen. Für jeden Benutzer oder jede Gruppe wird, anders als bei net share mit dem /grant-Parameter, jeweils ein cacls-Befehl benötigt. Hier die Syntax:

  • cacls dateiname /t /e /g benutzer:berechtigung
  • icacls dateiname /grant benutzer:[(Vererbung1)][(Vererbung2)](Berechtigung1,Berechtigung2,…)

Auch hier müssen Sie die kursiv-gedruckten Wörter durch Ihre Daten ersetzen. Werte in eckigen Klammern sind optional. Bei icacls müssen die Vererbungs- und Berechtigungswerte in Klammern geschrieben werden.

berechtigung kann die folgenden Werte haben:

  • n (keine)
  • r (lesen)
  • c (ändern)
  • f (Vollzugriff)

Vererbung kann die folgenden Werte haben (icacls):

  • oi (an Objekte/Dateien)
  • ci (an Container/Verzeichnisse)
  • io (nur vererben, nur auf das Verzeichnis selbst anwenden)
  • np (nicht vererben, nur auf das Verzeichnis selbst anwenden)

berechtigung kann die folgenden Werte haben (icacls):

  • f (Vollzugriff)
  • m (Ändern)
  • rx (Lesen und Ausführen)
  • r (Lesen)
  • w (Schreiben)
  • die Berechtigungen können noch feiner gesteuert werden, doch würde diese Betrachtung hier den Rahmen sprengen. Microsoft hat hier eine ausführlichere Betrachtung.

Die Befehle werden dann der Reihenfolge nach in eine Batch-Datei geschrieben, die dann ausgeführt werden kann.

Hier noch 2 Anmerkungen:

  1. Sollen in den Werten, die in die Befehle eingearbeitet werden, Leerzeichen verwendet werden, so muss der Wert in Anführungszeichen stehen, da die Konsole das nächste Wort nach dem Leerzeichen als neuen Parameter oder Befehl interpretieren möchte.
  2. Sollen deutsche Umlaute oder Sonderzeichen verwendet werden, so muss das Skript mit “chcp 1252 > NUL” beginnen und mit “chcp 850 > NUL” enden, da die zu benutzende Codepage für die Ausführung des Skriptes geändert werden muss. Natürlich sollte sie danach wieder auf den Standardwert zurückgesetzt werden. Die Befehle sind natürlich ohne die Anführungszeichen in die Batch-Datei einzutragen.