Projet

Général

Profil

ClientSalt » Historique » Version 33

« Précédent - Version 33/34 (diff) - Suivant » - Version actuelle
Gérald Schwartzmann, 29/06/2018 09:55


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>salt-master</service>
            <service_access service='salt-master'>
                <port>4505</port>
                <port>4506</port>
            </service_access>
        </container>
    </containers>

Mise en place sur les clients

Installation par setup

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

Installation silencieuse

Salt-Minion-2017.7.1-Py2-AMD64-Setup.exe /S /master=yoursaltmaster /minion-name=yourminionname

Sans démarrer le service

Salt-Minion-2017.7.1-Py3-AMD64-Setup.exe /S /master=yoursaltmaster /minion-name=yourminionname /start-minion=0

Spécifier le fichier de configuration et enregistrement multimaster

Salt-Minion-2017.7.1-Py3-AMD64-Setup.exe /S /custom-config=windows_minion /master=prod_master1,prod_master2

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

Gestion du timeout : https://dev-eole.ac-dijon.fr/projects/scribe/wiki/MigrationAD#Gestion-du-Timeout

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

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