Quelle stratégie pour sécuriser les mots de passe des comptes utilisateurs Active Directory ?

Bonjour à tous

La sécurité des mots de passe des comptes utilisateurs est une question de sécurité majeure.
Des outils de recherche brut force comme John The Ripper perttent de retyrouver facilement un mot de passe simple (moins de 4 caractères et basé sur des mots du dictionnaire). Pour plus d’informations, voir http://syskb.com/cracker-un-mot-de-passe-active-directory-avec-fgdump-et-john/
Un compte utilisateur standard dispose :
– D’un accès en lecture à 90% des propriétés des objets de tous les domaines de la forêt Active Directory.
– D’un accès en lecture à la partition de configuration Active Directory.
– D’un accès à tous les dossiers sécurisés à l’aide des groupes “Utilisateurs authentifiés” et “Utilisateurs du domaine”. Par défaut sous Windows 2003, le groupe “Utilisateurs authentifiés” peut lire les fichiers et écrire de nouveau fichiers sur tous les disques de données.
Avec un compte standard un pirate peut :
– Elaborer une attaque plus ciblée car il dispose de la configuration de l’annuaire et de la configuration réseau (via l’analyse de la configuration des sites Active Directory)
– Exécuter de nombreuses attaques basées sur des failles applicatives. La majorité des attaques nécessitent un accès en lecture seul au service attaqué (SMB, IIS). Le portail METASPLOIT intègre une attaque par exemple qui fait planté un serveur Windows 2008 R2 (écran bleu) via un accès en lecture seul à un partage. Pour plus d’informations, voir :
http://www.metasploit.com/modules/exploit/windows/smb/smb_relay
Nous venons donc de voir l’importance de sécuriser les mots de passe des comptes utilisateurs. Nous allons maintenant voir comment faire.

1. DIFFERENCE ENTRE CHANGEMENT DE MOT DE PASSE ET REINITIALISATION DU MOT DE PASSE :
Le premier point à comprendre est la différence entre le changement d’un mot de passe et sa réinitialisation.
La procédure de changement de mot de passe nécessite que l’utilisateur saisisse l’ancien et le nouveau mot de passe.  La fenêtre de changement de mot de passe apparaît quand le mot de passe de l’utilisateur a expiré une fois que l’utilisateur s’est authentifié (après la mire d’ouverture de session) ou quand l’utilisateur fait CTRL ALT SUPPR et clique sur « Modifier le mot de passe ».
La réinitialisation d’un mot de passe peut se faire depuis la console Utilisateurs et Ordinateurs Active Directory ou Centre d’administration Active Directory (compte Active Directory) ou via la console Gestion de l’ordinateur (compte de la BASE SAM locale). Il n’est pas nécessaire de connaître l’ancien mot de passe. Cette action est effectuée par les équipes informatiques et non par les utilisateurs.
Attention, dans certains cas,  la réinitialisation de mot de passe d’un compte de la base SAM fait perdre l’accès aux données chiffrées avec EFS lorsque la machine est en groupe de travail. Pour plus d’informations voir : http://support.microsoft.com/kb/290260/en-us

2. LES PARAMETRES DE STRATEGIE DE MOT DE PASSE :
Active Directory permet de définir les paramètres suivant pour le mot de passe des comptes utilisateurs du domaine :
Historique des mots de passe : ce paramètre permet d’empêcher les utilisateurs de réutiliser le même mot de passe lorsque le mot de passe expire ou lorsque l’utilisateur change son mot de passe.
Durée de vie minimale du mot de passe : ce paramètre permet d’empêcher l’utilisateur de changer son mot de passe après changement pendant un certain nombre de jours. Ce paramètre permet surtout d’empêcher les utilisateurs de changer plusieurs fois leurs mots de passe successivement pour contourner l’historique de mot de passe. Sans ce paramètre activé, avec un historique de mots de passe définis sur 5 mots de passe, il suffit un utilisateur de changer 6 fois de suite son mot de passe pour pouvoir continuer à utiliser son mot de passe actuel.
Durée de vie maximale du mot de passe : le mot de passe expirera au bout d’un certain nombre de jours (par défaut 42). L’utilisateur sera invité à l’ouverture de session à changer son mot de passe.
Longueur minimum du mot de passe : ce paramètre définit le nombre de caractères minimums du mot de passe.
Les mots de passe doivent respecter les exigences de complexité : ce paramètre permet d’obliger les utilisateurs à définir un mot de passe qui contient 3 des 4 familles de caractères. Les 4 familles de caractères sont lettres minuscules (a à z), lettres majuscules (A à Z), les chiffres (0 à 9) et les caractères spéciaux (@é#è?…). Nous verrons que les options de complexité des mots de passe Active Directory sont trop faibles pour vraiment sécuriser les mots de passe. Exemple de mot de passe complexe pas vraiment sécurisé : P@ssword

3. LES NOUVEAUTES DU MODE NATIF 2008 :
Par défaut les stratégies de mots de passe se définissent au niveau de la stratégie « Default Domain Policy » uniquement. Si vous définissez une stratégie de mot de passe au niveau d’une OU, cette dernière s’applique en fait aux comptes de la base SAM locale des machines dont le compte ordinateur est dans cette OU.
Pour plus d’informations, voir article : http://msreport.free.fr/?p=156
Si votre domaine est en mode natif 2008 et ultérieur, il est possible d’activer les stratégies de mot de passe fines (Granular Password Policy).
Le schéma Active Directory inclue deux nouvelles classes d’objets qui sont activées en mode natif 2008 :
– Password Settings Container
– Password Settings.
Les stratégies de mot de passe fines sont donc un mécanisme parallèle aux stratégies de mot de passe classiques (qui ne peuvent toujours être définies qu’un niveau de la stratégie de groupe Default Domain Policy).
Ce mécanisme permet d’affecter une stratégie de mot de passe spécifique à un compte utilisateur ou un groupe. Les paramètres de stratégies (historique, durée de vie minimum, maximum, complexité de mot de passe) sont identiques avec les stratégies de mots de passe fines.
Pour créer les stratégies de mots de passe fine, il faut utiliser ADSIEDIT et appliquer la procédure suivante : http://www.windowsecurity.com/articles/Configuring-Granular-Password-Settings-Windows-Server-2008-Part-1.html
Il existe heureusement des outils gratuits pour faire cela en interface graphique comme SPECOPS PASSWORD POLICY BASICS. Pour plus d’information, voir http://www.specopssoft.com/
Pour plus d’informations sur les stratégies de mots de passe fine (Granular Password Policy), voir les articles suivants :
http://technet.microsoft.com/en-us/library/cc770394(WS.10).aspx
http://technet.microsoft.com/en-us/library/cc770842(WS.10).aspx
http://www.windowsecurity.com/articles/Configuring-Granular-Password-Settings-Windows-Server-2008-Part-1.html

4. COMMENT AMELIORER LE FILTRE DE COMPLEXITE DES STRATEGIES DE MOTS DE PASSE :
Quand nous l’avons vu le filtre de complexité de la stratégie de mot de passe est assez basique.
Voir l’article http://technet.microsoft.com/fr-fr/library/cc786468(WS.10).aspx
En effet, Active Directory considère que les mots de passe suivant sont complexes : Password01 ou Proservia01
Il est possible de personnaliser le filtre de stratégie de mot de passe en réécrivant la DLL passfilt.dll.
Les liens ci dessous contiennent des exemples de fichier passfit.dll modifiés et les explications sur le fonctionnement de cette DLL. Attention, développer / implémenter une passfilt.dll modifiée sans le support d’un éditeur tiers est très dangereux. Je vous invite à partir sur une solution payante sauf si vous disposez en interne d’une équipe de développeur compétent.
http://identitycontrol.blogspot.com/2007/10/inside-active-directory-password-filter.html
http://msdn.microsoft.com/en-us/library/ms721882(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms721849(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms721884(VS.85).aspx
http://www.devx.com/security/Article/21522/0/page/1
http://www.codeproject.com/KB/winsdk/LoginFilter.aspx
http://ntsecurity.nu/toolbox/strongpass/
Il existe de nombreuses solutions payantes comme nFront Password Filter, Specops Password Policy qui font cela très bien (mais c’est cher !).
http://nfrontsecurity.com/products/nfront-password-filter/
http://www.specopssoft.com/products/specops-password-policy

5. LES BONNES PRATIQUES POUR LA STRATEGIE DE MOTS DE PASSE :
Quels sont les risques :
– Une stratégie de mot de passe trop faible expose la société à un risque de piratage des mots de compte utilisateur via une attaque brute force. Un script essaie automatiquement des milliers de mots de passe en se basant sur les mots du dictionnaire.
– Une stratégie de mot de passe trop complexe expose la société à des comportements inappropriés de la part des utilisateurs. Ces derniers finissent par écrire le mot de passe en dessous de leur clavier ce qui est finalement encore moins sécurisé qu’un mot de passe faible. Qui est en effet capable de retenir ce mot de passe : 1ju9N4V87Nh54iI ?

En général, je préconise la stratégie suivante :
Historique de mot de passe : 24
Durée de vie maximum du mot de passe : 42 jours
Durée de vue minimale du mot de passe : 1 jour
Longueur du mot de passe : 8 caractères
Complexité du mot de passe : activé. Il peut être intéressant d’investir dans des logiciels additionnels pour disposer d’un dictionnaire avec des mots de passe interdits comme Password01 ou les noms propres.
Si vous souhaitez aller au-delà en terme de sécurité des mots de passe, je vous préconise de partir sur une solution d’authentification avec des cartes à puces (SMART CARD). Pour plus d’informations, voir :
http://technet.microsoft.com/fr-fr/library/ff404294(WS.10).aspx
Attention, lire les articles suivants si vous utilisez une autorité de certification non Microsoft comme OpenTrust CA :
http://blogs.technet.com/b/instan/archive/2011/05/17/smartcard-logon-using-certificates-from-a-3rd-party-on-a-domain-controller-and-kdc-event-id-29.aspx
http://support.microsoft.com/kb/281245/en-us
http://support.microsoft.com/kb/291010/en-us

Enfin la règle d’or est de faire valider la stratégie de mots de passe par la direction.
En effet il est important que les utilisateurs adhèrent à la stratégie de mots de passe de l’entreprise (ils ne doivent pas noter leur mot de passe derrière leur clavier). Pour cela, la direction doit communiquer, établir un règlement (charte informatique) et prévoir des sanctions disciplinaires en cas d’infraction majeur.

6. LA PROCEDURE DE CHANGEMENT / REINITIALISATION DES MOTS DE PASSE :
Maintenant que l’on a vu les solutions techniques pour sécuriser les mots de passe, on va parler de la procédure de réinitialisation des mots de passe qui reste un point noir au niveau de la sécurité.
Pour rappel, on réinitialise le mot de passe d’un compte utilisateur quand l’utilisateur ne se rappelle plus de son mot de passe ou quand le mot de passe a expiré et que l’utilisateur ne peut pas effectuer un login classique pour appliquer la procédure de changement du mot de passe (cas des utilisateurs externes à l’entreprise qui se connectent à des applications web publiées sur Internet).
Dans la majorité des entreprises, cette action est à la charge de la hotline, parfois même d’une hotline externalisée à l’autre bout de la planète. L’équipe HOTLINE ne connaît donc pas les utilisateurs.
Il est donc très simple de se faire passer pour une employée de l’entreprise et d’obtenir le mot de passe de cette personne. Pour se prémunir de ce problème, certaines entreprises imposent à l’utilisateur de répondre à certaines questions personnelles. Cependant la gestion de ce questionnaire reste très complexe.
C’est là qu’interviennent des outils tiers comme nFront Web Password Change ou Specops Password Reset. Ces outils permettent aux utilisateurs de réinitialiser leur mot de passe depuis la mire d’ouverture de session ou depuis un portail web à l’aide d’un formulaire à base de questions / réponses :
http://www.specopssoft.com/products/specops-password-reset
http://nfrontsecurity.com/products/nfront-web-password-change/

A+
Guillaume MATHIEU
PROSERVIA
La connaissance s’accroît quand on la partage
http://msreport.free.fr

Publié dans Active Directory, Annuaire, Outils, Sécurité, Système, Windows 2003 Server, Windows Server 2008, Windows Server 2008 R2 | Marqué avec , , , , | 2 commentaires

Isa Server 2006 et la “Délégation Kerberos contrainte”

Salut à tous

J’ai récemment travaillé sur la mise la publication d’un site web avec Isa Server 2006 avec les contraintes suivantes :
– Les utilisateurs sur Internet doivent s’authentifier à l’aide d’une carte à puce ou d’un certificat utilisateur.
– Le serveur Isa Server doit authentifier les demandes de connexion tout comme le serveur web.
– Le serveur web (IIS) doit être configuré avec de l’authentification intégré (protocole d’authentification Kerberos ou NTLM).
– Les utilisateurs ne doivent pas avoir besoin de s’authentifier (ils insèrent uniquement leur carte à puce).
– Le flux réseau entre l’utilisateur sur Internet et le serveur Isa Server 2006 doit être chiffré (HTTPS).
– Le flux réseau entre le serveur Isa 2006 et le serveur web doit être chiffré (HTTPS).

1. AVANT DE COMMENCER :
Une version de cet article avec des captures d’écran est disponible à cet emplacement :
http://msreport.free.fr/articles/IsaServerDelegationkerberoscontrainte.pdf

2 ACTIONS A EFFECTUER SUR ISA SERVER :
On crée une règle de publication web. On va faire du pontage SSL.
Pour plus d’informations sur Isa Server, je vous invite à lire mon support de cours sur Isa Server 2006 :
http://msreport.free.fr/articles/IsaServer2006.pdf
On va configurer Isa Server pour accepter l’authentification avec des certificats de type  « Utilisateur ». Cela nécessite d’utiliser la « Délégation Kerberos contrainte ». Il n’est pas possible d’utiliser de la délégation NTLM avec les certificats client (certificat de type « Utilisateur »).
Les prérequis suivants doivent être respectés pour la mise en œuvre de la « Délégation Kerberos contrainte » :
– Le domaine doit être en mode natif 2003.
– Le serveur Isa Server 2006 et le serveur web doivent être dans le même domaine. Isa Server 2006 est donc membre du domaine !
Le correctif suivant (inclus dans le SP1) semble supprimer cette limitation mais en pratique cela ne marche pas :
http://support.microsoft.com/kb/942637/en-us.
– Il faut autoriser la fragmentation IP dans Isa Server 2006.
Les articles ci-dessous expliquent comment configurer la délégation contrainte :
http://technet.microsoft.com/en-us/library/bb794858.aspx
http://technet.microsoft.com/fr-fr/library/bb794751.aspx (Exemple avec Publication OWA)
http://technet.microsoft.com/fr-fr/library/cc786828(WS.10).aspx
Remarque :
– Il est préconisé d’installer le dernier pack de correctif Isa Server 2006 (POST SP1) : http://support.microsoft.com/kb/960148/en-us
– Pour contrôler le format de saisi du champ login / mot de passe : http://support.microsoft.com/kb/960146/en-us
– Autre problème avec la « délégation Kerberos contrainte » :
http://support.microsoft.com/kb/947124/en-us

2.1 CONFIGURATION DU PORT D’ECOUTE :
Il faut configurer le port d’écoute Isa Server au niveau de la règle de publication WEB avec la méthode d’authentification “Authentification de certificats de client SSL “. Pour cela, aller dans au niveau de la règle Isa Server, dans l’onglet “Port d’écoute“. Dans les propriétés du port d’écoute, cliquer sur l’onglet “Authentification“.
Il faut ensuite autoriser le certificat de l’autorité de certification qui a émis les certificats clients. Pour cela, toujours dans l’onglet “Authentification” du port d’écoute, cliquer sur le bouton “Configurer“. Séalectionner le certificat de l’autorité de certification qui a émis les certificats web.

2.2 CONFIGURATION DE LA DELEGATION D’AUTHENTIFICATION :
Il faut ensuite configurer la délégation d’authentification sur « Délégation Kerberos contrainte ».
Cela se configure au niveau de l’onglet “Délégation d’authentification” de la règle de publication web.
On remarquera qu’Isa Server 2006 génère un “Service Principal Name” automatiquement (champ “Entrer le nom principal de service (SPN)…“.
Il sera nécessaire de créer le SPN (Service Principal Name) au niveau du serveur web interne (même valeur que dans la règle Isa Server).

2.3 CONFIGURER LE COMPTE ORDINATEUR DU SERVEUR ISA :
Il faut approuver la délégation au niveau du compte ordinateur du serveur ISA.
Au niveau des propriétés du compte ordinateur, aller dans l’onglet “Délégation“.
Cliquer sur “N’approuver cet ordinateur que pour la délégation aux services spécifiés“.
Sélectionner “Utiliser tour protocole d’authentification“.
Cliquer sur “Affichage développé” puis cliquer sur le bouton “Ajouter“. Aller chercher le compte ordinateur du serveur web et ajouter les services WWW et HTTP.

2.4 AJOUTER LE SERVICE PRINCIPALNAME (SPN) AU NIVEAU DU COMPTE ORDINATEUR DU SERVEUR WEB :
Il faut ajouter le Service Principal Name (SPN) au niveau du serveur web.
Cela peut être fait via ADSIEDIT ou via la commande SETSPN.
ADSIEDIT (concole MMC) est disponible sur le CD d’installation de Windows 2003 Server dans les supports Tools.
C’est l’éditeur bas niveau d’Active Directory. Faire un clic droit sur l’objet correspondant au compte ordinateur du serveur web. Editer l’attribut “Service Principal Name”.
Dans notre cas, on saisit http://srvdfs5.archidfs.local (SRVDFS5.archidfs.local étant le nom de notre serveur web). Le SPN doit être identique à celui indiqué dans la règle Isa Server 2006.

2.5 RESULTATS ET PROBLEMES RENCONTREES :
2.5.1 TESTS CONNEXION AVEC UN COMPTE UTILISATEUR SITUE DANS LE MEME DOMAINE QUE LE SERVEUR WEB ET ISA SERVER :

Si un utilisateur essaie de se connecter depuis Internet, il voit une fenêtre qui lui demande de sélectionner un certificat.
En fait Internet Explorer accède au magasin de certificat utilisateur de Windows.
Pour visualiser ce magasin de certificat, cliquer sur Démarrer | Exécuter. Taper MMC.
Ajouter le composant logiciel enfichable “Certificats” et sélectionner “Compte utilisateur“. Développer la section “Personnel“. Vous pouvez alors voir vos certificats (spécfiques à votre compte utilisateur Windows).
Au niveau d’Isa Server 2006, on peut voir que la connexion est authentifiée et que c’est bien le module proxy qui est utilisé en allant dans la partie Monitoring | onglet Session. On peut créer un filtre en spécfiant l’adresse IP de la machine qui accède au site web depuis Internet.

2.5.2 TEST CONNEXION AVEC UN COMPTE SITUE DANS UN AUTRE DOMAINE :
Cela échoue si utilisation d’un compte d’un autre domaine de la forêt (pas dans le même domaine que le serveur ISA et le serveur web). On a l’erreur ci-dessous.
Event Type: Error
Event Source: Microsoft ISA Server Web Proxy
Event Category: None
Event ID: 21315
Date:  7/5/2011
Time:  2:58:30 PM
User:  N/A
Computer: SRVDFS3-R3GPSSX
Description:
ISA Server n’a pas pu déléguer d’informations d’identification au site Web publié par la règle Publication srvdfs5.archidfs.local à l’aide de la délégation Kerberos contrainte. Vérifiez que les noms principaux du service : http/srvdfs5.archidfs.local configurés dans ISA Server correspondent à ceux d’Active Directory.
Le correctif suivant (inclus dans le SP1) semble supprimer cette limitation mais en pratique cela ne marche pas :
http://support.microsoft.com/kb/942637/en-us.

a+
Guillaume MATHIEU
PROSERVIA / MSREPORT (http://msreport.free.fr)  
La connaissance s’accroît quand on la partage

Publié dans Active Directory, Certificats, IIS, Isa 2006, Isa Server, Sécurité, Windows 2003 Server | 2 commentaires

LES ENTREES / ENREGISTREMENTS DNS NE SE METTENT PAS A JOUR !

Bonjour

J’ai récemment travaillé sur des problèmes DNS (entrées DNS à jour).

DESCRIPTION DU PROBLEME :
Les entrées DNS de type A (Hôte) des stations de travail (en DHCP) et des imprimantes (en DHCP) ne se mettent pas à jour.
A T=0, la station de travail A.MSREPORT.LOCAL a l’IP 192.168.0.100. L’entrée DNS A est créé dans la zone MSREPORT.LOCAL avec comme IP : 192.168.0.100.
A T=1, la station de travail A.MSREPORT.LOCAL a l’IP 192.168.0.101. L’entrée DNS A dans la zone MSREPORT.LOCAL reste sur 192.168.0.100. On a le problème !
Ce problème se pose :
– Cas 1 : si le compte ordinateur Active Directory d’une station de travail Windows est supprimée puis recréée.
– Cas 2 : si on déplace une imprimante / machine non Windows entre VLANS (même serveur DHCP).
– Cas 3 : si on déplace une imprimante / machine non Windows entre deux sites géographiques (changement de serveurs DHCP).
– Cas 4 : si une personne de l’informatique a créé manuellement l’entrée DNS d’une station de travail / imprimante.
– Cas 5 : si on a récemment changé de serveur DHCP (Windows Server).

La configuration est la suivante :
– Annuaire Active Directory (on a le problème avec toutes les versions des contrôleurs de domaine Windows).
– Zones DNS intégrées à l’annuaire. Les mises à jour dynamiques DNS sont activées sur les zones DNS et sont configurées sur “Sécurisées uniquement”.

D’OU VIENT LE PROBLEME ?
Il s’agit tout simplement d’un problème de permissions au niveau de l’entrée DNS !

EXPLICATIONS :
Quand on intègre une zone DNS dans l’annuaire Active Directory, les entrées DNS deviennent des objets (comme les comptes utilisateurs) de type DNSNODE.
Ces objets ont des permissions. Hors pour pouvoir mettre à jour l’adresse IP d’une entrée DNS de type A (type Hôte, nom résolu en IP), il faut avoir le droit “Ecrire” sur l’entrée DNS (l’objet de type DNSNODE).

QUI A LE DROIT DE METTRE A JOUR UNE ENTREE DNS ?
– Quand on crée manuellement une entrée DNS, c’est le compte utilisateur qui a créé l’entrée qui a le droit d’écrire. Il existe une option qui permet d’autoriser tous les utilisateurs authentifiées à mettre à jour l’entrée DNS.
– Pour les machines en DHCP, cela dépend de la configuration du serveur DHCP. Selon le cas, c’est le compte ordinateur du serveur DHCP, le compte ordinateur de la station de travail ou un compte de service qui a le droit de modifier l’entrée DNS.

COMMENT DETERMINER QUI A LE DROIT DE MODIFIER UNE ENTREE DNS ?
Ouvrir la console DNS. Cliquer dans le menu “Affichage” puis sélectionner “Affichage détaillée“.
Quand on double clic sur une entrée DNS, on voit maintenant la date de création de l’enregistrement (si c’est une entrée DNS créée dynamiquement) et l’onglet “Sécurité” (permission sur l’objet).

COMMENT CONFIGURER QUI A LE DROIT DE MODIFIER UNE ENTREE DNS CREES MANUELLEMENT (ENTREE DNS STATIQUE) ?
On a la case “Autoriser tout utilisateur identifié à mettre à jour les enregistrements DNS…” dans la fenêtre de création de l’entrée DNS A. Tous les utilisateurs authentifiées (machines et utilisateurs du domaine peuvent modifier l’entrée DNS).

COMMENT CONFIGURER QUI A LE DROIT DE MODIFIER UNE ENTREE DNS CREE DYNAMIQUEMENT ?
Ouvrir la console DHCP et aller dans les propriétés du serveur DHCP.
Aller dans l’onglet “DNS“.
Si vous sélectionnez, “Mettre à jour les enregistrements PTR et A DNS uniquement si des clients DHCP le demandent” :
– Pour les machines Windows en DHCP : elles créent elles-même l’entrée DNS. C’est donc le compte ordinateur de la machine Windows qui a le droit de modifier l’entrée DNS.
– Pour les autres machines (qui ne savent pas faire des mises à jour dynamiques DNS sécurisées), c’est le compte ordinateur du serveur DHCP.
Si vous sélectionner “Toujours mettre à jour dynamiquement les enregistrements PTR et A DNS“, c’est le compte ordinateur du serveur DHCP qui a le droit de modifier les entrées DNS (pour les stations Windows ou autres).

Attention, cela n’est vrai que si vous n’avez pas configuré un compte de service pour effectuer les mises à jour dynamiques DNS au niveau du service DHCP.
Cela se configure dans l’onglet “Avancé” dans les propriétés du serveur DHCP. Cliquer sur “Informations d’identification”. Voir article Microsoft :
http://support.microsoft.com/kb/282001/en-us
Si cette option est activée ce n’est plus le compte ordinateur du serveur DHCP qui a les droits mais ce compte de service.
Si vous sélectionnez, “Mettre à jour les enregistrements PTR et A DNS uniquement si des clients DHCP le demandent” :
– Pour les machines Windows en DHCP : elles créent elles-même l’entrée DNS. C’est donc le compte ordinateur de la machine Windows qui a le droit de modifier l’entrée DNS.
– Pour les autres machines (qui ne savent pas faire des mises à jour dynamiques DNS sécurisées), c’est le compte de service DNS configuré dans l’onglet “Avancé” du serveur DHCP qui a le droit de modifier l’entrée.

PRECONISATIONS :
Mettre en place la configuration suivante :
– Tous les serveurs DHCP doivent avoir la même configuration (DHCP Microsoft).
– Configurer le serveur DHCP pour “Mettre à jour les enregistrements PTR et A DNS uniquement si des clients DHCP le demandent“.
– Ne jamais supprimé les comptes ordinateurs des stations de travail. On peut les réinitialiser. Au pire supprimer les ServicePrincipalname intule avec la commande SETSPN.
– Configurer le serveur DHCP pour effectuer les mises à jour dynamiques DNS à l’aide d’un compte de service. Voir article Microsoft : http://support.microsoft.com/kb/282001/en-us
– Mettre en place le SCAVENGING. Cela purge les entrée dynamiques qui n’ont pas été mise à jour depuis plus de 14 jours par défaut (les entrées statiques ne sont pas purgées).
Cette configuration nous permet de gérer les cas 2 et 3 car c’est plus le compte ordinateur du serveur DHCP qui a les droits mais un compte de service identique sur tous les serveurs DHCP.
Je préfère laisser “Mettre à jour les enregistrements PTR et A DNS uniquement si des clients DHCP le demandent” car il n’est pas rare qu’une station de travail Windows repasse en IP fixe puis de nouveau en DHCP selon la configuration de vos sites. Dans ce cas c’est le compte ordinateur de la station de travail qui a les droits donc pas de problème.

Il sera nécessaire de modifier les permissions des entrées DNS si :
– Vous changez de serveur DHCP (changement du compte ordinateur du serveur DHCP) sans avoir activé le compte de service pour les mises à jour dynamique DNS au niveau de tous les serveurs DHCP.
– Si vous changez les paramètres de la mise à jour dynamique DNS au niveau de vos serveurs DHCP (danger).

CODE SOURCE DU SCRIPT POWERSHELL POUR METTRE A JOUR LES ENTREES DNS :
Le script ci-dessous nécessite PowerShell V1 / V2 et l’installation du module Quest Active management Shell for Active Directory
Dans l’exemple ci-dessous, la zone réplique au niveau de la partition de domaine.
Il faudra valider où se trouve la zone et se connecter sur cette zone avec ADSIEDIT.MSC (installer les support tools présents sur le CD d’installation de Windows 2003 Server).

Dans le conteneur système de la partition de domaine msreport.local :
DC=msreport.local,CN=MicrosoftDNS,CN=System,DC=MSREPORT,DC=LOCAL
Dans la ForestDnsZones :
DC=msreport.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=archidfs,DC=local
Dans la DomainDnsZones :
DC=msreport.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=archidfs,DC=local

Set-QADPSSnapinSettings -DefaultSizeLimit 0
Connect-Qadservice nom_du_contrôleur_domaine
Get-QADObject -UseGlobalCatalog -Identity m –SearchRoot “DC=msreport.local,CN=MicrosoftDNS, CN=System,DC=MSREPORT,DC=LOCAL” -Type Dnsnode | Add-QADPermission -Account “compte_groupe_pour_permissions_modifier_entrees” –Rights ‘GenericWrite,ReadControl,WriteProperty’ -ApplyTo ‘ThisObjectOnly’ 

POUR ALLER PLUS LOIN :
On peut voir les accès refusés au niveau des mises à jour des entrées DNS en activant l’audit (réussite et échec) pour « l’accès aux objets » au niveau de la stratégie « Default Domain Controller Policy ».
Faire un gpupdate /force sur chaque contrôleur de domaine ou attendre 5 minutes.
Par défaut, l’audit est configuré que pour les réussites au niveau d’une zone DNS. Il faut aussi ajouter les SACL pour les échecs.
Aller dans les propriétés de la zone DNS, dans « Sécurité », cliquez sur « Permissions avancées » au niveau de la zone DNS « MSREPORT.LOCAL ». Ajouter une entrée en « réussite / échec » pour tout le monde et pour les actions d’écriture.
Ouvrir le journal sécurité du contrôleur de domaine utilisé par le client DHCP / station de travail (voir LOGONSERNAME de la commande SET pour obtenir cette information).
On obtient ces messages :
Type de l’événement : Audit des échecs
Source de l’événement : Security
Catégorie de l’événement : Accès Active Directory
ID de l’événement : 566
Date : 6/20/2011
Heure : 6:07:40 PM
Utilisateur : MSREPORT\XPGMATHI-6DB635$
Ordinateur : SRVDFSR1
Description :
Opération d’objet :
   Serveur d’objet : DS
   Type d’opération : Object Access
   Type d’objet : dnsNode
   Nom d’objet : DC=xpgmathi-6db635,DC=msreport.local, CN=MicrosoftDNS,DC=DomainDnsZones,DC=archidfs,DC=local
   ID de handle : –
   Nom d’utilisateur principal : SRVDFSR1$
   Domaine principal : ARCHIDFS
   ID d’ouv de session principale : (0x0,0x3E7)
   Nom d’utilisateur client : XPGMATHI-6DB635$
   Domaine client : ARCHIDFS
   ID d’ouv de session client : (0x0,0x390006)
   Accès : Écriture personnelle  
   Propriétés :
   Default property set
   dnsRecord
   dNSTombstoned
   dnsNode
   Informations additionnelles :
   Informations additionnelles 2 :
   Masque d’accès : 0x8

Type de l’événement : Audit des échecs
Source de l’événement : Security
Catégorie de l’événement : Accès Active Directory
ID de l’événement : 566
Date : 6/20/2011
Heure : 6:11:11 PM
Utilisateur : MSREPORT\XPGMATHI-6DB635$
Ordinateur : SRVDFSR1
Description :
Opération d’objet :
   Serveur d’objet : DS
   Type d’opération : Object Access
   Type d’objet : dnsNode
   Nom d’objet : DC=xpgmathi-6db635,DC=msreport.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=archidfs,DC=local
   ID de handle : –
   Nom d’utilisateur principal : SRVDFSR1$
   Domaine principal : ARCHIDFS
   ID d’ouv de session principale : (0x0,0x3E7)
   Nom d’utilisateur client : XPGMATHI-6DB635$
   Domaine client : ARCHIDFS
   ID d’ouv de session client : (0x0,0x39DB62)
   Accès : Propriété d’écriture    
   Propriétés :
   Default property set
   dnsRecord
   dNSTombstoned
   dnsNode
   Informations additionnelles :
   Informations additionnelles 2 :
   Masque d’accès : 0x20

A+
Guillaume MATHIEU
PROSERVIA
La connaissance s’accroît quand on la partage
http://msreport.free.fr

Publié dans Active Directory, ActiveRoles for Server, Dns, Imprimantes, Outils, PowerShell, Scripts, Troubleshouting, Windows 2000 Pro, Windows 2000 Server, Windows 2003 Server, Windows Server 2008, Windows Server 2008 R2, Windows Seven, Windows Vista, Windows XP | Un commentaire

PowerShell -> Script to add users accounts / script pour ajouter des comptes utilisateurs

Bonjour

Microsoft fournit avec Windows 2008 R2 son propre module PowerShell pour Active Directory.
Pour ceux qui ne dispose pas de contrôleurs de domaine Windows 2008 R2, vous pouvez utiliser le module PowerShell Quest pour Active Directory (ActiveRoles Management Shell for Active Directory).
Il est gratuit et téléchargeable à cette adresse :
http://www.quest.com/powershell/activeroles-server.aspx
Ce dernier fonctionne très bien (testé de très nombreuses fois).
Pour les amateurs de scripts, ci dessous un exemple de code pour créer des comptes utilisateurs avec la commande PowerShell Quest New-QADUser et SET-QADuser.
Pour plus d’informations sur la commande New-SQADuser : Get-Help New-QADUser -examples
Comme on n’a pas toutes les options avec la commande New-QADuser je fais un pipe avec la commande Set-QADuser.

# Create 100 accounts with this caracteristics :
# Expiration date : 1er aout 2011.
# Password never expire and no change of password at first logon.
# Differents passwords for each account.
# Connexion to DC
Connect-QADService nom_contrôleur_domaine
# Variable
$boucle = 1;
$nbaccounttocreate = 101;
$ParentContainer = “OU=Users,OU=FR,DC=MSREPORT,DC=LOCAL”;
$description = “Test Account”;
$EmployeeType = “System”;
$StreetAddress = “route des Gardes”;
$PostalCode = “92000”;
$City = “Meudon”;
$Company = “Msreport France”;
do
{
        $DisplayName = “it_msreport” + $boucle;
        $SamAccountname = “it_msreport” + $boucle;
        $UserPrincipalName = “$SamAccountname” + “@msreport.local”;
        $Password = “GeihposM” + $boucle;
        $email = $SamAccountname + “@msreport.free.fr”; 
        # Command to create user
        new-QADUser -ParentContainer $ParentContainer -DisplayName $DisplayName -description $description -StreetAddress $StreetAddress -PostalCode $PostalCode -City $City -Company $Company -name $SamAccountname -sAMAccountName $SamAccountname -UserprincipalName $UserPrincipalName -UserPassword $Password -Email $email -ObjectAttributes @{EmployeeType = “Test”;C=”FR”} | Set-QADuser -PasswordNeverExpires $true -AccountExpires 01/08/2011 -Manager “gmmathieu”;
        $boucle = $boucle + 1;
}
# Manage the number of loop.
while ($boucle -lt 101)

A+

Guillaume MATHIEU
PROSERVIA
La connaissance s’accroît quand on la partage.
http://msreport.free.fr

Publié dans Windows Server 2008 | Laisser un commentaire

CHANGER PERIODIQUEMENT LE MOT DE PASSE DU COMPTE ADMINISTRATEUR PRE-INTEGRE (BUILTIN) DE LA BASE SAM :

salut à tous

J’ai récemment travaillé sur une solution pour changer périodiquement le compte administrateur pré-défini sur des stations de travail Windows XP Pro / Windows Seven.
Le cachier des charges précisait :
– Que le mot de passe du compte administrateur pré-défini devait changer tous les 90 jours.
– Que le mot de passe devait être stocké sur un partage non accessible en lecture aux utilisateurs.
– Que le mot de passe devait respecter certaines contraintes en terme de tailles, nombre de familles de caractères (majuscules, minuscules, chiffres, caractères spéciaux).
– Prendre en charge le fait que le compte administrateur intégré changerait de nom selon la langue de l’OS ou pouvait avoir été renommé (“administrator” pour une version Windows anglaise, “administrateur” pour une version française).
La solution proposée ci dessous est basée sur deux scripts.
– ADMINISTRATORPASSWORD.CSV
– GENERATECSV.VBS

1 LE SCRIPT ADMINISTRATORPASSWORD.vbs :
1.1 PRESENTATION GENERALE :

Ce script permet de
– Générer le mot de passe selon les contraintes (nombre de majuscules, minuscules, caractères spéciaux…)
– Déterminer si cela fait plus de 90 jours que le mot de passe a été changé.
– Modifier le mot de passe sur la station de travail.
– Ecrire un fichier texte contenant le nom de la machine, le nom du compte administrateur pré-intégré et le mot de passe.

1.2 CONTRAINTES ET PROBLEMATIQUES DE LA SOLUTION :
– Tous les stations de travail doivent pouvoir accéder aux partages de fichiers de ces deux serveurs.
– Toutes les stations de travail doivent être membres d’un domaine Active Directory.
– Chaque station de travail doit pouvoir écrire le fichier texte contenant le mot de passe sans permettre aux utilisateurs d’accéder à tous les fichiers texte stockés sur le partage.
-La solution exige deux serveurs : un serveur hébergeant le partage où sont stockés les fichiers texte contenant le mot de passe et un serveur hébergeant les fichiers de logs d’erreurs en cas de problème lors de l’exécution du script.

1.3 SECURISATION DU REPERTOIRE CONTENANT LES FICHIERS AVEC MOTS DE PASSE :
Le script ADMINISTRATORPASSWORD.CSV s’exécute via un script de démarrage (GPO de type “Configuration Ordinateur”). Il s’exécute donc dans le contexte du compte SYSTEM (droit administrateur sur la station de travail).
La première étape consiste à créer le répertoire E:\logs et le partager en tant que logs$. Définir « Control Total » pour « Tout le monde » au niveau des permissions de partage.
Au niveau des permissions NTFS, supprimer l’héritage des permissions (dans les permissions NTFS avancées). Donner les droits “Contrôl Tôtal” à Administrators, SYSTEM, GRP_PASSWORD Viewer (groupe contenant les utilisateurs qui peuvent voir les fichiers avec les mots de passe).
Il faut ensuite ajouter des permissions spéciales pour le groupe “Authenticated users”
Créer une permissions NTFS personnalisée pour le groupe “Authenticated users”. Aller dans les permissions NTFS avancées. Sélectionner “Apply to this folder and subfolders”. Sélectionner le permissions suivantes :
– Traverse folder / execute file
– List folder / Read data
– Read attributes
– Read extended attributes
– Create files / write data
– Read permissions
Créer une seconde entrée au niveau des permissions NTFS avancées. Sélectionner “Apply to Files only“. Sélectionner le permissions suivantes :
– Read attributes
– Read extented attributes
– Create files / write data
– Create folders / append data
– Write attributes
– write extended attributes
– Delete
– Read permissions

Ne surtout pas cocher la case “List Folder / read data“.
Tester l’accès avec un compte utilisateur.
Ce dernier peut copier un fichier existant, le renommer, le supprimer mais ne peut pas le lire ou le copier depuis le serveur vers sa station de travail.
On est obligé de donner le droit de supprimer dans le cas où le compte ordinateur est supprimé. C’est en effet le compte ordinateur qui est propriétaire du fichier.

1.4 CODE  DU SCRIPT ADMINISTRATORPASSWORD.CSV :
‘ More informations about RND function : http://www.w3schools.com/vbscript/func_rnd.asp
‘ More informations about ACSII code : http://www.commentcamarche.net/contents/base/ascii.php3
‘ More informations about error management : http://technet.microsoft.com/en-us/library/ee176982.aspx and http://technet.microsoft.com/en-us/library/ee692852.aspx
‘ More informations about the date : http://www.commentcamarche.net/contents/vbscript/vbs-fonctions-date.php3
‘ More information about permission NTFS : http://support.microsoft.com/kb/308419/en-us

On error resume next
strComputer = “.”
Dim text,action,digits
text = “”

‘VARIABLES TO DEFINE

serverpasswordname = “nom_serveur.domaine.dns”  ‘ Server which store password files. Exemple : srv1.msreport.free.fr
serverlogname = “nom_serveur.domaine.dns”  ‘ Server whuch store errors log files. Exemple : srv1.msreport.free.fr
periodTime = “7776000”     ‘ Time before password expiration in seconds (7776000 = 90 days)
digits = 9      ‘ Lengh of the password

‘ MAIN

‘ Verify if the password must change on the computer
action = NeedChange()
if action = 1 then
 ‘ Determin the name of the administrator account (administrateur in french).
 accounttomodify = AdministratorName()
 ‘ Generate the password
 password = GeneratePassword(digits)
 ‘ Define the new password on the computer.
 Set objUser = getobject(“WinNT://” & strComputer & “/” & accounttomodify & “,User”)
 If Err <> 0 Then
  WriteError(“N.A.;N.A.;No administrator account.”)
  Err.Clear
 else
  objUser.SetPassword password
  objUser.SetInfo
  if Err <> 0 Then
   WriteError(“N.A.;N.A.;Update of administrator fail.”)
   Err.Clear
  else
   ‘ Write the password on a file on server and write the witness file on the computer
   text = accounttomodify + “;” + password
   Writepasswordfile(text)
   if Err = 0 then
    Writewitness(now)
   else
    WriteError(“Unable to connect to the server !”)
   
   End if
  End if
 End If
else
 ‘ if the password has been changed since lower than 30 days, the script takes no actions.
 wscript.quit
End If

Function NeedChange()
On error resume next
‘ Script change password once every periodtime (variable). The script write a log on the computer in C:\Windows\passwordchange.txt that contains the day of the last change of the password

‘ Verify if the file exist on the station
Set objFSO = CreateObject(“Scripting.FileSystemObject”)

‘ if the file exists, we need to read it and verify the date.
If objFSO.FileExists (“C:\Windows\passwordchange.txt”) then
 ‘ Read the date on file C:\Windows\passwordchange.txt 
    dim sFileContents
 dim lastchangetime
 Set oTextStream = objFSO.OpenTextFile(“C:\Windows\passwordchange.txt”,1)
 lastchangetime = cdate(oTextStream.ReadAll)
 oTextStream.Close

 ‘wscript.echo “PeriodTime : ” & periodtime
 ‘wscript.echo ” Date du fichier : ” & lastchangetime
 ‘wscript.echo “Date actuelle : ” & now
 ‘wscript.echo “Différence de temps : ” & DateDiff(“s”,lastchangetime,now)

 ‘ If the file is corrupted, password must be changed.
 if err <> 0 then
  NeedChange = 1
  Err.Clear
       
 ‘if the diffrence between the two date is greater than periodTime, we need to change the password.
 elseif  CDbl(DateDiff(“s”,lastchangetime,now)) > CDbl(periodTime) then
  NeedChange = 1
  ‘wscript.echo “NeedChange : ” & NeedChange
 ‘ Other case, do nothing.
 elseif CDbl(DateDiff(“s”,lastchangetime,now)) < 0 then
  NeedChange = 1
 else
  NeedChange = 0
  ‘wscript.echo “NeedChange : ” & NeedChange
 End If
‘ if the file doesn’t exist, change the password
else
 NeedChange = 1
End if

End Function

‘ Function to generate password

Function GeneratePassword(digits)
Dim passwordtemp
passwordtemp = “”
Dim w
Dim i
Dim digit1, digit2, digit3

‘ Code to generate password with uppercases (A…Z), lowercases (a…z) and numbers (2…9) without 0, O,o I, l

For i = 1 To Digits
 ‘ The function randomize permit to change the result of the RND function
 ‘ The first caracters is an uppercase
 digit1 = “”
 digit2 = “”
 digit3 = “”
 if i = 1 then
         Randomize
  digit1 = chr(65 + INT(RND * 25))
  ‘ The ACSII value 79 is O and the ACSII code 73 is I
  if (digit1 = chr(79)) OR (digit1 = chr(73)) then
   digit1 = chr(80 + INT(RND * 10))
  End if
  passwordtemp = passwordtemp + digit1
 
 elseif i = 2 then
  Randomize
  digit2 = chr(97 + INT(RND * 25))
  ‘ The ACSII value 108 is l
  if (digit2 = chr(108)) OR (digit2 = chr(111)) then
   digit2 = chr(112 + INT(RND * 10))
  End if
                passwordtemp = passwordtemp + digit2
 
 elseif i = digits then
  Randomize
  ‘ The ACSII value 48 is 0 and isn’t in the range.
  passwordtemp = passwordtemp + chr(50 + INT(RND * 7))
 
 else
  Randomize
         w = 1 + INT(RND * 4)
  ‘wscript.echo “value w : ” & w
         If W = 1 Then
                 Randomize
   digit1 = chr(65 + INT(RND * 25))
   ‘ The ACSII value 79 is O and the ACSII code 73 is I
   if (digit1 = chr(79)) OR (digit1 = chr(73)) then
    digit1 = chr(80 + INT(RND * 10))
   End if
   passwordtemp = passwordtemp + digit1 
         ElseIf W = 2 Then
   Randomize
   digit2 = chr(97 + INT(RND * 25))
   ‘ The ACSII value 108 is l
   if (digit2 = chr(108)) OR (digit2 = chr(111)) then
    digit2 = chr(112 + INT(RND * 10))
   End if
                 passwordtemp = passwordtemp + digit2
  Elseif w = 3 Then
   Randomize
   choice = INT(RND * 5)
   ‘wscript.echo “Choice : ” & choice
   ‘ Value ACSII : # = 35  $ = 36 * = 42 + = 43 @ = 64
   if choice = 0 then
    digit3 = chr(35)
   elseif choice = 1 then
    digit3 = chr(36)
   elseif choice = 2 then
    digit3 = chr(42)
   elseif choice = 3 then
    digit3 = chr(43)
   else
    digit3 = chr(64)
   End if
   passwordtemp = passwordtemp + digit3
         Else
                 Randomize
   ‘ The ACSII value 48 is 0, 49 is 1 and isn’t in the range.
   passwordtemp = passwordtemp + chr(50 + INT(RND * 7))
         End If
 End if
‘wscript.echo “Valeur de I : ” & i
Next
GeneratePassword = passwordtemp
End Function

‘ Function to create file with password on the share

Function Writepasswordfile(text)
        ‘Find the name of the workstation and create file result on server
        Set WshNetwork = WScript.CreateObject(“WScript.Network”)
        StationName = WshNetwork.ComputerName
 resufile = “\\” & serverpasswordname & “\logs$\” & StationName & “.txt”
        ‘wscript.echo “Fichier mot de passe : ” & resufile
 Dim objFSO,objFile
        Set objFSO = CreateObject(“Scripting.FileSystemObject”)
        Set objFile = objFSO.CreateTextFile(resufile)
 ‘ Write the date in french format.
        objFile.WriteLine StationName & “;” & text & “;” & Day(now) & “/” & Month(now) & “/” & Year(now)
        objFile.Close        
End Function

Function WriteError(text)
        ‘Find the name of the workstation and create file result on server
        Set WshNetwork = WScript.CreateObject(“WScript.Network”)
        StationName = WshNetwork.ComputerName
 resufile = “\\” & serverlogname & “\logs$\Error-” & StationName & “.txt”
        ‘wscript.echo “Fichier mot de passe : ” & resufile
 Dim objFSO,objFile
        Set objFSO = CreateObject(“Scripting.FileSystemObject”)
        Set objFile = objFSO.CreateTextFile(resufile)
        objFile.WriteLine StationName & “;” & text
        objFile.Close        
End Function
 

Function Writewitness(dateofchangepassword)
 resufile = “C:\Windows\passwordchange.txt”
        Dim objFSO,objFile
        Set objFSO = CreateObject(“Scripting.FileSystemObject”)
        Set objFile = objFSO.CreateTextFile(resufile)
        objFile.WriteLine dateofchangepassword
        objFile.Close        
End Function

Function AdministratorName()
‘ Permit to find the name of the BUILTIN administrator account on the computer. This account have a sid which begin by the following strings S-1-5- and which finish by the following strings “-500”.
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colAccounts = objWMIService.ExecQuery _
    (“Select * From Win32_UserAccount Where LocalAccount = TRUE”)
For Each objAccount in colAccounts
    If Left (objAccount.SID, 6) = “S-1-5-” and Right(objAccount.SID, 4) = “-500” Then
        AdministratorName = objAccount.Name
    End If
Next

End Function

2. LE SCRIPT GENERATECSV.VBS :
2.1 PRESENTATION GENERALE :

Ce script permet de générer un fichier CSV à partir de tous les fichiers textes contenant les mots de passe.
On ne peut pas écrire directement dans le fichier CSV depuis les stations de travail du fait du risque de corruption de données si deux machines changent de mots de passe en même temps. Il faudrait une base de données.

2.2 MISE EN OEUVRE :
Configurer une tâche planifiée sur le serveur où sont stockés les fichiers avec les mots de passe pour créer le fichier CSV contenant tous mots de passe toutes les 10 minutes.

2.3 CODE DU SCRIPT GENERATECSV.VBS :
‘ More information at http://www.computerperformance.co.uk/vbscript/vbscript_file_opentextfile.htm
‘ More information at http://www.devguru.com/technologies/vbscript/quickref/textstream_readall.html

on error resume next

‘ VARIABLES TO DEFINE :
Dim passwordfileshare
Dim targetcsvfile
passwordfileshare = “
\\nom_serveurs_partage_password_files\logs$\
targetcsvfile = “
\\nom_serveurs_partage_password_files\logs$\csv\
csvfile = “
\\nom_serveurs_partage_password_files\logs$\csv\resultats\userspassword.csv
resultfolder = “
\\nom_serveurs_partage_password_files\logs$\csv\resultats\

‘ MAIN
‘ Copy all file from passwordfileshare to targetcsvfile
copypasswordfiles()

‘ Generate the CSV file
GenerateCSV()

Function copypasswordfiles()
Dim FSO
Dim FileExt
FileExt = “*.txt”
Set FSO = CreateObject(“scripting.filesystemobject”)

‘ ADD “\” if the folder name doesn’t finish by this caracters.
If Right(passwordfileshare, 1) <> “\” Then
 passwordfileshare = passwordfileshare & “\”
End If

‘ Verify if the folder to result exist
If FSO.FolderExists(passwordfileshare) = False Then   
 wscript.quit(1)
End if

if FSO.folderExists(targetcsvfile) = False Then
 FSO.CreateFolder(targetcsvfile)
     FSO.CopyFile passwordfileshare & FileExt, targetcsvfile
else
    FSO.CopyFile passwordfileshare & FileExt, targetcsvfile
End if
End function

Function GenerateCSV()

Dim fso, folder, files, NewsFile
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ Verify if the result folder exist and create it if not exist.
if FSO.folderExists(resultfolder) = False Then
 FSO.CreateFolder(resultfolder)
End if

‘ List each file in targetcsvfile, copy the content of each file in csvfile
‘ Create the result file
Set NewFile = fso.CreateTextFile(csvfile, True)
‘ List the file
Set folder = fso.GetFolder(targetcsvfile)
Set files = folder.Files
‘ Write the first line of the result CSV file
NewFile.WriteLine (“Computer;Login;Password;TimeLastChange”)

For each folderIdx In files
 ‘ Read the fisrt line of each txt file
 Set TextFile = fso.opentextfile(targetcsvfile & folderIdx.Name,1)
 ‘ Write a new line in csvfile
 NewFile.WriteLine(TextFile.ReadLine) 
Next
NewFile.Close
End function

a+
Guillaume MATHIEU
http://msreport.free.fr
PROSERVIA
Le bonheur c’est le partage.

 

Publié dans Active Directory, GPO, Outils, Sécurité, Scripts, Système, Windows Seven, Windows Vista, Windows XP | Laisser un commentaire