Anleitung: SMB v1 mit Desired State Configuration deinstallieren oder deaktivieren

    Configuration Management mit PowerShellPowerShell DSC ist Micro­softs neueste Tech­nologie zur zen­tralen Ver­teilung und Über­wachung von System­konfi­gurationen. Dieser Bei­trag zeigt an einem ein­fachen Bei­spiel (Deinstal­lation bzw. Deak­tivierung von SMB Version 1.0), wie man eine Confi­guration erstellt, kompi­liert und auf die Ziel­rechner anwendet.

    Für DSC erhielt PowerShell das neue Schlüsselwort configuration. Es steht für eine spezielle function, in der man die Details von Konfigu­rationen in einer deklarativen Form festlegen kann (siehe dazu: Desired State Configuration (DSC): Grundlagen und Funktionsweise).

    Eine configuration erlaubt wie eine function die Verwendung von Parametern, um Werte dynamisch einzufügen. Das folgende Beispiel beschränkt sich auf die grundlegenden Elemente ohne separate Configuration Data.

    Configuration-Gerüst in der ISE erstellen

    Eine configuration umfasst mehrere Elemente, unter anderem die Deklaration inklusive möglicher Parameter sowie die Ressourcen mit den von ihnen unterstützten Attributen. Um Tipparbeit für die Grundstruktur zu sparen, kann man mit der PowerShell ISE ein configuration-Skelett generieren.

    Skelett für einfache Configuration in der PowerShell ISE einfügen

    Dafür betätigt man STRG + J und wählt aus der anschließend angezeigten Liste eines der DSC-Gerüste aus. Wir entscheiden uns hier für die Version Simple. Sie enthält zuoberst das Schlüsselwort configuration, das man um den gewünschten Namen ergänzen muss. Für dieses Beispiel wäre das DisableSMB1.

    Zielsystem festlegen

    Mit Hilfe von node legt man die Namen jener Rechner fest, auf welche die Konfiguration angewandt werden soll. Für jeden davon wird später eine eigene .mof-Datei generiert, deren Ausführung das Zielsystem anpasst. Das von der ISE eingefügte Skelett verwendet hier die Namen node1 bis node3.

    Wir begnügen und hier mit einem Host, der WS20126-VM1 heißen soll. Im dazugehörigen Block befinden sich bereits Snippets für zwei Ressourcen, die zum Lieferumfang von Windows gehören. Es handelt sich dabei um WindowsFeature und File. Welche weiteren Ressourcen auf dem System verfügbar sind, kann man mit Get-DscResource erfragen.

    Nachdem es in unserem Beispiel darum gehen soll, das SMB-Protokoll v1 zu entfernen, benötigen wir den File-Block nicht. Er dient erwartungs­gemäß für diverse Datei­operationen, etwa dem Anlegen von Verzeich­nissen oder dem Auslesen von Dateien.

    SMB v1 über WindowsFeature deinstallieren

    Möchte man nicht benötigte Features entfernen, dann nutzt man die Ressource WindowsFeature. Um zu erfahren, welche Attribute sie unterstützt, gibt man

    Get-DscResource -Name WindowsFeature |
    Select -ExpandProperty Properties

    ein.

    Eigenschaften der Ressource WindowsFeature

    Neben dem Namen des Features, das entfernt werden soll, benötigen wir die Eigenschaft Ensure. Sie stellt über die Werte Present und Absent sicher, dass ein Feature vorhanden bzw. abwesend ist, also bei Bedarf installiert oder entfernt wird. Den Namen des Features ermittelt man durch Eingabe von

    Get-WindowsFeature -Name *SMB*

    Die angepasste configuration würde nun so aussehen:

    SMB v1 in Windows 10 entfernen

    Führt man den Befehl auf einer Workstation aus, dann wird man schnell feststellen, dass dort das Cmdlet Get-WindowsFeature nicht zur Verfügung steht. Die Ressource WindowsFeature existiert zwar unter Windows 10, aber beim Ausführen der .mof-Datei setzt es dann eine Fehlermeldung.

    Daher muss man auf Client-Systemen stattdessen die Ressource WindowsOptionalFeature verwenden. Wie der Aufruf von

    Get-DscResource -Name WindowsOptionalFeature |
    Select -ExpandProperty Properties

    zeigt, nimmt die Eigenschaft Ensure dort die Werte Enable und Disable an.

    Eigenschaften der Ressource WindowsOptionalFeature

    Und während SMBv1 auf dem Server FS-SMB1 heißt, nennt sich das Feature auf einer Workstation SMB1Protocol, wie man mit diesem Befehl herausfinden kann:

    Get-WindowsOptionalFeature -Online -FeatureName *smb*

    Die configuration müsste für Windows 10 dann so angepasst werden:

    Registry-Eintrag für Windows 7 und Server 2008 R2

    SMB v1 lässt sich nur ab Windows 8.1 und Server 2012 R2 als eigenes Feature deinstallieren. Auf älteren Systemen kann man es sich durch einen Eintrag in der Registrier­datenbank abschalten. Auch diese Aufgabe übernimmt DSC.

    Zu diesem Zweck bemüht man die Ressource Registry, die ebenfalls zum Liefer­umfang des OS gehört.

    Eigenschaften der DSC-Ressource Registry

    Sie erwartet mindestens die Eingabe von Werten für die Eigenschaften Key und ValueName.

    Über den Wert Present für Ensure stellt man sicher, dass der Wert in der Registry eingetragen wird, falls er noch nicht existiert.

    .mof-Datei erzeugen

    Möchte man nun eine der obigen Konfigurationen anwenden, dann führt man das Script aus und lädt damit die Konfiguration DisbaleSMB1 in den Speicher. Wenn man sie nun wie eine function mit

    DisbaleSMB1

    aufruft, dann erzeugt sie für jeden Node eine eigene .mof-Datei, und zwar im Unterverzeichnis DisbaleSMB1.

    Konfiguration anwenden

    Diese Aufgabe übernimmt beim Push-Modell Start-DscConfiguration. Es erwartet den Pfad zu dem Verzeichnis, in dem sich die .mof-Dateien befinden. Aufgrund ihres Namens stellt das Cmdlet selbständig fest, welche Datei zu welchem Rechner gehört:

    Start-DscConfiguration -Path .\DisableSMB1

    Dieses Kommando startet den Vorgang als Job im Hintergrund und arbeitet dabei die Konfiguration jener .mof-Datei ab, die zum Namen des lokalen Rechners passt. Das Cmdlet akzeptiert aber den Parameter Computername, so dass man Konfigurationen auch remote anwenden kann.

    Start-DscConfiguration erzeugt standardmäßig einen Hintergrund-Job, so dass man über auftretende Fehler nicht viel erfährt.

    Läuft der Befehl im Hintergrund und es tritt ein Fehler auf, dann sieht man mit Get-Job in der Spalte State nur den Eintrag Failed. In diesem Fall empfiehlt es sich, das Cmdlet erneut mit den zusätzlichen Schaltern -Wait -Force -Verbose zu starten.

    Keine Kommentare