samedi 23 juillet 2011

Désactiver l'accélération hardware d'Internet Explorer 9 via GPO

Si l'accélération hardware d'Internet Explorer 9 (exploitation du calculateur graphique ou GPU) est efficace sur un poste de travail récent, elle peut générer des problèmes sur des postes de travail plus anciens ou pire, créer des latences sur un serveur RDS (Remote Desktop Services ou anciennement TSE) : Page d'accueil qui s'affiche plus d'une minute après son lancement, bug d'affichage au niveau des onglets etc...

Malheureusement, il n'existe pas de stratégie de groupe (ou GPO) pour désactiver ce comportement.
Toutefois, il est possible d'exploiter les Paramètres des stratégies de groupe (disponibles à partir de Windows 2008 Server) afin d'inscrire une clef dans la base de registre, coté utilisateur, pour forcer le mode software.

Ouvrez donc la console Gestion des stratégies de groupe, créez ou ouvrez un objet de stratégie de groupe et rendez-vous là :


Faites un clic-droit sur Registre : Nouveau / Élément registre et renseignez les informations suivantes :


Action : Remplacer, permet de créer ou mettre à jour la valeur si elle existe déjà.
Ruche : HKEY_CURRENT_USER
Chemin d'accès à la clef : Software\Microsoft\Internet Explorer\Main
Nom de la valeur : UseSWRender (utiliser le rendu logiciel)
Type de valeur : REG_DWORD
Donnée de la valeur : 1
Base : Décimal

Liez cette objet de stratégie de groupe sur une Unité d'Organisation où se trouve votre utilisateur de test et ouvrez une session. Vérifiez dans IE9 / Options Internet, onglet Avancé que la case Utiliser le rendu logiciel au lieu du rendu GPU est bien cochée :


Si elle ne l'est pas encore, ouvrez une console cmd en tant qu'administrateur et rafraichissez l'application des stratégies :

GpUpdate /Target:User /Force /Sync (attention, demande la fermeture de la session)

Une fois le rafraichissement effectué, vous devriez constater la désactivation de l'accélération GPU d'Internet Explorer 9.

mardi 19 juillet 2011

PowerCLI : Découverte de l'administration PowerShell sous ESXi

Note du 05/05/2012 : Quelques corrections, modif de PowerShell V2 pour NT5.

Pour administrer ses serveurs ESX / ESXi, VMware fournit le client vSphere.
 
S'il est sympathique - et efficace - au premier abord, on se rends rapidement compte de ses limitations lorsque l'on commence à avoir beaucoup de machine virtuelle et que des tâches répétitives d'administration sont nécessaires.

Heureusement, pour palier à ce problème VMware fournit le client PowerCLI, qui permet d'administrer les serveurs et les machines virtuelles en exploitant la possibilités de PowerShell.

Je vais vous présenter PowerCLI en quelques mots et vous montrer comment gagner du temps en utilisant PowerCLI sur votre infrastructure de virtualisation.

Prérequis et Installation

    Votre poste de travail doit posséder PowerShell, déjà présent en version 2 sur les NT6 (Vista,7, 2008 etc.), mais à installer sur les NT5 (XP, 2003 etc.).

    Ensuite vous devez installer le client PowerCLI, disponible sur le site de VMware : http://www.vmware.com/support/developer/PowerCLI/index.html



    Avant de lancer PowerCLI, vous devez autoriser PowerShell à exécuter des scripts non signés. Pour cela lancez une instance PowerShell et tapez :

    Set-ExecutionPolicy RemoteSigned

    Cette commande modifie le profil global de PowerShell (pour tous les utilisateurs PowerShell du poste de travail), son comportement sera alors le suivant :

    • Les scripts exécutés localement peuvent être exécutés sans être signés
    • Les scripts téléchargés à partir d’internet doivent être signés
    • Ne demande pas de confirmation avant d’exécuter des scripts signés ou non par une autorité de certification connue de votre ordinateur
    Lancement du client

    Vous pouvez lancer le client PowerCLI directement en cliquant sur son icône. Pour débuter ça reste pratique d'utiliser directement la console PowerCLI, mais le plus agréable reste d'utiliser l'ISE de PowerShell v2 et d'initialiser les modules PowerCLI avec les commandes suivantes :

    PS> Add-PSSnapin VMware.VimAutomation.Core
    PS> Initialize-VIToolkitEnvironment.ps1

    Ces lignes chargent le module VMware et initialisent son environnement d'administration : il est nécessaire de les taper pour pouvoir exploiter pleinement ses serveurs ESXi. Toutefois, vous pouvez créer un alias dans votre profil PowerShell (plus d'information sur les alias ici ) ou, en intégrant directement ses commandes dans votre profil, les charger automatiquement.

    Une fois votre console lancée en PowerCLI, vous devez maintenant vous connecter à un serveur ESX. Voici la commande de connexion :

    PS> Connect-VIServer IP_ou_DNS

    Il est possible de fournir beaucoup plus d'informations :

    PS> Connect-VIServer -Server IP_ou_DNS -Protocol https -User admin -Password pass

    Les informations manquantes seront demandées de manière interactive.

    PowerCLI respecte bien l'architecture PowerShell, c'est à dire un format verbe-nom -commutateurs globaux (name, destination etc.).

    Un simple get-help vm vous sort toutes les commandes d'administration des machines virtuelles, les possibilités sont étourdissante.

    Quelques commandes de base :

    Récupérer des infos sur une VM :

    PS> Get-VM -Name "Vm-Name"

    Récupérer la liste des VM d'un centre :

    PS> Get-VM -Location Nancy

    Arrêter brutalement une VM :

    PS> Stop-VM -VM "VM-Name"

    Arrêter une VM contenant les VMWare Tools proprement :

    PS> Shutdown-VMGuest -VM "VM-Name"

    Démarrer une VM :

    PS> Start-VM -VM "VM-Name"

    Mettre en pause une VM :

    PS> Suspend-VM -VM "VM-Name"

    Supprimer une VM de l'inventaire

    PS> Remove-VM -VM "VM-Name"

    Redémarrer une VM contenant les VMWare Tools proprement :

    PS> Restart-VMGuest -VM "VM-Name"

    Supprimer une VM de l'inventaire ET du datastore

    PS> Remove-VM -VM "VM-Name" -DeletePermanently

    L'idée maintenant, c'est de "piper" ces différentes commandes afin d'exécuter des tâches lourdes en quelques lignes.

    Quelques commandes cooool

    Déconnecter toutes les images ISO montées dans les VM :


    PS> Get-cddrive -VM * | Where {$_.ISOPATH -ne $null} | set-cddrive -nomedia

    Mettre en pause toutes les VM actives sur un cluster :

    PS> get-vm -location cluster_ou_serveur | where {$_.PowerState -eq "PoweredOn"} | suspend-vm

    Démarrer les VM en pause:

    PS> get-vm -location cluster_ou_serveur| where {$_.PowerState -eq "Suspended"} | Start-vm

    Déplacer l'ensemble des machines virtuelles d'un serveur à un autre :

    PS> get-vm -location serveur_1 | move-vm -destination serveur_2

    Pour déplacer toutes les VM allumées :

    PS> get-vm -location serveur_1 | where {$_.PowerState -eq "PoweredOn"} | move-vm -destination serveur_2

    Migration de Datastore (d'un stockage à un autre) :

    PS> get-vm -location cluster_ou_serveur | move-vm -Datastore nom_datastore

    Pour aller plus loin :

    Documentation et téléchargement PowerCLI : http://www.vmware.com/support/developer/PowerCLI/index.html

    Une référence FR sur PowerShell : http://www.powershell-scripting.com/

    Initiation PowerShell sur le MSDN : http://msdn.microsoft.com/fr-fr/visualc/bb906067

    Explication sur les profiles PowerShell : http://www.winmgr.com/?p=1645

    QuickStart pour PowerCLI 4.1.1 : http://communities.vmware.com/servlet/JiveServlet/download/1696554-55551/Final-PowerCLI-4.1.1.pdf

    N'hésitez pas si vous avez des questions ou des commandes sympa à partager.
    Je rajouterai mes prochaines découvertes dans un second billet.

    samedi 9 juillet 2011

    Installer pam_mount sur un serveur CentOS 5.6 avec authentification ActiveDirectory

    Curieusement, sur CentOS/RHEL 5.x, s'il est facile de configurer pam_ldap, il est beaucoup plus compliqué d'installer et de configurer pam_mount.

    Pam_mount permet de faire un montage automatique d'un partage de fichier (CIFS, NFS etc.) à l'authentification de l'utilisateur sur un système Linux et le tout, sans avoir à retaper son mot de passe (SSO).

    Il peut s'appuyer entres autres sur pam_ldap pour exploiter, par exemple, une authentification Active Directory avec montage automatique du HomeDirectory de l'utilisateur.

    C'est plutôt cool :)
    Quand ça marche... Malheureusement il n'y a pas de paquet RPM pour CentOS/RHEL 5.x, quasiment aucun document synthétique sur le web, du coup faut tout faire à la main. Dans cet article, je vais utiliser un paquet RPM existant, mais il est possible de compiler une version plus récente de pam_mount (pam_mount sur sourceforge) ; et je vais me concentrer uniquement sur l'authentification LDAP via ActiveDirectory (il est possible d'utiliser Kerberos, Winbid ou un OpenLDAP).

    Étape 1 : s'assurer que l'authentification LDAP est fonctionnelle

    Pour cet exemple je vais me concentrer uniquement sur LDAP via ActiveDirectory.

    Théoriquement, un simple # setup permet de configurer l'authentification LDAP, toutefois un tour dans /etc/ldap.conf est souvent nécessaire suivant l'infrastructure.

    Voici les lignes qui doivent au minimum être renseignées pour interconnecter votre serveur Red Hat / CentOS avec Active Directory :
    host ip serveur ad
    base dc=domaine,dc=local
    uri ldap://ip ou nom serveur ad
    ldap_version 3
    binddn cn=compte_ldapviewer,cn=users,dc=domaine,dc=local (indiquez le chemin d'un compte limité mais autorisé à consulter l'annuaire)
    bindpw
    scope sub
    timelimit 120
    bind_timelimit 120
    idle_timelimit 3600
    pam_login_attribute sAMAccountName
    (important, indique quel est le champs LDAP à utiliser pour le login)

    Et votre fichier /etc/pam.d/system-auth doit ressembler à ceci :
    auth required pam_env.so
    auth sufficient pam_unix.so nullok try_first_pass
    auth requisite pam_succeed_if.so uid >= 500 quiet
    auth sufficient pam_ldap.so use_first_pass
    auth required pam_deny.so 
    account required pam_unix.so broken_shadow
    account sufficient pam_succeed_if.so uid < 500 quiet
    account [default=bad success=ok user_unknown=ignore] pam_ldap.so

    account required pam_permit.so
     
    (la suite ne change pas)

    La commande # authconfig --test permet de vérifier l'état de vos modules pam. Vous devez avoir, pour la partie LDAP, une sortie de ce type :
    pam_ldap is enabled

    LDAP+TLS is disabled
    LDAP server = "ip du serveur ou chemin ldap://"
    LDAP base DN = "dc=domaine,dc=local"
     Faites des tests d'authentification, vous pouvez faire un # tail -f /var/log/secure dans un second terminal pour vérifier le bon fonctionnement de votre configuration.

    Pour que les utilisateurs puissent s'authentifier sur le serveur, il suffit de leurs créer un compte le plus simplement du monde, mais sans préciser de mot de passe :
    # useradd -m  sAMAccountName_de_l'utilisateur
    Étape 2 : Installation et configuration de pam_mount :

    Tout d'abord, vous devez télécharger la version suivante de pam_mount : pam_mount-1.2-1.PU_IAS.5.i386.rpm et sa dépendance libHX-1.25-1.PU_IAS.5.i386.rpm (version x86_64 dispo sur http://pkgs.org)

    Et tapez les commandes suivantes :
    # yum install perl-xml-writter
    # rpm -Uvh libHX-1.25-1.PU_IAS.5.i386.rpm

    # rpm -Uvh pam_mount-1.2-1.PU_IAS.5.i386.rpm

    Pour exploiter pam_mount, il est nécessaire de modifier le fichier /etc/pam.d/system-auth (attention, gardez plusieurs sessions root sous le coude pendant la modification de ce fichier !), ajoutez donc les lignes en gras dans votre fichier system-auth :
    auth required pam_env.so
    auth required pam_mount.so
    auth sufficient pam_unix.so nullok try_first_pass
    auth requisite pam_succeed_if.so uid >= 500 quiet
    auth sufficient pam_ldap.so use_first_pass
    auth required pam_deny.so

    account required pam_unix.so broken_shadow

    account sufficient pam_succeed_if.so uid < 500 quiet
    account [default=bad success=ok user_unknown=ignore] pam_ldap.so
    account required pam_permit.so
    password requisite pam_cracklib.so try_first_pass retry=3 
    password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
    password sufficient pam_ldap.so use_authtok
    password required pam_deny.so
    session optional pam_keyinit.so revoke 
    session required pam_limits.so
    session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid  
    session required pam_unix.so
    session optional pam_mount.so
    session optional pam_ldap.so

    Pam_mount se configure ensuite à l'aide du fichier /etc/security/pam_mount.conf.xml. En ajoutant une ligne de ce type :
    <volume fstype="cifs" mountpoint="/home/%(USER)/dossier" path="home/%(USER)" server="serveur_NAS" user="*" workgroup="DOMAINE AD"/>
    Cette ligne signifie "Monte le dossier de l'utilisateur x faisant partie du domaine D à partir de serveur_NAS:/home/Utilisateur dans /home/Utilisateur/Dossier"
    Ce qui est intéressant avec celle-ci, c'est qu'elle fonctionnera pour tous les utilisateurs du domaine qui auront un compte sur votre serveur CentOS/RHEL.

    Pour spécifier un partage particulier pour un utilisateur particulier, il faut remplacer le user="*" par user="sAMAcountName_de_l'utilisateur".

    Les utilisateurs peuvent accéder à leurs données de façon sécurisée (SSH) et de façon extrêmement simple (WinSCP par exemple).

    Pam_mount est très riche, vous pouvez utiliser d'autres protocoles, vous baser sur le GUID pour les montages etc... Consultez son man ainsi que celui de pam_mount.conf.xml.

    N'hésitez pas à commenter et à apporter des corrections, cette méthode a le mérite de fonctionner mais on peut probablement faire mieux (notamment du coté des pam).

    Liens :
    Man pam_mount 
    Man pam_ldap 
    pam_mount sur sourceforge (si vous voulez une version plus récente, à compiler)