Blog de ILINFO

Trucs et astuces

Blog ILINFO Active DIrectory MIIS LDAP ADAM PCA PRA BCP DRP

Log in

Création d'un DVD de secours WINPE pour automatiser la réinstallation d'un poste Windows 7

by Emmanuel Dreux septembre 04, 2010 00:59

Voici un nouvel article autour de WINPE.

Ce billet explique comment créer un DVD bootable WINPE qui installe automatiquement votre image personnalisée Windows 7 stockée sur ce même DVD.

Il faut tout d'abord créer une image personnalisée de WINPE, puis y copier votre image WIM de Windows 7(préalablement capturée).

Ensuite créer un fichier de configuration qui permettra de formatter automatiquement vos disques puis d'appliquer l'image WIM.

A l'issue de cette manipulation, vous disposez d'un DVD de secours qui vous permettra d'installer ou réinstaller automatiquement votre poste.

 

Pour réaliser ce DVD, je vous propose tout d'abord de partir du script existant winpe.cmd disponible dans le WAIK.

Nous allons le customiser pour automatiser la création du WINPE qui contiendra tous les éléments nécessaires.

Faites une copie de winpe.cmd dans le même répertoire (exemple mywinpe.cmd) puis customisez le:

----------------------------   mywinpe.cmd -------------------------------------------------

@echo off
setlocal

set _P=%~dp0%
set TEMPL=ISO

if /i "%1"=="" goto usage
if /i "%2"=="" goto usage
if /i not "%3"=="" goto usage
set SOURCE=%_P%%1
set DEST=%2

if not exist "%SOURCE%\winpe.wim" (
  echo File does not exist: "%SOURCE%\winpe.wim"
  exit /b 1
)

if exist "%DEST%" (
  echo Destination directory exists: %2
  exit /b 1
)

mkdir "%DEST%"
if errorlevel 1 (
  echo Unable to create destination: %2
  exit /b 1
)

echo.
echo ===================================================
echo Creating Windows PE customization working directory
echo.
echo     %DEST%
echo ===================================================
echo.

mkdir "%DEST%\%TEMPL%"
if errorlevel 1 goto :FAIL
mkdir "%DEST%\mount"
if errorlevel 1 goto :FAIL

if exist "%SOURCE%\bootmgr" copy "%SOURCE%\bootmgr" "%DEST%\%TEMPL%"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\bootmgr.efi" copy "%SOURCE%\bootmgr.efi" "%DEST%\%TEMPL%"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\boot\etfsboot.com" copy "%SOURCE%\boot\etfsboot.com" "%DEST%"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\boot\efisys.bin" copy "%SOURCE%\boot\efisys.bin" "%DEST%"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\boot\efisys_noprompt.bin" copy "%SOURCE%\boot\efisys_noprompt.bin" "%DEST%"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\boot" xcopy /cherky "%SOURCE%\boot" "%DEST%\%TEMPL%\boot\"
if errorlevel 1 goto :FAIL
if exist "%SOURCE%\EFI" xcopy /cherky "%SOURCE%\EFI" "%DEST%\%TEMPL%\EFI\"
if errorlevel 1 goto :FAIL
mkdir "%DEST%\%TEMPL%\sources"
if errorlevel 1 goto :FAIL
copy "%SOURCE%\winpe.wim" "%DEST%\winpe.wim"
if errorlevel 1 goto :FAIL

endlocal
echo.
echo Success
echo.
echo Updating path to include peimg, cdimage, imagex
echo.
echo    %~dp0
echo    %~dp0..\%PROCESSOR_ARCHITECTURE%
echo.

set PATH=%PATH%;%~dp0;%~dp0..\%PROCESSOR_ARCHITECTURE%
cd /d "%2"

rem: les commandes suviantes personnalisent l'image winpe et y copient les fichiers nécessaires

Dism /Mount-Wim /WimFile:C:\winpe_x86\winpe.wim /index:1 /MountDir:C:\winpe_x86\mount
dism /image:C:\winpe_x86\mount /Set-InputLocale:fr-FR
dism /image:C:\winpe_x86\mount /Set-UserLocale:fr-FR
copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" C:\winpe_x86\mount\Windows\System32\
rem: copie l'utilitaire de reboot
copy "C:\windows\system32\shutdown.exe" C:\winpe_x86\mount\Windows\System32\
mkdir c:\winpe_x86\mount\tools
rem: Fichier qui précise les commandes à exécuter automatiquement
copy c:\temp\winpeshl.ini C:\winpe_x86\mount\Windows\System32
rem: Fichier qui automatise le partitionnement
copy c:\temp\diskpart.txt c:\winpe_x86\mount\tools
rem: Batch lancé au démarrage
copy c:\temp\install.cmd c:\winpe_x86\mount\tools
dism /Unmount-Wim /MountDir:C:\winpe_x86\mount /Commit
copy c:\winpe_x86\winpe.wim c:\winpe_x86\ISO\sources\boot.wim
rem:Inséréz ici votre propre image windows7.wim
copy c:\temp\install7.wim c:\winpe_x86\ISO
oscdimg -m -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO C:\winpe_x86\winpe_x86.iso

goto :EOF

:usage
echo Usage: copype [x86 ^| amd64 ^| ia64] destination
echo.
echo Example: copype x86 c:\windowspe-x86
goto :EOF

:FAIL
echo Failed to create working directory
 

-----------------------------------------------------------------------------------------------------

winpeshl.ini est le fichier qui contient les commandes à exécuter au démarrage de winpe.

Ici, on se contentera de démarrer un batch qui contient toutes les commandes.

----------------------------------   winpeshl.ini              ----------------------------------------

 [LaunchApp]
AppPath = x:\tools\install.cmd

-----------------------------------------------------------------------------------------------------

Install.cmd partitionne le disque automatiquement.

Ensuite, en fonction des lecteurs CD et DVD installés, il detecte automatiquement sur quelle lettre est disponible l'image d'installation et l'applique.

A la fin, il réalise un shutdown de la station.

 ------------------------------------- Install.cmd              ---------------------------------------

 diskpart /s x:\tools\diskpart.txt

if exist d:\install7.wim goto lectd
if exist e:\install7.wim goto lecte
if exist f:\install7.wim goto lectf
if exist g:\install7.wim goto lectg

:lectd
imagex /apply d:\install7.wim 1 c:
c:\windows\system32\bcdboot c:\windows
shutdown -s -t 00

:lecte
imagex /apply e:\install7.wim 1 c:
c:\windows\system32\bcdboot c:\windows
shutdown -s -t 00

:lectf
imagex /apply f:\install7.wim 1 c:
c:\windows\system32\bcdboot c:\windows
shutdown -s -t 00

:lectg
imagex /apply g:\install7.wim 1 c:
c:\windows\system32\bcdboot c:\windows
shutdown -s -t 00

 -----------------------------------------------------------------------------------------------

Pour terminer, le fichier diskpart.txt contiendra les commandes à lancer dans l'utilitaire diskpart pour automatiser la création des partitions et leur formattage.

 ---------------------------------------  dispkpart.txt           ------------------------------

select disk 0
clean
create partition primary
select partition 1
format fs=ntfs quick label="Windows"
active
assign letter=c
exit
 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

déploiement Windows 7 | winpe

Migration Windows 7 avec Mig6

by Emmanuel Dreux août 05, 2010 00:53

Software Migration Windows 7

Logiciel Migration Windows 7

Software Migration Windows 7

MIG6 (http://www.bcpsoft.fr) est un outil de migration de systèmes d'exploitations.

Particulièrement utile pour une migration de XP vers Windows 7.

- Il restore les profils utilisateurs.

-Il restore les répertoires de votre choix.

- Il réinstalle les applications.

- Il reconfigure les applications.

 

2 modes de fonctionnement sont disponibles:

Software Migration Windows 7

Logiciel Migration Windows 7

Software Migration Windows 7

- Un scan et migration à la volée d'un ordinateur source vers un ordinateur cible

- Une création de profils de migration pour migrer par vagues un ensemble d'ordinateurs sources vers des ordinateurs cibles.

 

Si vous ne disposez pas d'infrastructure de déploiement du type Altiris ou SCCM, Mig6 réinstalle pour vous les applications, sinon, désactivez la réinstallation d'applications dans Mig6 pour laisser votre infra de déploiement faire le travail.

Mig6 sera dans ce cas utile pour migrer vos profils, répertoires et reconfigurer vos applications automatiquement.

Software Migration Windows 7

Logiciel Migration Windows 7

Software Migration Windows 7

Fonctionne sous XP, Vista, SEven, 2003 et 2008 en 32 ou 64 bits.

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Migration

WINPE clavier Français

by Emmanuel Dreux mars 08, 2010 22:06

Comment construire un WINPE avec un clavier français:

 

1.) Téléchargez WAIK 2.0 pour Windows 7 et installez le.

2.) Lancez Deployment Tool Command Prompt et élevez ses privilèges

3.) Lancez : copype.cmd x86 c:\winpe_x86

4.) Montez l'image winpe.wim: Dism /Mount-Wim /WimFile:C:\winpe_x86\winpe.wim /index:1 /MountDir:C:\winpe_x86\mount

5.) Installez le clavier français: dism /image:C:\winpe_x86\mount /Set-InputLocale:fr-FR

6.) Installez les settings français: dism /image:C:\winpe_x86\mount /Set-UserLocale:fr-FR

7.) copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" C:\winpe_x86\mount\Windows\System32\  (Utile pour les déploiements).

8.) Sauvegardez l'image : Dism /Unmount-Wim /MountDir:C:\winpe_x86\mount /Commit

9.) copiez winpe.wim dans .\ISO\sources : copy c:\winpe_x86\winpe.wim c:\winpe_x86\ISO\sources\boot.wim

10.)  Copiez les secteurs de boot: oscdimg -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO C:\winpe_x86\winpe_x86.iso

 

Il ne vous reste plus qu'à graver l'ISO ou booter dessus en environnement virtuel.

Pour exécuter des scripts dans cet environnement, vous pouvez créer un fichier Winpeshl.ini, ajouter vos commandes dans startnet.cmd ou créer un fichier Autounattend.xml

 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

déploiement Windows 7

Access Denied scheduling task cmd.exe

by Emmanuel Dreux mars 05, 2010 15:33

Problème:

Lorsque vous planifiez une tache qui lance un batch  et que cette tache s'exécute dans le contexte d'un utilisateur, celle ci ne fonctionne pas  et retourne Access Denied.

Cause:

La raison est que le compte en question a besoin de la permission Read&Execute sur c:\windows\system32\cmd.Exe

 

 http://support.microsoft.com/kb/867466/en-us

 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

Windows Server 2003 | sécurité

Plan de continuite d'activite (PCA) avec BCP Anywhere 1.0

by Emmanuel Dreux février 07, 2010 00:09

Business Continuity Plan software

BCP software

Business Continuity Plan software

Un nouveau logiciel est disponible sur le marché.

BCP Anywhere 1.0 est un logiciel de sauvegarde et restauration spécialement conçu pour être utilisé dans le cadre d'un plan de continuité d'activité (PCA) de postes de travail et de serveurs.

Il sauvegarde les environnements source (profiles, données et paramètres des applications).

Business Continuity Plan software

BCP software

Business Continuity Plan software

Lors de la restauration sur les postes cible, il restaure les profiles et les données, réinstalle automatiquement les applications manquantes et les reparamètre automatiquement.

Disponible en français, BCP Anywhere (Business Continuity Plan) sera bientôt disponible en anglais.

Développé en collaboration avec ILINFO, le site de l'éditeur se trouve à l'adresse suivante: http://www.bcpsoft.fr

Business Continuity Plan software

BCP software

Business Continuity Plan software

 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

PCA

Gel ouverture de session Applying computer settings

by Emmanuel Dreux janvier 22, 2010 16:29

Un de mes clients a rencontré récemment un problème intéressant de gel d'ouvertures de sessions.
Mes recherches effectuées sur Internet s'étant révélées infructueuses (de nombreux reports du problème mais pas de solution efficace), j'ai donc pris mon debugger pour trouver la cause du problème.

Je vous livre ici les résultats d'analyse et la méthodologie suivie pour remonter à la source du problème.

Symptôme:
Après avoir ouvert une connection RDP sur un serveurs (mstsc.exe), la fenêtre de login s'affiche correctement, mais après saisie des credentials, l’ouverture de session reste bloquée sur Applying Computer settings.
Ensuite plus personne ne peut se loguer sur le serveur, même physiquement sur la console. Le serveur ne présente plus rien d’autre qu’un écran bleu (absence de bureau).
L’accès distant RPC/DCOM ne fonctionne plus non plus.
L’accès SMB peut être opérationnel dans certains cas.
Le serveur répond au ping.
Il faut alors éteindre le serveur physiquement et rallumer.


Diagnostics:
Installé hotfix http://support.microsoft.com/kb/948496/en-us . Celà n’a pas corrigé le problème.
Mise en place compteurs de performance mémoire / System / Serveur / Processus / Processeur.
L’analyse ne montre aucun problème 100%, pas de problème mémoire ( Available Memory Ok, Paged Pool Ok, Non Paged Pool Ok, Pte Ok).
J'ai donc  modifié la clé de registre CrashOnCtrlScroll pour activer la possibilité de générer un dump mémoire à la demande sur une des machine impactée afin de collecter un dump lorsqu'une ouverture session se gèle. ( http://support.microsoft.com/kb/244139).
Analyse du dump:
Plusieurs dumps ont été générés et tous présentent le même symptôme. 
Dans les grandes lignes,  Winlogon est bloqué en attente d’un appel LPC traité par le service AeLookupSvc qui ne répond jamais plus aux messages, d’où la cause du « hang »

Voici un résumé de l'analyse:
Vu que l'ouverture de session est traitée par Winlogon, l'analyse de ce processus est le point de départ.

Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\temp\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available

Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows Server 2003 Kernel Version 3790 (Service Pack 2) UP Free x86 compatible
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Built by: 3790.srv03_sp2_gdr.090319-1204
Machine Name:
Kernel base = 0x80800000 PsLoadedModuleList = 0x808a8e48
Debug session time: Mon Jan 18 10:55:19.400 2010 (GMT+1)
System Uptime: 3 days 0:50:29.015
Loading Kernel Symbols
...............................................................

Loading User Symbols

Loading unloaded module list
..
*******************************************************************************
*                                                                                                                                       *
*                        Bugcheck Analysis                                                                                    *
*                                                                                                                                       *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck E2, {0, 0, 0, 0}

Probably caused by : i8042prt.sys ( i8042prt!I8xProcessCrashDump+256 )

Followup: MachineOwner
---------

kd> !process 0 0 winlogon.exe
PROCESS 8a3f4540  SessionId: 0  Cid: 0160    Peb: 7ffdb000  ParentCid: 0118
    DirBase: e798b000  ObjectTable: e1417a68  HandleCount: 501.
    Image: winlogon.exe

PROCESS 8a411a60  SessionId: 1  Cid: 0a70    Peb: 7ffd8000  ParentCid: 0118
    DirBase: 0ed55000  ObjectTable: e138ce38  HandleCount: 301.
    Image: winlogon.exe

PROCESS 89a3d7b8  SessionId: 3  Cid: 0f2c    Peb: 7ffd8000  ParentCid: 0118
    DirBase: 1e029000  ObjectTable: e1b73cf0  HandleCount: 231.
    Image: winlogon.exe

kd> !process 8a3f4540 1
PROCESS 8a3f4540  SessionId: 0  Cid: 0160    Peb: 7ffdb000  ParentCid: 0118
    DirBase: e798b000  ObjectTable: e1417a68  HandleCount: 501.
    Image: winlogon.exe
    VadRoot 8a628a10 Vads 132 Clone 0 Private 1142. Modified 9. Locked 0.
    DeviceMap e1001140
    Token                             e1550910
    ElapsedTime                       3 Days 00:50:16.713
    UserTime                          00:00:00.078
    KernelTime                        00:00:00.984
    QuotaPoolUsage[PagedPool]         50852
    QuotaPoolUsage[NonPagedPool]      62208
    Working Set Sizes (now,min,max)  (2503, 50, 345) (10012KB, 200KB, 1380KB)
    PeakWorkingSetSize                2508
    VirtualSize                       44 Mb
    PeakVirtualSize                   46 Mb
    PageFaultCount                    19815
    MemoryPriority                    BACKGROUND
    BasePriority                      13
    CommitCharge                      1851

kd> !process 8a411a60  1
PROCESS 8a411a60  SessionId: 1  Cid: 0a70    Peb: 7ffd8000  ParentCid: 0118
    DirBase: 0ed55000  ObjectTable: e138ce38  HandleCount: 301.
    Image: winlogon.exe
    VadRoot 89b61ce8 Vads 175 Clone 0 Private 750. Modified 992. Locked 0.
    DeviceMap e1001140
    Token                             e19397d0
    ElapsedTime                       2 Days 19:41:14.890
    UserTime                          00:00:12.281
    KernelTime                        00:00:03.468
    QuotaPoolUsage[PagedPool]         50988
    QuotaPoolUsage[NonPagedPool]      9184
    Working Set Sizes (now,min,max)  (693, 50, 345) (2772KB, 200KB, 1380KB)
    PeakWorkingSetSize                3481
    VirtualSize                       50 Mb
    PeakVirtualSize                   57 Mb
    PageFaultCount                    46010
    MemoryPriority                    BACKGROUND
    BasePriority                      13
    CommitCharge                      1307

kd> !process 89a3d7b8  1
PROCESS 89a3d7b8  SessionId: 3  Cid: 0f2c    Peb: 7ffd8000  ParentCid: 0118
    DirBase: 1e029000  ObjectTable: e1b73cf0  HandleCount: 231.
    Image: winlogon.exe
    VadRoot 8a5e75a8 Vads 146 Clone 0 Private 523. Modified 0. Locked 0.
    DeviceMap e1001140
    Token                             e2312030
    ElapsedTime                      01:07:54.140
    UserTime                          00:00:00.109
    KernelTime                        00:00:00.718
    QuotaPoolUsage[PagedPool]         42304
    QuotaPoolUsage[NonPagedPool]      7208
    Working Set Sizes (now,min,max)  (1919, 50, 345) (7676KB, 200KB, 1380KB)
    PeakWorkingSetSize                1921
    VirtualSize                       39 Mb
    PeakVirtualSize                   40 Mb
    PageFaultCount                    2428
    MemoryPriority                    BACKGROUND
    BasePriority                      13
    CommitCharge                      825

-----------------------------------------------------------------------------------------------------------
Le process winlogon 89a3d7b8 est le plus récent et correspond à la dernière demande d'ouverture de session.
ElapsedTime est calculé à partir de la date d'analyse du dump, pas du boot de la machine

-----------------------------------------------------------------------------------------------------------

kd> !process 89a3d7b8  7
PROCESS 89a3d7b8  SessionId: 3  Cid: 0f2c    Peb: 7ffd8000  ParentCid: 0118
    DirBase: 1e029000  ObjectTable: e1b73cf0  HandleCount: 231.
    Image: winlogon.exe
    VadRoot 8a5e75a8 Vads 146 Clone 0 Private 523. Modified 0. Locked 0.
    DeviceMap e1001140
    Token                             e2312030
    ElapsedTime                       01:07:54.140
    UserTime                          00:00:00.109
    KernelTime                        00:00:00.718
    QuotaPoolUsage[PagedPool]         42304
    QuotaPoolUsage[NonPagedPool]      7208
    Working Set Sizes (now,min,max)  (1919, 50, 345) (7676KB, 200KB, 1380KB)
    PeakWorkingSetSize                1921
    VirtualSize                       39 Mb
    PeakVirtualSize                   40 Mb
    PageFaultCount                    2428
    MemoryPriority                    BACKGROUND
    BasePriority                      13
    CommitCharge                      825

        THREAD 89a04b40  Cid 0f2c.0c5c  Teb: 7ffdf000 Win32Thread: e1f04c58 WAIT: (Unknown) UserMode Non-Alertable
            89a04d2c  Semaphore Limit 0x1
        Waiting for reply to LPC MessageId 00159075
        Current LPC port e12da770
        Impersonation token:  e1d54030 (Level Impersonation)
        DeviceMap                 e1c55d50
        Owning Process            89a3d7b8       Image:         winlogon.exe
        Attached Process          N/A            Image:         N/A
        Wait Start TickCount      16560871       Ticks: 221786 (0:00:57:45.406)
        Context Switch Count      436                 LargeStack
        UserTime                  00:00:00.046
        KernelTime                00:00:00.531
        Start Address 0x0103e1b0
        Stack Init ba250000 Current ba24fc20 Base ba250000 Limit ba24b000 Call 0
        Priority 15 BasePriority 15 PriorityDecrement 0
        Kernel stack not resident.
        ChildEBP RetAddr  Args to Child             
        ba24fc38 808202b6 89a04b40 89a04be8 00000301 nt!KiSwapContext+0x25 (FPO: [Uses EBP] [0,0,4])
        ba24fc50 8081fb6e 89a04d2c 89a04d00 89a04b40 nt!KiSwapThread+0x83 (FPO: [0,2,0])
        ba24fc94 80915355 89a04d2c 00000011 80912701 nt!KeWaitForSingleObject+0x2e0 (FPO: [5,12,4])
        ba24fd50 8082350b 00000344 000a0228 00118c80 nt!NtRequestWaitReplyPort+0x776 (FPO: [SEH])
        ba24fd50 7c82860c 00000344 000a0228 00118c80 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ ba24fd64)
WARNING: Frame IP not in any known module. Following frames may be wrong.
        0006e9e8 00000000 00000000 00000000 00000000 0x7c82860c

        THREAD 89ac2598  Cid 0f2c.0868  Teb: 7ffdc000 Win32Thread: e1cd8b50 WAIT: (Unknown) UserMode Non-Alertable
            89ac2784  Semaphore Limit 0x1
        Waiting for reply to LPC MessageId 001590f4:
        Current LPC port e19d14aa
        Not impersonating
        DeviceMap                 e1001140
        Owning Process            89a3d7b8       Image:         winlogon.exe
        Attached Process          N/A            Image:         N/A
        Wait Start TickCount      16562150       Ticks: 220507 (0:00:57:25.421)
        Context Switch Count      51                 LargeStack
        UserTime                  00:00:00.000
        KernelTime                00:00:00.000
        Win32 Start Address 0x7c839f2b
        Start Address 0x77e617ec
        Stack Init b9f33000 Current b9f32c20 Base b9f33000 Limit b9f2f000 Call 0
        Priority 14 BasePriority 13 PriorityDecrement 0
        Kernel stack not resident.
        ChildEBP RetAddr  Args to Child             
        b9f32c38 808202b6 89ac2598 89ac2640 00000701 nt!KiSwapContext+0x25 (FPO: [Uses EBP] [0,0,4])
        b9f32c50 8081fb6e 89ac2784 89ac2758 89ac2598 nt!KiSwapThread+0x83 (FPO: [0,2,0])
        b9f32c94 80915355 89ac2784 00000011 e1b6f701 nt!KeWaitForSingleObject+0x2e0 (FPO: [5,12,4])
        b9f32d50 8082350b 000003a8 000878f0 000878f0 nt!NtRequestWaitReplyPort+0x776 (FPO: [SEH])
        b9f32d50 7c82860c 000003a8 000878f0 000878f0 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ b9f32d64)
WARNING: Frame IP not in any known module. Following frames may be wrong.
        0055f7f8 00000000 00000000 00000000 00000000 0x7c82860c

[...] + d'autres threads inintéressants

-----------------------------------------------------------------------------------------------------------
Plusieurs threads de winlogon en attente LPC.
-----------------------------------------------------------------------------------------------------------

kd> !LPC message 00159075
Searching message 159075 in threads ...
    Server thread 8a415468 is working on message 159075                        
Client thread 89a04b40 waiting a reply from 159075                         
Searching thread 89a04b40 in port rundown queues ...

Server communication port 0xe1cff3f0
    Handles: 1   References: 1
    The LpcDataInfoChainHead queue is empty
        Connected port: 0xe12da770      Server connection port: 0xe1455428

Client communication port 0xe12da770
    Handles: 1   References: 2
    The LpcDataInfoChainHead queue is empty

Server connection port e1455428  Name: AELPort
    Handles: 1   References: 13
    Server process  : 8a466d88 ( svchost.exe)
    Queue semaphore : 8a616e48
    Semaphore state 0 (0x0)
    The message queue is empty

    Messages in LpcDataInfoChainHead:
        0000 e1954330 - Busy  Id=00074ed6  From: 0328.0e7c  Context=00000614  [e14554a8 . e1a945d8]
                   Length=00880070  Type=00480001 (LPC_REQUEST)
                   Data: 00000328 00000e7c 00000001 00000000 00000000 00000000
        0000 e1a945d8 - Busy  Id=001582c8  From: 0f2c.0b34  Context=00000f30  [e1954330 . e227c150]
                   Length=00900078  Type=00640001 (LPC_REQUEST)
                   Data: 00000f2c 00000b34 00000000 00000000 00000000 00000000
        0000 e227c150 - Busy  Id=00159075  From: 0f2c.0c5c  Context=00000fac  [e1a945d8 . e14554a8]
                   Length=00900078  Type=00640001 (LPC_REQUEST)
                   Data: 00000f2c 00000c5c 00000000 00000000 00000000 00000000
    The LpcDataInfoChainHead queue contains 3 messages
    Threads in RunDown queue :     0xe1954170    0xe1a94418    0xe227bf90
Done. 

-----------------------------------------------------------------------------------------------------------
Le process serveur est svchost.
Le nom du port LPC est AELPort, utilisé par Aelookupsvc

-----------------------------------------------------------------------------------------------------------                                           
kd>!thread 8a415468
THREAD 8a415468  Cid 0328.0434  Teb: 7ffa3000 Win32Thread: 00000000 WAIT: (Unknown) UserMode Non-Alertable
    8a616e48  Semaphore Limit 0x7fffffff
Not impersonating
DeviceMap                 e1001140
Owning Process            8a466d88       Image:         svchost.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      16560871       Ticks: 221786 (0:00:57:45.406)
Context Switch Count      98            
UserTime                  00:00:00.000
KernelTime                00:00:00.015
Win32 Start Address 0x00159075
LPC Server thread working on message Id 159075
Start Address 0x4c594a20
Stack Init ba44c000 Current ba44bc0c Base ba44c000 Limit ba449000 Call 0
Priority 9 BasePriority 8 PriorityDecrement 0
Kernel stack not resident.
ChildEBP RetAddr  Args to Child             
ba44bc24 808202b6 8a415468 8a415510 00000301 nt!KiSwapContext+0x25 (FPO: [Uses EBP] [0,0,4])
ba44bc3c 8081fb6e ba44bd64 00000000 808a85a0 nt!KiSwapThread+0x83 (FPO: [0,2,0])
ba44bc80 80910228 8a616e48 00000010 ba44bd01 nt!KeWaitForSingleObject+0x2e0 (FPO: [5,12,4])
ba44bd30 80910c5c 00000424 0155fff0 00000000 nt!NtReplyWaitReceivePortEx+0x521 (FPO: [SEH])
ba44bd4c 8082350b 00000424 0155fff0 00000000 nt!NtReplyWaitReceivePort+0x18 (FPO: [4,0,0])
ba44bd4c 7c82860c 00000424 0155fff0 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ ba44bd64)
WARNING: Frame IP not in any known module. Following frames may be wrong.
0155fff4 00000000 00000000 00000000 00000000 0x7c82860c

-----------------------------------------------------------------------------------------------------------
Ticks du thread serveur:221786 (0:00:57:45.406)
Ticks Winlogon : 221786 (0:00:57:45.406)

Il sont égaux.
Winlogon est bien en attente (donc logon freezé) de la réponse LPC depuis 57 minutes.

----------------------------------------------------------------------------------------------------------- 

Conclusion:

Le problème est causé par le service AeLookupSvc (Application Experience Lookup Service) qui est freezé.

2 Solutions:

 - Le correctif MS08-067 corrige indirectement le problème.

- Vous pouvez également désactiver Application Compatibility Engine par GPO. (Computer Configuration / Administrative Templates / Application Compatibility / Turn Off Application Compatibility Engine ).

 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Nettoyage des comptes inactifs de l'Active Directory

by Emmanuel Dreux juillet 08, 2009 23:03

Sans solution de provisionning et de workflow performant, le nombre de comptes utilisateurs inactifs dans l'Active Directory va vite devenir important.

Développement script ADSI

Sécurité ADSI : Liste Objets AD : Users, Groups, Computers, Utilisateurs, groupes, ordinateurs

Il s'agit d'utilisateurs qui ont quitté la société, de comptes utilisateurs qui ne sont plus utilisés ou de machines qui ont été recyclées mais dont les objets existent toujours dans l'AD.

disable accounts désactivation de comptes

Nettoyage comptes inactifs

Pour déterminer si un compte est toujours utilisé ou non, il existe deux moyens simples qui peuvent d'ailleurs être complémentaires et recupés ensembles.

Il s'agit par exemple de s'appuyer sur l'attribut LastLogonTimeStamp (à partir de Windows 2003) qui stocke la date de dernier logon du compte. Cet attribut est répliqué sur tous les dc du domaine.

La seconde données intéressante est la date de dernier changement de mot de passe. Une machine change son mot de passe tous les 30 jours. Si un ordinateur n'a pas changé son mot de passe depuis par exemple 60 ou 90 jours, il y a de fortes chances que cette machine n'existe plus sur le domaine.

Voici un ensemble de scriptsqui permet de générer la liste des utilisateurs et ordinateurs inactifs (stale accounts dans le jargon anglosaxon) et de réaliser le nettoyage (le script recensé désactive le compte et le déplace dans une OU de quarantaine. La date d'action et le chemin source de l'objets sont stockés dans des attributs inutilisés pour un éventuel retour arrière).

Développement script ADSI

Stale Accounts

Liste les objets Users, groups et computers de l'AD :

Développement script ADSI

Comptes inactifs, Comptes désactivés

Liste les comptes inactifs de l'AD

Liste les comptes désactivés de l'AD

Développement script ADSI nettoyage AD

LastLogonTimeStamp, Last Password Change

Désactive les comptes inactifs de l'AD

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Active Directory

Page de test Kerberos et de délégation ASPX

by Emmanuel Dreux juin 11, 2009 22:50

Utile, cette page permet de vérifier le protocole d''authentification utilisé lors d'un accès à un serveur web IIS. Il permet de vérifer par exemple si l'accès se fait en Kerberos.

Copier simplement le contenu suivant dans un fichier et nommez le identity.aspx. Créez également un fichier web.config, et placez les 2 fichiers dans le même répertoire.

Le lien suivant permet de télécharger cet exemple ainsi qu'un exemple additionnel de test de délégation Kerberos.

La page frontal.aspx essaie de lire un fichier sur un serveur tierce en utilisant l'identité du client. Pour le faire fonctionner, créer un fichier de test sur un serveur distant, partagez le et donnez les permissions uniquement à l'utilisateur. S'il arrive à le lire à travers la page frontal.aspx, c'est que la délégation Kerberos fonctionne. Modifiez le paramètre identity impersonate pour voir les différences de comportement.

Download 

-------------------------------------------------    web.config ---------------------------------

<configuration>
  <system.web>
    <authentication mode="Windows"/>
    <authorization>
        <deny users="?" /> <!-- Deny anonymous users -->
    </authorization>
    <identity impersonate="false" />
    <compilation debug="true"/>
  </system.web>
</configuration>

----------------------------------------------        identity.aspx        -----------------------

<%@ Page language="VB" %>

<%@ Import namespace = "System.web" %>


<script language="VB" runat="server">

   Dim AuthLength
   Dim AuthOther

  public sub page_Load( Obj as Object, e as Eventargs)
     Authuser.text= HttpContext.Current.User.Identity.Name().Tostring
    ThreadId.text= System.Security.Principal.WindowsIdentity.Getcurrent().name().Tostring()
 
   ' Get the authentication method being used
   AuthMethod.text = Request.ServerVariables("AUTH_TYPE")
   AuthLength = Request.ServerVariables("HTTP_Authorization")

  ' If some other authentication method (other than Negotiate) gets used, call it "Other"
   If LTrim(RTrim(AuthMethod.text)) <> "Negotiate" Then AuthOtherMethod

   ' If Negotiate gets used, go straight to the subroutine to handle it
   If LTrim(RTrim(AuthMethod.text)) = "Negotiate" Then AuthNegotiateMethod

  End sub

Sub AuthOtherMethod()
       ' Since anonymous authentication will be blank, let's be sure we realize it's enabled to
       If LTrim(RTrim(AuthMethod.text)) = "" Then AuthMethod.text = "Anonymous"
End Sub

Sub AuthNegotiateMethod()
       ' Typically, NTLM will yield a 150 - 300 byte header, while Kerberos is more like 5000 bytes
       If LEN(AuthLength) > 1000 Then AuthType.text = "Kerberos"
       If LEN(AuthLength) < 1000 Then AuthType.text = "NTLM"
End Sub
</script>

<html>
<body>
Authentication Method : <asp:label id=AuthMethod runat=server /><br>
Protocole : <asp:label id=AuthType  runat=server /><br>
Authenticated user: <asp:label id=Authuser runat=server /><br>
Thread identity   : <asp:label id=ThreadId runat=server />

</body>
</html>

 

 

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

Migration

PRA : Restauration d'une forêt Active Directory

by Emmanuel Dreux mai 17, 2009 00:56

Blog PRA Active Directory

Forest Recovery

Lors d'un désastre Active Directory nécessitant une reconstruction complète de la forêt, la première chose à réaliser est de restaurer le service au plus vite, en l'occurence le service d'authentification.

Blog PRA Active Directory

Forest Recovery

Le minimum à réaliser consiste à réinstaller un DNS sur lequel va s'appuyer l'AD, un controleur de domaine du domaine racine, un controleur de domaine de chaque domaine enfant ainsi qu'un global catalogue. A ce stade, le service minimum est restauré, les étapes suivantes consistent reconstruire un DC dans chaque site puis remonter tous les DC, et remettre en place les rôles FSMO.

Pour que le service d'authentification soit complètement opérationnel, celà nécessite également dans la majorité des cas qu'un catalogue global soit accessible (cas d'une forêt en mode natif nécessitant un GC pour résoudre l'appartenance aux groupe universels).

Forest Recovery

Cependant, savez-vous que pour promoter un GC, le rôle FSMO Schema Master doit être accessible? Celà implique donc que le DC possédant ce rôle devrait être restauré avant toute tentative de restauration de GC. Si la sauvegarde de ce DC n'est pas accessible, il est possible de forcer ce rôle sur un DDC (Seizure). Cependant la seizure de ce rôle nécessite d'être dans le groupe Schema Owner.

PRA Active Directory

Chez un de mes clients, le scénario suivant est survenu: ils avaient retiré le compte Administrator du groupe Schema Owner. Après restauration du premier DC, première surprise, l'administrateur ne peut seizer ce rôle, ni modifier le contenu de ce groupe, ni même se loguer avec un compte possédant les droits puisqu'aucun GC n'est disponible. Comment faire alors pour installer le premier GC de la forêt?

Solution

1. Se placer dans le contexte LocalSystem du DC

Sur le serveur, ou dans une console système (mstsc /console), dans une invite de commande, lancez la commande at /interactive hh:mm cmd.exe hh:mm représentant l'heure actuelle+ 2 minutes.

2. Lancez adsiedit.msc dans le contexte système.

Lorsque l'invite de commande apparait dans le contexte système, tapez adsieedit.msc puis appuyez sur Entrée.

Chargez la partition schema puis modifiez manuellement le DC possédant le rôle Schema Master (Attribut FSMORoleOwner de CN=SCHEMA,CN=Configuration,DC=...)

Forest Recovery

 

Blog PRA Active Directory

La prise en compte est dynamique.

A ce stade, vous avez seizé le rôle Schema Master sur le DC que vous avez restauré sans pour autant appartenir au groupe qui donne cette autorisation.

 Maintenant que le rôle est assigné, vous pouvez promoter un GC.

Promotion du GC

Bien que tous les domaines ne soient pas encore restaurés, il est possible de  promoter un GC "vide". Normalement il ne s'annoncera comme GC seulement lorsqu'il aura réussi à répliquer une fois la partition de chaque domaine.

Il est cependant possible de changer ces contraintes en éditant la clé de registre

HKEY_LOCAL_MACHINE \ SYSTEM \ Current Control Set \ Services \ NTDS \ Parameters \ Global Catalog Partition Occupancy. En la positionnant à zéro, vous indiquez au système qu'il peut s'annoncer en tant que GC dès que 0 partitions sont disponibles.

Promotez maintenant votre GC, il s'annonce immédiatement en tant que GC bien qu'il ne possède que la partition de votre domaine.

Vérification:

Lancez LDP, cliquez sur Connect et laissez les entrées à vide, cliquez ensuite sur Bind et laissez les entrées à vide.

Vous êtes alors connecté au DC qui vous affiche alors ses  capacités.

Regardez la valeur de 'attribut :

                1> isGlobalCatalogReady: True;

 

 

 

Votre domaine racine est maintenant opérationnel et poss_de un premier GC. Ses utilisateurs peuvent désormais s'authentifier.

Vous pouvez maitenant restaurer un DC de chaque domaine pour restaurer les domaines un par un ou utiliser vos outils ou scripts de Forest Recovery pour dérouler la suite de votre PRA (Plan de reprise d'acitvité).

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Active Directory | PRA

Configuration IIS pour la délégation et l'authentification Kerberos

by Emmanuel Dreux mai 08, 2009 22:16

Configurer l'authentification intégrée Windows dans IIS n'est pas en soi très compliqué. Les scénarios se compliquent cependant lorsqu'il s'agit de mettre en place Kerberos sur des serveurs mutualisés ou sur des fermes de serveurs Web.

Configuration IIS pour Délégation Kerberos

Délégation Kerberos

Configuration IIS

 Ce billet décrit pas à pas la configuration à mettre en place.

1. Configuration de l'identité de l'application Pool.

L’authentification Kerberos ne fonctionnera pas dans le cas d’une ferme de serveurs IIS dont les application pool s’exécuteraient sous Network Service ou Local Sytem/Service  car le SPN nécessaire à l'authentification Kerberos ne pourrait pas être enregistré sur les différents compte d'ordinateur de la ferme.

Configuration IIS pour Délégation Kerberos

Pour permettre l'authentification Kerberos sur une ferme Web ( Ferme NLB, boitier F5 etc.), l'application Pool d'IIS doit s'exécuter sous l'identité du même compte utilisateur du domaine sur chaque serveur. Le SPN correspondant à l'URL de connexion sera enregistré sur ce compte. Dans cette configuration, le navigateur peut demander un ticket Kerberos pour la chaine SPN spécifiée et présenter le ticket Kerberos à chaque noeud de la ferme web puisque chauqe noeud tourne sous le même compte d'utilisateur du domaine.

Délégation Kerberos

Dans l'Active Directory, créez simplement un compte utilisateur, dit compte de service, et positionnez les flags « User cannot Change Password » et « Password never expires ».

2. Configuration d'IIS

Créez ensuite dans IIS un nouveau pool d'application et définissez comme identité le compte que vous venez de créer. 

Configuration Application Pool IIS

Créez ensuite le site web, puis configurez le pour s’exécuter dans le pool d’application précédemment configuré.


Configuration IIS

Cas particulier: Environnement mutualisé

 

Dans le cas où le serveur héberge plusieurs sites IIS, il faut pouvoir séparer les instances de IIS.
Celà peut être réalisé de 2 manières:
-    soit en les différençiant grâce à un numéro de port différent.
-    soit en les différençiant par le host header.

La première solution presente le désavantage d’avoir à manipuler des numéros de port nécessaires pendant la construction du SPN. Les navigateurs se comportant différemment, certains risquent de ne pas passer le numéro de port pendant la construction du SPN, au final le SPN demandé ne sera pas trouvé ou un ticket Kerberos pour le mauvais compte sera retourné par l'AD. De plus, il risque sur la route d'y avoir des réécritures de port: (ex à travers un boitier F5) et le port passé dans la construction du SPN par le client ne sera pas nécessairement celui enregistré dans le SPN dans l'AD.

Afin d’avoir une meilleure maitrise de la solution  et s’assurer d’une configuration qui fonctionne dans tous les cas, la  seconde solution  est à privilégier lorsque c’est posible. Elle nécessite la configuration du Host Header dans le site IIS.
Dans le scénario le plus simple, ce host header doit correspondre à une entrée de type A (host) dans le DNS (et pas une entrée de type CNAME (Alias) dans le DNS) et être enregistré au niveau des SPN sur le compte de service de l’application pool. 

Configuration du host header

Ainsi, lorsque le navigateur Internet Explorer, demande l’URL http://portaldns, il demande un ticket kerberos pour le SPN http/portaldns enregistré sur le compte de service domAD\svcdnsadmin. Il le presente alors au serveur IIS qui grâce au host header portaldns redirige la requête vers la bonne instance.
Si un alias est enregistré au niveau host header, le spn associé à l’entrée de type host correspondant à l’alias DNS doit également être enregistré en tant que SPN.
Vous pouvez placer plusieurs host headers sur un même instance IIS (ie plusieurs URL d’accès).

Importance du Host vs ALIAS DNS

 

Les navigateurs se comportent tous différemment.

Ainsi, lors de la construction du SPN, Internet Explorer fait une résolution DNS du nom de serveur spécifié dans l'URL et construit par défaut un SPN de type host/fqdn ou fqdn est le nom de host (type A) présent dans le DNS, même si dans l'URL un alias DNS (type CNAME) a été spécifié. en d'autre terme, si vous demandez http://alias, le spn construit sera http/host. Le mécanisme peut être inversé par le biais d'un htofix. Je ne recommande personnellement pas la modification de ce comportement. Il est en effet élégant d'avoir à n'enregistrer qu'un seul SPN dans l'AD (celui du host) et de pouvoir avoir une multitude d'aliases. Firefox par contre utilise le nom passé dans l'URL sans transformer l'alias en host.

Dans le scénario de host header, si IIS est accédé par une url contenant un alias, il faudra enregistrer en SPN le host et l'alias pour que ça fonctionne depuis n'importe quel navigateur.

3. Configuration supplémentaire

 A ce stade,ça ne fonctionne pas encore. Il faut donner les bonnes permissions au compte de service sur le serveur. Le compte de service nouvellement crée a besoin de permissions sur la metabase IIS et de permissions sur le répertoire temporaire %Windir%\Microsoft.NET\Framework\version\Temporary ASP.NET
La commande aspnet_regiis –ga réalise ces 2 opérations. Lancez: aspnet_regiis -ga Domain\AccountName

Ensuite, rajoutez le compte d’identité du pool d’application IIS dans le groupe local IIS_WPG.

Rajoutez maintenant les SPN requis sur le compte de service du pool d'application à l'aide de la commande setspn. Ex:

setspn -a http/portaldns domAD\svcportaladmin et setspn -a http/alias  domAD\svcportaladmin enregistrent les SPN pour le host et l'alias sur le compte de service. Celà permet de faire fonctionner kerberos dans la majorité des cas. Plusieurs aliases peuvent être ajoutés.

 4. Délégation Kerberos

Pour terminer, la délégation Kerberos doit être mise en place. Le compte de service doit être approuvé pour la délégation (Trusted for Delegation) dans l'Active Directory et pour des raisons de sécurité, les contraintes de délégation doivent être mises en place, c'est à dire lister uniquement les TGS Kerberos (représentés par les SPN)  que le compte de service est autorisé à demander.   

Le compte de service nouvellement crée a besoin de permissions sur la metabase IIS et de permissions sur le répertoire temporaire %Windir%\Microsoft.NET\Framework\version\Temporary ASP.NET

La commande aspnet_regiis –ga réalise ces 2 opérations. Lancez:
aspnet_regiis -ga Domain\AccountName
 

Contrainte de délégation

Dans le cas d’une application ASP.NET, le fichier web.config doit être configuré de la façon suivante : http://support.microsoft.com/kb/810572
Bien évidemment, pour que la délégation Keberos fonctionne, cela nécessite au préalable une authentification du poste client et donc désactivation de l’authentification anonyme et l’activation de l’authentification intégrée.


Authentification IIS

Au niveau Internet Explorer, l’authentification intégrée doit être activée, et l’URL résolue en tant que site Intranet (c’est souvent le proxy.pac qui détermine si l’url est locale ou non).

IE Authentification intégrée

Actuellement noté 5.0 par 1 personne(s)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Kerberos