ClientSalt » Historique » Version 28
« Précédent -
Version 28/34
(diff) -
Suivant » -
Version actuelle
Joël Cuissinat, 04/05/2018 17:06
Utilisation de Salt pour remplacer le client Scribe¶
- Utilisation de Salt pour remplacer le client Scribe
Mise en place sur le module¶
Les paquets nécessaires sont déjà en place sur un module Seth ou un module Scribe car ils sont nécessaires à l'EAD3.
Dans le cadre de ScribeAD, on pourrait envisager d'installer le paquet salt-master dans le conteneur addc.
Le service salt-master doit être activé (même si l'EAD3 est désactivé !) et les minions (clients) doivent pouvoir accéder aux ports 4405 et 4406 du master.
L'extrait de dictionnaire Creole suivant force l'activation du service (utilisation d'une balise conteneur pour contourner #10956) et ouvre l'accès eole-firewall :
<containers> <container name='fichier'> <service servicelist='websockify'>salt-master</service> <service_access service='salt-master'> <port>4505</port> <port>4506</port> </service_access> </container> </containers>
Mise en place sur les clients¶
Pour les premières maquettes, nous installons manuellement la dernière version de Salt-Minion à partir de l'exécutable officiel (Python3 AMD64) : https://docs.saltstack.com/en/latest/topics/installation/windows.html
À l'étape Minion Settings :- sélectionner Default Config
- renseigner Master IP or Hostname avec l'IP du master (exemple : 10.1.3.5 pour etb1.scribe)
- laisser hostname dans Minion Name: (c'est un mot clé, "hostname" ne sera pas renseigné dans la configuration et Minion utilisera "socket.getfqdn()" pour savoir quel nom renvoyer au Master)
NB : Le fichier de configuration du Minion est disponible dans C:\salt\conf\minion
Enregistrement du minion¶
- Le Minion apparaît dans la liste des clés à accepter :
root@scribe:~# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: PC-124784.ac-test.fr Rejected Keys:
- Accepter la clé :
root@scribe:~# salt-key -y -a PC-124784.ac-test.fr The following keys are going to be accepted: Unaccepted Keys: PC-124784.ac-test.fr Key for minion PC-124784.ac-test.fr accepted.
- Supprimer la clé :
root@scribe:~# salt-key -d PC-124784.ac-test.fr
- Accepter toutes les clés :
root@scribe:~# salt-key -A
Commandes basiques¶
Test du Minion¶
root@scribe:~# salt PC-124784.ac-test.fr test.ping PC-124784.ac-test.fr: True
Redémarrage du PC¶
- Immédiat
salt PC-124784.ac-test.fr system.reboot 0
salt 'PC-12511.ac-test.fr' cmd.run 'shutdown /r /t 0 /f'
- 5 secondes
salt 'FDGFDG.ac-test.fr' system.reboot 5 True
Par défaut, le timeout s'exprime en minutes. Il est possible de l'exprimer en seconde en passant le second paramètre à True :)
Gestion des clients Microsoft¶
Documentation¶
- Module win_system : https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.win_system.html
- Module win_dns_client : https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.win_dns_client.html
- Module win_network : https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.win_network.html
- Module win_lgpo : https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.win_lgpo.html
Interrogations diverses¶
root@scribe:~# salt 'PC-124784.ac-test.fr' system.get_computer_name PC-124784.ac-test.fr: PC-CDI1
root@scribe:~# salt 'PC-124784.ac-test.fr' system.get_domain_workgroup PC-124784.ac-test.fr: ---------- Domain: etb1.lan
root@scribe:~# salt 'PC-124784.ac-test.fr' system.get_system_date PC-124784.ac-test.fr: 05/04/2018
Renommage du PC¶
root@scribe:~# salt PC-124784.ac-test.fr system.set_computer_name PC-CDI1 PC-124784.ac-test.fr: ---------- Computer Name: ---------- Current: PC-125292 Pending: PC-CDI1
Le renommage ne sera effectif qu'après redémarrage du poste client.
Évidemment le renommage du poste ne modifie pas le nom du Minion !
Jonction au domaine¶
salt PC-124784.ac-test.fr system.join_domain domain='etb1.lan' username='admin' password='eole' account_exists=False restart=True
Si on relance la commande une seconde fois, on obtient le message suivant :
PC-124784.ac-test.fr: Already joined to etb1.lan
Changer le DNS¶
- Récupérer le nom de l'interface réseau du client, 192.168.0.5=<ip salt master> => on récupère le nom de la bonne interface s'il y en a plusieurs
salt 'PC-124784.ac-test.fr' network.get_route 192.168.0.5
root@dc1:~# salt 'PC-124784.ac-test.fr' network.get_route 192.168.0.5 PC-124784.ac-test.fr: ---------- destination: 192.168.0.5 gateway: 0.0.0.0 interface: MonInterface source: 192.168.0.184
salt 'PC-124784.ac-test.fr' ip.set_static_dns MonInterface 192.168.0.5
Gestion des GPO¶
Lister toutes les GPO du poste :
salt 'PC-124784.ac-test.fr' lgpo.get machine return_full_policy_names=True
root@scribe:~# salt 'PC-125292.etb1.lan' lgpo.get_policy_info 'Maximum password age' machine PC-125292.etb1.lan: ---------- message: policy_aliases: - MaxPasswordAge policy_class: machine policy_elements: policy_found: True policy_name: Maximum password age rights_assignment: False
root@scribe:~# salt 'PC-125292.etb1.lan' lgpo.get_policy_info 'Account lockout duration' machine PC-125292.etb1.lan: ---------- message: policy_aliases: - LockoutDuration policy_class: machine policy_elements: policy_found: True policy_name: Account lockout duration rights_assignment: False root@scribe:~#
root@scribe:~# salt 'PC-125292.etb1.lan' lgpo.set computer_policy="{'LockoutDuration': 90}" PC-125292.etb1.lan: True root@scribe:~#
ou
root@scribe:~# salt 'PC-125292.etb1.lan' lgpo.set_computer_policy LockoutDuration 1440 PC-125292.etb1.lan: True root@scribe:~#
Application mise à disposition par Microsoft qui recense les GPO : http://gpsearch.azurewebsites.net/default.aspx?ref=1#10677
Autre¶
salt 'PC-12511.ac-test.fr' cmd.run notepad.exe
salt '*ac-test.fr' sys.list_functions salt '*ac-test.fr' sys.list_state_functions
salt 'FDGFDG.ac-test.fr' win_dns_client.get_dns_config salt 'FDGFDG.ac-test.fr' win_dns_client.add_dns 8.8.8.8 "Ethernet" 1 salt 'FDGFDG.ac-test.fr' cmd.run "netsh interface ip show config" salt 'FDGFDG.ac-test.fr' cmd.run "CHCP 1252 & netsh interface ip show config"
salt -G 'os_family:Windows' network.interfaces salt 'PC-124784.ac-test.fr' network.interfaces salt 'PC-124784.ac-test.fr' network.interfaces_names
Commandes non fonctionnelles¶
Les commandes suivantes ne fonctionne pas :
salt 'PC-124784.ac-test.fr' ip.get_all_interfaces
salt -G 'os_family:Windows' ip.get_all_interfaces
Voir les logs du client depuis le serveur (avec tail par ex.)¶
- Monter C$ pour accéder au système de fichiers du client
root@dc1:~# mount -t cifs //PC-12511.ac-test.fr/C$ /mnt/ -o username=admin,password='Eole;2121',vers=3.0,ip=192.168.0.181 # notez le "vers=3.0" pour éviter l'erreur "host is down"
- changer le log level (vim ou nano sur le fichier devrait fonctionner, sinon notepad depuis windows)
root@dc1:~# grep log_level /mnt/salt/conf/minion #log_level: warning log_level: info
root@dc1:~# tail -f /mnt/salt/var/log/salt/minion
- MS-DOS :
sc stop salt-minion rem attendre qques secondes que ça s'arrête effectivement sc start salt-minion
Erreur "Minion did not return. [No response]"¶
root@dc1:~# salt 'PC-12511.ac-test.fr' sys.list_functions PC-12511.ac-test.fr: Minion did not return. [No response]
root@dc1:~# salt 'PC-12511.ac-test.fr' sys.list_functionsA PC-12511.ac-test.fr: Minion did not return. [No response]
root@dc1:~# salt 'PC-12511.ac-test.fr' sys.list_functionsA -t 15 PC-12511.ac-test.fr: 'sys.list_functionsA' is not available. ERROR: Minions returned with non-zero exit code
root@dc1:~# salt 'PC-12511.ac-test.fr' sys.list_functions -t 15 PC-12511.ac-test.fr: - aliases.get_target - aliases.has_target - aliases.list_aliases - aliases.rm_alias - aliases.set_target - archive.cmd_unzip [...] - zenoss.set_prod_state root@dc1:~# salt 'PC-12511.ac-test.fr' sys.list_state_functions -t 15 PC-12511.ac-test.fr: - alias.absent - alias.present - archive.extracted - artifactory.downloaded - beacon.absent - beacon.disabled - beacon.enabled - beacon.present
tcpdump pour voir comment est exécutée une commande :¶
- pendant
root@dc1:~# date; salt 'PC-12511.ac-test.fr' test.ping; date vendredi 4 mai 2018, 11:05:22 (UTC+0200) PC-12511.ac-test.fr: True vendredi 4 mai 2018, 11:05:34 (UTC+0200)
- il se passe
root@dc1:~# tcpdump -nni any host 192.168.0.181 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 11:05:23.512624 IP 192.168.0.5.4505 > 192.168.0.181.62346: Flags [P.], seq 2666401297:2666401476, ack 3424014703, win 229, length 179 11:05:23.560410 IP 192.168.0.181.62346 > 192.168.0.5.4505: Flags [.], ack 179, win 2052, length 0 11:05:28.520941 ARP, Request who-has 192.168.0.181 tell 192.168.0.5, length 28 11:05:28.522143 ARP, Reply 192.168.0.181 is-at 02:00:c0:a8:00:66, length 46 11:05:28.639886 IP 192.168.0.5.4505 > 192.168.0.181.62346: Flags [P.], seq 179:390, ack 1, win 229, length 211 11:05:28.685272 IP 192.168.0.181.62346 > 192.168.0.5.4505: Flags [.], ack 390, win 2051, length 0 11:05:34.192625 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [S], seq 3979318635, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 11:05:34.192773 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [S.], seq 1292250989, ack 3979318636, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 11:05:34.193296 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [.], ack 1, win 256, length 0 11:05:34.193613 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [P.], seq 1:11, ack 1, win 229, length 10 11:05:34.193669 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [P.], seq 1:11, ack 1, win 256, length 10 11:05:34.193690 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [.], ack 11, win 229, length 0 11:05:34.193809 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [P.], seq 11:12, ack 11, win 229, length 1 11:05:34.194073 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [.], ack 12, win 256, length 0 11:05:34.194393 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [P.], seq 11:65, ack 12, win 256, length 54 11:05:34.194525 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [P.], seq 12:65, ack 65, win 229, length 53 11:05:34.194573 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [P.], seq 65:108, ack 65, win 229, length 43 11:05:34.194879 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [.], ack 108, win 256, length 0 11:05:34.194977 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [P.], seq 65:105, ack 108, win 256, length 40 11:05:34.196240 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [S], seq 2078233463, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 11:05:34.196318 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [S.], seq 3541933958, ack 2078233464, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 11:05:34.196599 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [.], ack 1, win 256, length 0 11:05:34.197026 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [P.], seq 1:11, ack 1, win 256, length 10 11:05:34.197059 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [.], ack 11, win 229, length 0 11:05:34.197276 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [P.], seq 1:12, ack 11, win 229, length 11 11:05:34.197631 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [P.], seq 11:65, ack 12, win 256, length 54 11:05:34.197803 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [P.], seq 12:65, ack 65, win 229, length 53 11:05:34.197836 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [P.], seq 65:108, ack 65, win 229, length 43 11:05:34.198124 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [.], ack 108, win 256, length 0 11:05:34.198166 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [P.], seq 65:105, ack 108, win 256, length 40 11:05:34.198358 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [P.], seq 105:888, ack 108, win 256, length 783 11:05:34.198380 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [.], ack 888, win 241, length 0 11:05:34.218144 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [P.], seq 108:1396, ack 888, win 241, length 1288 11:05:34.232902 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [.], ack 105, win 229, length 0 11:05:34.261652 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [F.], seq 888, ack 1396, win 251, length 0 11:05:34.262028 IP 192.168.0.5.4506 > 192.168.0.181.64084: Flags [F.], seq 1396, ack 889, win 241, length 0 11:05:34.262386 IP 192.168.0.181.64084 > 192.168.0.5.4506: Flags [.], ack 1397, win 251, length 0 11:05:34.265439 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [P.], seq 105:302, ack 108, win 256, length 197 11:05:34.265500 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [.], ack 302, win 237, length 0 11:05:34.278014 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [P.], seq 108:179, ack 302, win 237, length 71 11:05:34.281873 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [F.], seq 302, ack 179, win 255, length 0 11:05:34.282010 IP 192.168.0.5.4506 > 192.168.0.181.64083: Flags [F.], seq 179, ack 303, win 237, length 0 11:05:34.282351 IP 192.168.0.181.64083 > 192.168.0.5.4506: Flags [.], ack 180, win 255, length 0 ^C 43 packets captured 43 packets received by filter 0 packets dropped by kernel