Projet

Général

Profil

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

Révision 1 (Christophe Martin, 21/09/2010 12:18) → Révision 2/3 (Christophe Martin, 21/09/2010 14:21)

h1. Détails du script serveur d'enregistrement des clients 

 h2. principe de fonctionnement du script 

 voir [[communications client-serveur lors de l'installation]] 

 h2. détails de fonctionnement. 

 Le script enregistre tout dans un journal, succès logue tout, success et erreurs via syslog. 

 Il envoie un mail s'il y a réussite. 

 L'affichage du script est strictement contrôlé. Rien ne doit être affiché avant de savoir s'il si il faut émettre une ligne contenant le seul mot @success@. 

 toute erreur est *fatale*, est enregistrée, loggée, et provoque l'affichage d'un message d'erreur (donc pas de ligne @success@ dans ce cas) 

 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 $SSH_ORIGINAL_COMMAND 

 Le script utilise également la variable d'environnement $SSH_CONNECTION passée par ssh elle aussi 

 Le script vérifie les points suivants. tout échec est fatal. : 

 * variable $SSH_CONNECTION 
 ** non vide 
 ** Le premier mot de $SSH_CONNECTION est une adresse IP valide 
 ** si un enregistrement PTR est dans le DNS, alors il pointe vers un nom en *.univ-brest.fr 
 * variable $SSH_ORIGINAL_COMMAND est de la forme OS:logon 
 ** OS 
 *** est non vide 
 *** ne contient que des lettres minuscules et des chiffres 
 *** commence par une lettre 
 *** pas plus de 20 caractères 
 *** OS est un des mots connus connu du script (en dur dans le script, initialement @linux@ @win@ @mac@) 
 ** logon 
 *** est non vide 
 *** Ne contient que des lettres minuscules des chiffres 
 *** commence par une lettre 
 *** pas plus de 16 caractères 
 *** présent dans l'annuaire LDAP sur annuaire-iuem.univ-brest.fr 
 * présence préalable de la machine dans le fichier @/usr/local/etc/backuppc/hosts@ hosts de backuppc 
 ** *NB*, *NB* , seul le fichier @hosts@ hosts est vérifié, *pas la présence de sauvegarde précédentes éventuelles* 
 ** Aucune présence actuelle 
 ** présente avec le même nom d'utilisateur (évite usurpation d'identité). La présence est testée sous les deux formes 
 *** IP [01] logon 
 *** nom_dns [01] logon 
 * Le service ssh est disponible sur le client. 

 Toutes les actions du script sont vérifiées par le code d'erreur de la commande précédente. 

 h2. actions entreprises par le script 

 Dans l'ordre : 

 # Vérifications des variables d'environnement et calcul/obtention des valeur concernant le client : @ip@ , @client_hostname@ , @user@  
 # Vérification de l'adresse IP 
 # Vérification de la présence préalable de la machine client 
 # Ajout de la machine client avec l'utilisateur 
 # message dans le journal log annonçant l'ajout de la machine 
 # 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. 
 # scan ssh du client, enregistrement dans @.ssh/known_hosts@ 
 # génération d'un fichier de config pour le client d'après un modèle dépendant de l'OS. 
 # @reload@ du service backuppc 
 # affichage pour le client 
 ## success 
 ## url: url de config de la machine cliente 
 ## key: partie publique du biclef ssh pour ce client. 
 # courriel  
 # mail aux sysadmins sysadmin pour prévenir de l'enregistrement l'intégration de la machine. 

 h2. données enregistrées dans le script. 

 Le script se termine à la ligne 
 <pre> 
 __DATA__ 
 </pre> 

 En dessous de cette ligne se trouvent des données accessibles au script par la fonction @block@. 

 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@ 

 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 : 
 <pre> 
 ===== Nom_du_bloc ===== 
 ========== 
 </pre> 

 Il existe autant de blocs qu'il y a de noms d'OS reconnus. 

 Les blocs peuvent être vides mais *doivent* exister. (techniquement non, mais c'est plus joli comme ça alors on, va le faire.) 

 Par exemple, le bloc pour les clients mac est 

 <pre> 
 ===== mac ===== 
 $Conf{BackupFilesExclude} = { 
   '/private/tmp' => [ 
     '' 
   ], 
   '.Trash' => [ 
     '' 
   ], 
   '/private/var/vm' => [ 
     '' 
   ], 
   '/private/var/automount' => [ 
     '' 
   ], 
   '/proc' => [ 
     '' 
   ], 
   '/Trash' => [ 
     '' 
   ], 
   '/sys' => [ 
     '' 
   ], 
   '/automount' => [ 
     '' 
   ], 
   'Caches' => [ 
     '' 
   ], 
   '/net' => [ 
     '' 
   ], 
   '/private/var/tmp' => [ 
     '' 
   ], 
   '/private/var/run' => [ 
     '' 
   ] 
 }; 
 ========== 
 </pre> 

 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@ ... 

 h2. Modifications du script 

 Toute modification dans le dépôt doit être répercutée sur le serveur. Pour cela : 

 * <pre>scp enregistre-auto-client root@backuppc:/var/lib/backuppc/local-bin/.</pre> 
 ou simplement 
 * <pre>make scp</pre>