Projet

Général

Profil

Détails du script serveur d'enregistrement des clients » Historique » Version 2

Christophe Martin, 21/09/2010 14:21

1 1 Christophe Martin
h1. Détails du script serveur d'enregistrement des clients
2
3
h2. principe de fonctionnement du script
4
5
voir [[communications client-serveur lors de l'installation]]
6
7
h2. détails de fonctionnement.
8
9 2 Christophe Martin
Le script enregistre tout dans un journal, succès et erreurs via syslog.
10 1 Christophe Martin
11
Il envoie un mail s'il y a réussite.
12
13 2 Christophe Martin
L'affichage du script est strictement contrôlé. Rien ne doit être affiché avant de savoir s'il faut émettre une ligne contenant le seul mot @success@.
14 1 Christophe Martin
15 2 Christophe Martin
toute erreur est *fatale*, est enregistrée, et provoque l'affichage d'un message d'erreur (donc pas de ligne @success@ dans ce cas)
16 1 Christophe Martin
17 2 Christophe Martin
Le script est lancé par une clef ssh et reçoit un paramètre dans la variable d'environnement $SSH_ORIGINAL_COMMAND passée par sshd
18 1 Christophe Martin
19 2 Christophe Martin
Le script utilise également la variable d'environnement $SSH_CONNECTION passée par ssh elle aussi
20
21 1 Christophe Martin
Le script vérifie les points suivants. tout échec est fatal. :
22
23
* variable $SSH_CONNECTION
24
** non vide
25
** Le premier mot de $SSH_CONNECTION est une adresse IP valide
26
** si un enregistrement PTR est dans le DNS, alors il pointe vers un nom en *.univ-brest.fr
27
* variable $SSH_ORIGINAL_COMMAND est de la forme OS:logon
28
** OS
29
*** est non vide
30
*** ne contient que des lettres minuscules et des chiffres
31
*** commence par une lettre
32
*** pas plus de 20 caractères
33 2 Christophe Martin
*** OS est un des mots connus du script (en dur dans le script, initialement @linux@ @win@ @mac@)
34 1 Christophe Martin
** logon
35
*** est non vide
36
*** Ne contient que des lettres minuscules des chiffres
37
*** commence par une lettre
38
*** pas plus de 16 caractères
39
*** présent dans l'annuaire LDAP sur annuaire-iuem.univ-brest.fr
40 2 Christophe Martin
* présence préalable de la machine dans le fichier @/usr/local/etc/backuppc/hosts@ de backuppc
41
** *NB*, seul le fichier @hosts@ est vérifié, *pas la présence de sauvegarde précédentes éventuelles*
42 1 Christophe Martin
** Aucune présence actuelle
43
** présente avec le même nom d'utilisateur (évite usurpation d'identité). La présence est testée sous les deux formes
44
*** IP [01] logon
45
*** nom_dns [01] logon
46
* Le service ssh est disponible sur le client.
47
48
Toutes les actions du script sont vérifiées par le code d'erreur de la commande précédente.
49
50
h2. actions entreprises par le script
51
52
Dans l'ordre :
53
54
# Vérifications des variables d'environnement et calcul/obtention des valeur concernant le client : @ip@ , @client_hostname@ , @user@ 
55
# Vérification de l'adresse IP
56
# Vérification de la présence préalable de la machine client
57
# Ajout de la machine client avec l'utilisateur
58 2 Christophe Martin
# message dans le journal annonçant l'ajout de la machine
59 1 Christophe Martin
# Génération d'une clef ssh spécifique et enregistrement de cette clef dans un répertoire dédié aux clients. Chaque appel génère une nouvelle clef.
60
# scan ssh du client, enregistrement dans @.ssh/known_hosts@
61
# génération d'un fichier de config pour le client d'après un modèle dépendant de l'OS.
62
# @reload@ du service backuppc
63
# affichage pour le client
64
## success
65 2 Christophe Martin
## url: url de config de la machine cliente
66 1 Christophe Martin
## key: partie publique du biclef ssh pour ce client.
67 2 Christophe Martin
# courriel aux sysadmins pour prévenir de l'enregistrement de la machine.
68
69
h2. données enregistrées dans le script.
70
71
Le script se termine à la ligne
72
<pre>
73
__DATA__
74
</pre>
75
76
En dessous de cette ligne se trouvent des données accessibles au script par la fonction @block@.
77
78
Lors de l'enregistrement d'un client, un fichier de configuration pour le client est copié sous le nom @"$client_pc_conf_dir/$client_hostname.pl"@ soit @/usr/local/etc/backuppc/pc/nom_du_client.pl@
79
80
plutot que d'avoir à gérer un répertoire contenant les fichiers types à copier dans le répertoire @/usr/local/etc/backuppc/pc@ , les contenus des fichiers sont inclus directement dans le script, sous la forme de blocs de données délimités par des lignes de la forme :
81
<pre>
82
===== Nom_du_bloc =====
83
==========
84
</pre>
85
86
Il existe autant de blocs qu'il y a de noms d'OS reconnus.
87
88
Les blocs peuvent être vides mais *doivent* exister. (techniquement non, mais c'est plus joli comme ça alors on, va le faire.)
89
90
Par exemple, le bloc pour les clients mac est
91
92
<pre>
93
===== mac =====
94
$Conf{BackupFilesExclude} = {
95
  '/private/tmp' => [
96
    ''
97
  ],
98
  '.Trash' => [
99
    ''
100
  ],
101
  '/private/var/vm' => [
102
    ''
103
  ],
104
  '/private/var/automount' => [
105
    ''
106
  ],
107
  '/proc' => [
108
    ''
109
  ],
110
  '/Trash' => [
111
    ''
112
  ],
113
  '/sys' => [
114
    ''
115
  ],
116
  '/automount' => [
117
    ''
118
  ],
119
  'Caches' => [
120
    ''
121
  ],
122
  '/net' => [
123
    ''
124
  ],
125
  '/private/var/tmp' => [
126
    ''
127
  ],
128
  '/private/var/run' => [
129
    ''
130
  ]
131
};
132
==========
133
</pre>
134
135
Ainsi, chaque client macintosh enregistré a un fichier de configuration que l'utilisateur peut personnaliser et qui, par défaut, exclut les répertoires @/dev@ @/proc@ @/Caches@ @/tmp@ ...
136
137
h2. Modifications du script
138
139
Toute modification dans le dépôt doit être répercutée sur le serveur. Pour cela :
140
141
* <pre>scp enregistre-auto-client root@backuppc:/var/lib/backuppc/local-bin/.</pre>
142
ou simplement
143
* <pre>make scp</pre>