Projet

Général

Profil

Actions

Détails du script serveur d'enregistrement des clients

principe de fonctionnement du script

voir communications client-serveur lors de l'installation

détails de fonctionnement.

Le script enregistre tout dans un journal, succès 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 faut émettre une ligne contenant le seul mot success.

toute erreur est fatale, est enregistré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

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 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 de backuppc
    • NB, seul le fichier 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.

actions entreprises par le script

Dans l'ordre :

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

données enregistrées dans le script.

Le script se termine à la ligne

__DATA__

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 :

===== Nom_du_bloc =====
==========

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

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

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

Mis à jour par Christophe Martin il y a plus de 12 ans · 3 révisions