Administration des machines Windows à partir d'une machine Linux
Lors qu'on on travaille dans environnement mixte (Linux et Windows), on est amené à administrer des machines sous Active directory. Lors que le poste de travail est sous Linux, cette tâche devient ardue. En effet, on s'habitue à faire des bouts de scripts pour l'administration Unix, mais rares sont les outils permettant scripter l'administration Windows à partir d'une machine sous Linux. 3 Outils permettent de simplifier l'administration d'un domaine AD ou des machines sous Windows (XP, 2000, 2003): winexe, net (commande faisant partie du package SAMBA) et adtool. Enfin, pour les opérations de copies et déplacements de fichiers, il est possible d'utiliser kioclient (présent dans le package kdebase-runtime partir de KDE 4, ou kfmclient avant KDE 4)
Contents
-
Winexe
-
Exemples
- Lister les interface réseaux et les ips de la machine distantes
- Démarrer le service spooler
- Les lister les shadow copies du lecteur D: d'une machine
- Afficher la date du dernier reboot de la machine
- Lister le contenu du lecteur de la machine distante
- Démarrer un session cmd.exe sur la machine distante
-
Exemples
- net
- adtool
- kioclient
1. Winexe
winexe permet lancer des commandes sur la machine distante comme par exemple démarrer un service, lister les ips etc. Le fonctionnement de winexe est la suivante: winexe se connecte au partage ipc$ de la machine distante, copie un exécutable si celui n'est pas présent, et le démarre en tant que service créant un tunnel qui sera utilisé pour lancer les commandes.
1.1. Exemples
Dans les exemples, DOMAIN indique le domaine AD, USER' indique le login à utiliser pour l'authentification et HOST indique le nom de la machine distante
1.1.1. Lister les interface réseaux et les ips de la machine distantes
winexe -U DOMAIN/USER //HOST "ipconfig /all"
1.1.2. Démarrer le service spooler
winexe -U DOMAIN/USER //HOST "net start spooler"
1.1.3. Les lister les shadow copies du lecteur D: d'une machine
winexe -U DOMAIN/USER //HOST "vssadmin List Shadows /For=d:"
Il est possible de créer un snapshot par Create Shadow ou d'en supprimer par delete Shadow de la commande vssadmin
1.1.4. Afficher la date du dernier reboot de la machine
winexe -U DOMAINE/USER //HOST "net STATISTICS server"
1.1.5. Lister le contenu du lecteur de la machine distante
winexe -U DOMAINE/USER //HOST ""cmd.exe /c dir c:"
1.1.6. Démarrer un session cmd.exe sur la machine distante
winexe -U DOMAINE/USER //HOST "cmd.exe"
Pour fermer la session, il suffit taper quit
A chaque lancement de commande, le mot de passe est demandé sur tty. En cas d'utilisation dans un script, il est possible de d'utiliser l'option --password= ou en indiquant un fichier avec l'option --authentication-file. Le format du fichier est le même smbclient
2. net
net fait parti du package samba. Il permet d'adminstrer un domaine AD à partir d'une machine Linux.
2.1. Exemples
Dans les exemples, DOMAIN indique le domaine AD ou le WORKGROUP, USER' indique le login à utiliser pour l'authentification et HOST indique le nom de la machine distante
2.1.1. Lister les utilisateurs
net -S HOST -w DOMAIN -U USER rpc user
- Les sous commandes add, delete, password et info permettent d'ajouter ou supprimer un utilisateur, modifier son mot de passer ou d'afficher des détails complémentaires respectivement.
2.1.2. Lister les groupes
net -S HOST -w DOMAIN -U USER rpc group
2.1.3. Lister les utilisateurs d'un groupe
net -S HOST -w DOMAIN -U USER rpc group members GROUP
Les sous commandes add, delette, addmem, delmem, members et rename permettent d'ajouter ou supprimer un groupe, ajouter, supprimer, lister des membres ou de renommer un groupe respectivement.
Dans le cas ou le membre est une machine, il faut ajouter $ au nom de la machine.
2.1.4. Lister les services
net -S HOST -w DOMAIN -U USER rpc service list
Il est également possible d'arrêter, démarrer, mettre en pause, afficher l'état, de supprimer ou de créer un service à l'aide des sous commandes stop, start, pause, status, delete et create respectivement.
2.1.5. Lister les imprimantes
net -S HOST -w DOMAIN -U USER rpc printer list
3. adtool
adtool est plutôt orienté LDAP. En effet, cette commande utilise une connexion de type LDAP vers l'Active Directory pour effectuer les opérations. De ce fait, la paramètres passé sont de type LDAP. Il est possible d'indiquer les information de connexions dans le fichier ~/.adtool.cfg. Le format du fichier est le suivant:
uri ldaps://DOMAIN_SERVER binddn CN=COMPTE_DE_CONNEXION,CN=Users,DC=DOMAIN,DC=TLD searchbase CN=Users,DC=DOMAIN,DC=TLD
3.1. Exemples
Le mot de passe correspondant au compte de connexion doit être indiqué soit sur le ligne de commande par l'option -w ou dans le fichier de configuration à l'aide du paramètre bindpw.
L'encodate de caractères utilisé est UTF-8.
Comptes utilisateurs sur lesquels portent les opérations correspondent au CN indiqués dans l'AD.
- Il est possible d'exporter la liste de comptes utilisateurs par:
outil ADSI EDIT
par une recherche LDAP, à l'aide ldapsearch ldapsearch -x -D 'CN=LOGIN AD, CN=Users, DC=domain, dc=tld' -W -h AD_SERVER -b 'CN=Users,DC=domain,dc=tld' "(objectClass=user)" cn:
3.1.1. Vérouiller un compte utilisateur
adtool -w PASSWORD userlock USER
3.1.2. Déverrouiller un compte utilisateur
adtool -w PASSWORD userunlock USER
3.1.3. Affichage ou Modifications de propriétés de l'objet utilisateur
3.1.3.1. Afficher le homedirectory
adtool -w PASSWORD attributeget "USER" homedirectory
3.1.3.2. Modifier le homedirectory
adtool -w PASSWORD attributereplace "USER" homedirectory "\\HOST\SHARE\NEW_HOMEDIR"
3.2. Quelques propriétés de l'objet utilisateur
Je pense que toutes propriétés LDAP d'un objet utilisateur ou group peut être modifié. Voici une liste de propriétés non exhaustive utilisateur
userPrincipalName : Login principale (ex: user@domain.tld)
distinguishedName : DN (ex: CN=user name,CN=Users,DC=domain,DC=tld)
scriptPath : login script
homeDirectory : home directory
profilePath : chemin vers le profil itinérant
badPwdCount : nombre de connexions avec un mauvais mot de passe
memberOf : les groupes
uSNChanged : ????
sAMAccountName : login
cn : CN (exemple: user name)
telephoneNumber : numéro de téléphone
uSNCreated : ???
mail : email
manager : DN vers le responsable hiérachique de l'objet
pwdLastSet : date de dernière modification du mot de passe
homeDrive : nom lecteur correspondant au homedirectory
displayName : nom affiché (correspond au CN)
userAccountControl : ????
sAMAccountType : ???
badPasswordTime : date du dernier login avec un mauvais mot de passe
whenChanged : date de dernière modification de l'objet
department : ???
countryCode : code de pays (250 pour la France)
logonCount : Nombre de login effectués.
name : nom
instanceType : ???
objectCategory : catégorie de l'objet
whenCreated : date de création
lastLogoff : date du dernier logout
accountExpires : date d'expiration du compte
primaryGroupID : l'id du groupe principale
lastLogon : date du dernier login
givenName : prénom
codePage : ???
physicalDeliveryOfficeName : L'emplacement physique (bureau)
4. kioclient
kioclient est un outil présent dans le package kdebase-runtime dans la distribution Debian. Il permet de d'effectuer certaines opérations réseaux de façon transparentes. En utilisant cette commande, il est possible de copier/déplacer vers/depuis des machines windows (en utilisant des lecteurs partagés, notamment les partages administratives comme c$). Il est également possible de supprimer des fichiers à l'aide cette commande.
4.1. Exemples
4.1.1. Copie d'un fichier local LOCAL_FILE vers une machine distante
kioclient copy /tmp/LOCAL_FILE 'smb://HOST/c$/temp/'
4.1.2. Déplacer un fichier depuis une machine distante windows vers /tmp/
kioclient mv 'smb://HOST/c$/temp/LOCAL_FILE' /tmp/'
4.1.3. Supprimer un fichier distant
kioclient rm 'smb://HOST/c$/temp/LOCAL_FILE'
Il est possible de désactiver la barre de progression en utilisant l'option --noninteractive