Table of Contents

QEMU/KVM: Intégration de Windows Server Core dans KVM/QEM

La version core de Windows Server est globalement moins lourde et plus économe en ressources. Elle ne contient pas les logiciels intégrés de la version “expérience utilisateur” et cela participe à réduire la surface d'attaque du système de Microsoft:

Les conteneurs permettent d’avoir de petites « instances » de serveur, chacune ayant un service ou un rôle spécifique.

Cet article présente la confection et l'utilisation d’un conteneur Windows Server Core pour utiliser une fenêtre de commandes MS-Dos.

Configuration et installation de la VM

Pour commencer on va construire une image complète de Windows Server Core – un petit Windows Server 2016 à jour, sans interface graphique et avec tout le nécessaire pour une machine virtuelle fonctionnelle.

Préparation de la VM

Créer le fichier de configuration KVM

Pour commencer, créer un fichier XML compatible avec l'hyperviseur :

<domain type='kvm' id='10'>
  <name>Windows2016core</name>
  <uuid>154d0X-va57-5fc4-f51c-c5d4fgg4rv</uuid>
  <description>None</description>
  <memory unit='KiB'>2000000</memory>
  <currentMemory unit='KiB'>0000000</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-model'>
    <model fallback='allow'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows2016core'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows2016core-vtl'/>
      <target dev='vdb' bus='virtio'/>
      <alias name='virtio-disk1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
        <disk type='file' device='cdrom'>
      <source file='/var/lib/libvirt/iso/Microsoft/fr_windows_server_2016_standard_and_datacenter_x64.iso'/>
      <target dev='hdc' bus='sata'/>
      <readonly/>
    </disk>
    <disk type='file' device='cdrom'>
      <source file='/var/lib/libvirt/iso/Drivers/virtio-windows.iso'/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
    </disk>
    <controller type='usb' index='0'>
      <alias name='usb0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:5f:5v:5v:5v'/>
      <source network='lbr300'/>
      <target dev='vnet13'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='no' listen='127.0.0.1' keymap='fr'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none'/>
</domain>

Il faut adapter certaines balises à la configuration : chemins des fichiers images, ISO Windows Serveur et l'emplacement du drivers virtio ainsi que la balise network et graphics.

Créer une image disque

Générer d'un fichier image pour le volume C:\ (minimum de 32Go). Dans le cas on a créer deux images : une de 50Go (Système) et une de 100Go (Backups) en approvisionnement dynamique :

qemu-img create -f qcow2 windows2016core 50G
qemu-img create -f qcow2 windows2016core-vtl 100G

Créer et démarrer la VM

Intégrer le fichier de configuration XML: windows2016core.xml dans KVM/QEMU avec virsh :

virsh define windows2016core.xml
virsh start windows2016core

Installation de Windows Server Core

Il est désormais possible en VNC ou via spice (au choix) de réaliser l'installation.

Windows Server 2016 peut s’installer de manière traditionnelle, comprendre par là avec son interface graphique, ou en version minimale avec un simple invite de commandes. Ce mode console est dénommé Core Server et est dédié aux environnements cloud. Sans interface graphique, Windows Core Server 2016 n’occupe qu’une place réduite sur le disque et ne nécessite que peu de ressources en mémoire vive. .

Core Server ne sera pas compatible WoW64 donc les applications 32 bits ne pourront pas être installées dessus.

Télécharger le fichier ISO de Windows Server 2016 Preview

Télécharger le fichier en_windows_server_2016_technical_preview_3_x64_dvd_6942082.iso. Ce fichier d’installation intègre les versions GUI et console. Dans le cas d’une installation sur une machine physique, on peut créer une clé USB ou graver un DVD d’installation.

Installer Windows Server 2016 Technical Preview 3

  1. Charger le fichier ISO pour une VM ou insérer le DVD / la clé USB d’installation de WS2016TP3 pour une machine physique.
  2. La langue du système sera l’anglais mais on peut changer le fuseau horaire et le clavier sur French (France).
  3. Cliquer sur Install now .
  4. Choisir la première ligne Windows Server 2016 Technical Preview 3 pour installer Windows Server sans son environnement graphique. Sans le GUI, WS2016 s’administre en PowerShell en local ou à distance.
  5. Accepter le contrat de licence.
  6. Demander une installation « Custom » .
  7. Indiquer où installer Windows Core Server 2016.

Intégrer les drivers virtio de RedHat pour Windows Server

L'intégration des drivers virtio contenu dans l'ISO est très importante. Elle permet de charger à l'installation dans Windows du pilote du bus virtio pour la reconnaissance des images disques avec visostor.

Le pilote NetKVM prends en charge la reconnaissance de la carte réseau

Configuration du shell Windows Server Core

Une fois le passe administrateur configuré: une interface cmd.exe s'affiche. Pour profiter des fonctionnalités de Windows 2016, il est nécessaire de basculer vers PowerShell comme ceci :

start powershell

A chaque connexion, il faut jongler entre cmd.exe et powershell.exe. Afin de démarrer par défaut avec powershell, changer la valeur de la clé Winlogon dans le registre :

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name Shell -Value 'PowerShell.exe -NoExit'

Configuration du mode core

Lancer la commande serveur :

sconfig

Un menu apparaît avec différents choix numéroté de 1 à 15, voici serveur actuellement :

Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. Tous droits réservés.

Inspection en cours du système...

===============================================================================
                         Configuration du serveur
===============================================================================

1) Domaine ou groupe de travail :               Domaine:  kassianoff.local
2) Nom d’ordinateur :                           DC-W2K16
3) Ajouter l’administrateur local
4) Configurer l’administration à distance       désactivé

5) Paramètres de Windows Update :               Manuel
6) Télécharger et installer les mises à jour
7) Bureau à distance :                          Activé (tous les clients)

8) Paramètres réseau
9) Date et Heure
10) Paramètres de télémétrie                  Sécurité
11) Activation de Windows

12) Fermer la session utilisateur
13) Redémarrer le serveur
14) Arrêter le serveur
15) Quitter pour revenir à la ligne de commande

Entrez un nombre pour sélectionner une option :
  1. renommer l'ordinateur (2)
  2. modifier les paramétres réseau (8)
  3. vérifier la date et l'heure (9)

Pour le reste ceci est une question d'appréciation personnelle. Un fois fait : un redémarrage est nécessaire.

Initialisation du second disque

Get-Disk |
Where partitionstyle -eq 'raw' |
Initialize-Disk -PartitionStyle MBR -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel "disk2" -Confirm:$false
Get-PSDrive -PSProvider 'FileSystem'

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
C                  15,60         33,91 FileSystem    C:\                                               Windows\system32
D                   0,29          0,00 FileSystem    D:\
E                   5,36          0,00 FileSystem    E:\
G                   0,11         99,89 FileSystem    G:\

Note: Pour assigner une autre lettre à un volume : exemple de la lettre G vers V

Get-Partition -DriveLetter G | Set-Partition -NewDriveLetter V.
Set-MpPreference -DisableRealtimeMonitoring $true

Installation et configuration d'active directory

Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSforest -DomainName kassianoff.local

Finalisation de l'installation

A la fin du processus d’installation fournir un mot de passe pour le mode restauration des services d'annuaire. Une fois fait, redémarrerle serveur pour découvrir la promotion du serveur.

Une solution standard, est également possible pour continuer la configuration des objets dans l'Active Directory. Utiliser un client Windows compatible avec les les outils d'administration AD DS - AD LDS et DNS. Celles-ci permettent simplement d'ouvrir une mmc distance pour manager le serveur comme l'experience utilisateur standard.

Commandes utiles

Création d'utilisateur en powershell

New-ADUser -Name "Jérémie KASSIANOFF" -GivenNaMe Jeremie -Surname KASSIANOFF -SamAccountName Jeremie -Ac
countPassword (Read-Host -AsSecureString "AccountPassword") -PassThru | Enable-ADAccount

Ou avec dsadd:

dsadd user "cn=Jeremie, dc=kassianoff, dc=local" -fn Jeremie -ln KASSIANOFF -pwd (Read-Host -AsSecureString "pwd") -disabled no
pwd: ***********************
dsadd réussite:cn=Jeremie,dc=kassianoff,dc=local

Gestion des groupes d'utilisateur

Pour afficher le groupe principale utilisateur :

Get-ADPrincipalGroupMembership Jeremie | select name

name
-----
Utilisateurs du domaine

Pour ajouter un utilisateur dans un autre groupe, par exemple en tant que : “admins du domaine”

Add-ADGroupMember "Admins du domaine" Jeremie

Gestion des mots de passe

En cas d'oubli on a la possibilité de changer le mot de passe d'un utilisateur de façon sécurisé en deux étapes :

$newpwd = Read-Host "Enter the new password" -AsSecureString
Enter the new password: ********

Puis terminer par la commande en y incluant la variable sécurisée :

Set-ADAccountPassword Jeremie -NewPassword $newpwd –Reset

Sauvegarde du l'état du système Windows

La sauvegarde du “systemstate” permet de conserver la configuration l'Active Directory mais également des fichiers systèmes (Boot et WFP), Sysvol, les certificats de l'autorité, la base de registre et les bases des Component Service Class. Pour ce faire il faut installer l'outil en ligne de commande Windows Backup Server :

Installer Windows Backup Server

Install-WindowsFeature -Name Windows-Server-Backup

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {Sauvegarde Windows Server}

Sauvegarde de l'état du système Windows

Utiliser la commande wbadmin, pour sauvegarder l'état du système Windows vers la cible V:\ :

wbadmin.exe start systemstatebackup -backuptarget:v:

wbadmin 1.0 - Outil en ligne de commande de sauvegarde
(C) Copyright 2013 Microsoft Corporation. Tous droits réservés.

Démarrage de la sauvegarde de l’état du système [17/10/2017 18:23]...
Récupération des informations de volume...
Cette opération va sauvegarder l’état du système du ou des volumes Réservé au système (500.00 Mo),(C:) vers v:.
Voulez-vous démarrer l’opération de sauvegarde ?
[O] Oui [N] Non O

Création d’un cliché instantané des volumes spécifiés pour la sauvegarde...
Création d’un cliché instantané des volumes spécifiés pour la sauvegarde...
La Sauvegarde `Windows Server` met à jour la sauvegarde existante pour supprimer les fichiers
qui ont été supprimés du serveur depuis la dernière sauvegarde.
Cette opération peut prendre quelques minutes.
(128) fichiers trouvés.
(128) fichiers trouvés.
(5759) fichiers trouvés.
(16838) fichiers trouvés.
(25640) fichiers trouvés.
(27545) fichiers trouvés.
(32136) fichiers trouvés.
(38401) fichiers trouvés.
(40891) fichiers trouvés.
(46330) fichiers trouvés.
(51592) fichiers trouvés.
(57589) fichiers trouvés.
(62223) fichiers trouvés.
(65702) fichiers trouvés.
(67775) fichiers trouvés.
(74302) fichiers trouvés.
(80408) fichiers trouvés.
(86037) fichiers trouvés.
(91284) fichiers trouvés.
(93183) fichiers trouvés.
La recherche des fichiers sur l’état du système est terminée.
Démarrage de la sauvegarde des fichiers...
La sauvegarde des fichiers signalés par « Task Scheduler Writer » est terminée.
La sauvegarde des fichiers signalés par « VSS Metadata Store Writer » est terminée.
La sauvegarde des fichiers signalés par « Performance Counters Writer » est terminée.
État d’avancement : 0 %.
Sauvegarde des fichiers signalés par « System Writer » en cours...
État d’avancement : 100 %.
Sauvegarde des fichiers signalés par « System Writer » en cours...

Récapitulatif de l’opération de sauvegarde :
-------------------------

L’opération de sauvegarde a abouti.
La sauvegarde de l’état du système a abouti [16/10/2017 16:37].
Journal des fichiers sauvegardés correctement :
C:\Windows\Logs\WindowsServerBackup\Backup-16-10-2017_16-23-37.log

Planification de la sauvegarde

Une planification de tache est recommandé pour sauvegarder l'état du système :

wbadmin enable backup -addtarget:V: -schedule:00:00 -systemState -quiet

Outils d'interface graphique

Théoriquement, voire formellement, Server Core ne peut être géré localement que via la ligne de commande (ou Powershell), car il n'inclut pas les outils intégrés pour la gestion locale via une interface utilisateur graphique (GUI).

Installer l'interface graphique

Dans la dernière version de Windows Server Technical Preview, l’interface graphique n’était plus une option dans une installation par défaut. A l'invite à sélectionner le système d'exploitation que vous souhaitez installer, on a le choix entre deux options.

La version MinShell de Windows Server 2016 inclut le Gestionnaire de serveur et les autres outils d’administration de l’interface graphique.

Sur Windows Server l’installation de l’interface graphique complète est plutôt simple. À l'invite de commande à l'issue de la connection, exécuter powerShell puis exécuter la commande suivante:

Install-WindowsFeature Server-Gui-Shell -Restart

Dans Server Core si on exécute cette commande PowerShell, elle échouera.

Install-WindowsFeature: La demande d'ajout ou de suppression de fonctionnalités sur le serveur spécifié a échoué. L'installation d'un ou de plusieurs rôles, services de rôle ou fonctionnalités a échoué. Les fichiers source sont introuvables.

L'utilisation de la commande Get-WindowsFeature *gui* montre que les options de l’interface graphique installable sur le serveur sont à l'état Supprimé. Comme il s'agit d'une installation Server Core, des options telles que l'interface graphique ne sont pas mises en cache sur le disque pour une installation rapide. Au lieu de cela,il faut utiliser le fichier WIM d'installation du système d'exploitation pour installer l'interface graphique:

Install-WindowsFeature Server-Gui-Shell –Restart -Source wim:D:\sources\install.wim:4

Après un redémarrage sur Windows Server 2016 MinShell ou Server Core, on aura l'interface utilisateur graphique complète

Programmes fournis avec Windows Server Core

La liste suivante répertorie les programmes basés sur une interface graphique fournis avec Windows Server Core:

Utilitaires SysInternals pour Server Core

Des outils supplémentaires basés sur une interface graphique sont fournis par Microsoft et peuvent être téléchargés gratuitement, directement à partir du «référentiel» Sysinternals.

La liste suivante répertorie partiellement les utilitaires Sysinternals basés sur une interface graphique et compatibles avec Core.

Add-On supplémentaire basé sur une interface graphique

D'autres options pour les applications à interface graphique de Micrsoft peuvent être installées via la commande Powershell Install-WindowsFeature.

Outre ce que Microsoft fournit, il existe de nombreux outils tiers basés sur une interface graphique, qui peuvent être installés avec succès sur Server Core.

Par exemple pour installer Chrome par exemple: