3. Accès à la console

Même s'il est souvent possible de configurer un équipement à partir d'une interface Web, la console a toujours été l'interface de configuration la plus «sérieuse». Voici quelques arguments pour étayer cette idée :

  • Les «conditions de sécurité» des accès Web de configuration d'équipement ont toujours été médiocres jusqu'à présent. Soit le serveur Web inclus dans l'équipement contient de nombreux trous de sécurité (il suffit d'interroger les bases de rapport d'incidents du CERT: Vulnerabilities, Incidents & Fixes pour s'en convaincre) ; soit le coût financier et humain de modification de l'infrastructure d'accès aux équipements est trop important relativement aux bénéfices attendus.

  • Les interfaces Web ne permettent pas d'appréhender globalement les paramètres de configuration. En effet, dès que le nombre des paramètres et des options devient important, les formulaires Web deviennent très lourds à gérer. Naviguer d'un paramètre à l'autre suppose plusieurs manipulations de formulaires alors que la même opération est immédiate à la console.

Sur les systèmes GNU/Linux, minicom est le «couteau suisse» idéal pour toutes les manipulations sur les liaisons séries. Avant d'aborder sa configuration et sont utilisation, on vérifie que le système offre bien les fonctions nécessaires : Section 3.1, « Ports série » et Section 3.2, « Administration des accès ».

3.1. Ports série

Avant de s'attaquer à la configuration du logiciel, il faut s'assurer que le port série que l'on veut utiliser est disponible. Comme il s'agit d'un périphérique matériel, c'est dans le noyau Linux que l'on trouve les informations utiles. Normalement, tous les noyaux livrés avec les distributions intègrent directement les pilotes des ports série.

Il est facile de vérifier que les ports sont disponibles à l'aide de la commande dmesg :

$ dmesg | less
<snip/>
Serial: 8250/16550 driver .Revision: 1.4 . 48 ports, IRQ sharing enabled
ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

Les informations ci-dessus indiquent que l'on dispose de deux ports : ttyS0 et ttyS1 pilotés par le composant 16550A.

Dans le cas où l'on utilise un noyau «compilé maison», il faut retenir les options indiquées ci-dessous à partir des menus de configuration du noyau :

Linux Kernel Configuration
     Device Drivers
          Character devices
               Serial drivers

       <*> 8250/16550 and compatible serial support
       [*]   Console on 8250/16550 and compatible serial port
       < >   8250/16550 PCMCIA device support
       [ ]   8250/16550 device discovery via ACPI namespace
       (4)   Maximum number of non-legacy 8250/16550 serial ports
       [*]   Extended 8250/16550 serial driver options 
       [*]     Support more than 4 legacy serial ports
       [*]     Support for sharing serial interrupts
       [ ]     Autodetect IRQ on standard ports (unsafe)
       [*]     Support special multiport boards
       [*]     Support RSA serial ports
       --- Non-8250 serial port support  

3.2. Administration des accès

Une fois que le noyau Linux assure le pilotage des ports série, il faut administrer les droits d'accès à ces ports. Par défaut, les périphériques du système de fichiers correspondant aux ports série appartiennent au groupe dialout :

$ ls -l /dev/ttyS?
crw-rw----  1 root dialout 4, 64 2003-02-13 16:41 /dev/ttyS0
crw-rw----  1 root dialout 4, 65 2002-03-14 22:51 /dev/ttyS1
crw-rw----  1 root dialout 4, 66 2002-03-14 22:51 /dev/ttyS2
crw-rw----  1 root dialout 4, 67 2002-03-14 22:51 /dev/ttyS3

Pour qu'un utilisateur normal ait accès aux ports série, il doit appartenir au groupe dialout :

# adduser etu dialout
Ajout de l'utilisateur etu au groupe dialout...
Fait.

L'utilisateur etu doit se reconnecter pour bénéficier des ces nouveaux droits d'accès.

3.3. Installation et configuration par défaut de minicom

Comme indiqué dans la section Section 1.3, « Logiciels utilisés », seuls les paquets de la distribution Debian GNU/Linux sont présentés ici. L'installation de minicom se résume donc à l'instruction suivante :

# apt-get install minicom lrzsz

Après cette étape, il faut créer le fichier de configuration par défaut. Ce fichier sert de dénominateur commun à l'échelle du système. Les paramètres de ce fichier : /etc/minicom/minirc.dfl sont activé à chaque lancement du programme minicom. L'utilisateur est ensuite libre de tout modifier et de se créer ses propres paramètres de configuration par défaut.

Voici un exemple de première exécution du programme :

# minicom -s
<snip/>

       -------------[configuration]-------------
       | Noms de fichers et chemins            |
       | Protocoles de transfert               |
       | Configuration du port série 1
       | Modem et appel                        |
       | Ecran et clavier                      |
       | Enregistrer config. sous dfl 2
       | Enregistrer la configuration sous...  |
       | Sortir                                |
       | Sortir de Minicom                     |
       -----------------------------------------

Pour aller au plus simple, on se contente de fixer les paramètres du port série et de sauvegarder.

1

Première étape, le port série : voir Section 3.3.1, « Paramètres du port série »

2

Enregistrement du fichier /etc/minicom/minirc.dfl.

3.3.1. Paramètres du port série

Les valeurs présentés ci-dessous correspondent à la grande majorité des paramètres par défaut des équipements d'interconnexion.

 -----------------------------------------------------------------------
 | A -                             Port série : /dev/ttyS0 1
 | B - Emplacement du fichier de verrouillage : /var/lock              |
 | C -            Programme d'appel intérieur :                        |
 | D -            Programme d'appel extérieur :                        |
 | E -                      Débit/Parité/Bits : 9600 8N1 2
 | F -              Contrôle de flux matériel : Oui 3
 | G -              Contrôle de flux logiciel : Non                    |
 |                                                                     |
 |    Changer quel réglage ?                                           |
 -----------------------------------------------------------------------

1

En fonction de la liste des ports série disponibles (voir Section 3.1, « Ports série »), on saisit le nom du premier port série.

2

En fonction des paramètres de l'équipement à gérer, on fixe les paramètres de la liaison à l'aide du menu suivant :

 ------[Paramètres de communication]-------
 |                                        |
 | Actuellement :  9600 8N1               |
 |                                        |
 |   Vitesse        Parité       Données  |
 |                                        |
 | A: 300           L: Aucune       S: 5  |
 | B: 1200          M: Paire        T: 6  |
 | C: 2400          N: Impaire      U: 7  |
 | D: 4800          O: Marque       V: 8  |
 | E: 9600          P: Espace             |
 | F: 19200                  Bits d'arrêt |
 | G: 38400                         W: 1  |
 | H: 57600                         X: 2  |
 | I: 115200        Q: 8-A-1              |
 | J: 230400        R: 7-P-1              |
 |                                        |
 |                                        |
 | Choix, ou <Entrée> pour sortir ?       |
 ------------------------------------------

3

Toujours en fonction de l'équipement à gérer, on choisit le contrôle de flux matériel. C'est le mode le plus fiable.

3.3.2. Fichier de configuration par défaut

Voici une exemple de fichier /etc/minicom/minirc.dfl obtenu à partir des réglages ci-dessus.

# Fichier généré automatiquement - utilisez « minicom -s »
# pour changer les paramètres
pu port             /dev/ttyS0
pu baudrate         9600
pu bits             8
pu parity           N
pu stopbits         1
pu scriptprog       /usr/bin/runscript
pu minit            ~^M~ATZ^M~
pu mreset           ~^M~ATZ^M~
pu escape-key       Escape (Meta)

Il est aussi possible d'effacer toutes les commandes Hayes de dialogue avec les modems. Comme minicom possède une option de démarrage éliminant tous les dialogues modems, il n'est pas nécessaire de traiter ce problème au niveau système. Il se peut qu'un utilisateur ait effectivement besoin d'un modem.

3.4. Configuration utilisateur

Le jeu des fonctionnalités de minicom est très riche. Il suffit de consulter les pages de manuels pour s'en convaincre : man minicom. L'objet de ce document n'étant de dresser un catalogue exhaustif de ces fonctions, voici un exemple type de configuration utilisateur :

$ MINICOM="-o1 -82 -l3 -m4 -con5 -t linux6" ; export MINICOM7

1

Option -o : minicom n'exécute pas les codes d'initialisation. C'est cette option qui permet d'éviter les commandes Hayes au démarrage. Dans le contexte de connexion à un équipement réseau, les dialogues modems sont totalement inutiles.

2

Option -8 : les caractères codés sur 8 bits sont transmis sans aucune modification. Cette option permet d'afficher les caractères accentués en français.

3

Option -l : traduction littérale des caractères avec le bit de poids fort à 1. Avec cette option minicom n'essaie pas de traduire les caractères IBM en ASCII.

4

Option -m : redéfinit la touche de commande avec la touche Meta ou Alt. Avec un système GNU/Linux, on rencontre deux cas de figure classiques :

Sans interface graphique
$ env | grep -i term
TERM=linux

Il vaut mieux éviter l'option -m et utiliser la séquence de touches Ctrl+a pour accéder aux fonctions. Par exemple, on accède au menu principal avec la séquence Ctrl+a puis z.

Avec interface graphique
$ env | grep -i term
TERM=xterm

L'option -m est utile pour simplifier l'appel aux fonctions. Il suffit d'utiliser la touche Alt. Par exemple, on accède au menu principal avec la séquence Alt+z.

5

Option -c : utilisation de la couleur. On ajoute on ou off pour activer ou désactiver l'affichage des couleurs.

6

Option -t : définition du type de terminal : linux dans ce cas. Cette option est très pratique pour conserver les dimensions de la console avec les environnements graphiques utilisateur. Il est fréquent que la même fenêtre de consoles serve à gérer plusieurs équipements et de la documentation. Sans cette option, minicom redimensionne la console avec une largeur de 80 caractères.

7

Positionnement de la variable d'environnement MINICOM. Cette variable est consultée à chaque exécution de minicom.

Une fois que l'on est satisfait de son jeu d'options minicom, il est possible de le conserver dans la configuration du shell :

$ echo export MINICOM=\"-o -8 -l -m -con -t linux\" >>~/.bash_profile

De cette façon, toute ouverture d'un nouveau shell comprendra la variable d'environnement MINICOM et ses options.

3.5. Exemples d'utilisation de minicom

3.5.1. Séquences Break

Les exemples d'utilisation des séquences Break sont nombreux. Le plus souvent, il s'agit d'interrompre brutalement le chargement du système d'exploitation sur un équipement. À la suite de cette opération, on peut charger une nouvelle image système ou reprendre la main sur un équipement dont on a perdu les mots de passe.

Suivant la configuration de minicom, les séquences de touches diffèrent.

  • Avec un codage clavier sur 7 bits, la séquence est : Ctrl+a puis f.

  • Avec un codage clavier sur 8 bits, la séquence est : Alt+f.

Initialisation d'un commutateur Cisco™ 2950

Pour interrompre le chargement du système d'un commutateur de ce modèle il faut que la variable d'environnement ENABLE_BREAK soit préalablement positionnée sur on.

sw1#sh boot
BOOT path-list:
Config file:          flash:/config.text
Private Config file:  flash:/private-config.text
Enable Break:         ON
Manual Boot:          no
HELPER path-list:
NVRAM/Config file
      buffer size:    32768

Lors du redémarrage de l'équipement il est possible d'utiliser la séquence Ctrl+a puis f pour envoyer un Break et interrompre le chargement du système.

1

Résultat de la séquence Break.

flashfs[0]: Bytes available: 3169792
flashfs[0]: flashfs fsck took 7 seconds.
...done initializing flash.
Boot Sector Filesystem (bs:) installed, fsid: 3
Parameter Block Filesystem (pb:) installed, fsid: 4
Loading "flash:/c2950-i6q4l2-mz.121-22.EA2.bin"...###########################bad
Error loading "flash:/c2950-i6q4l2-mz.121-22.EA2.bin"

Interrupt within 5 seconds to abort boot process.
Boot process failed...

The system is unable to boot automatically.  The BOOT
environment variable needs to be set to a bootable
image.

1switch:
Initialisation d'un routeur Cisco™ 2500

Pour interrompre le chargement du système IOS d'un routeur de cette marque, il faut envoyer un Break pendant les 60 premières secondes après la mise sous tension de l'équipement. Comme cet exemple est traité via un portable avec une interface graphique, la séquence de touches est : Alt+f.

1

Résultat de la séquence Break.

System Bootstrap, Version 11.0(10c)XB2, PLATFORM SPECIFIC RELEASE SOFTWARE (fc1)
Copyright (c) 1986-1998 by cisco Systems
2500 processor with 14336 Kbytes of main memory

1Abort at 0x11198B6 (PC)
>
>o/r 0x2142
>
>b

3.5.2. Transfert d'une image système via xmodem

En reprenant le cas du commutateur Cisco™ 2950, on peut transférer une image du système d'exploitation via la connexion série avec le protocole xmodem. Ce n'est certainement pas la méthode la plus rapide mais lorsque toutes les informations de la mémoire flash ont été détruite, il ne reste pas beaucoup d'autre solution.

Voici un exemple de «catastrophe provoquée» :

  1. On commence par détruire le contenu de la mémoire flash.

    switch: format flash:
    Are you sure you want to format "flash:" (all data will be lost) (y/n)?y
    flashfs[0]: 0 files, 1 directories
    flashfs[0]: 0 orphaned files, 0 orphaned directories
    flashfs[0]: Total bytes: 7741440
    flashfs[0]: Bytes used: 1024
    flashfs[0]: Bytes available: 7740416
    flashfs[0]: flashfs fsck took 5 seconds.
    Filesystem "flash:" formatted
    switch: dir flash:
    Directory of flash:/
    
    2    -rwx  285       <date>               env_vars
    
    7739904 bytes available (1536 bytes used)
    switch:
    
  2. On prépare le transfert d'image système via xmodem sur le commutateur.

    switch: flash_init
    Initializing Flash...
    ...The flash is already initialized.
    switch: load_helper
    copy xmodem: flash:c2950-i6q4l2-mz.121-22.EA2.bin
    Begin the Xmodem or Xmodem-1K transfer now...
    C
    
  3. On lance le transfert à partir de la séquence de touches Crtl+A puis s.

    1

    Sélection du protocole de transfert.

    2

    Sélection du fichier image système à transférer.

    3

    Transfert du fichier image système.

             +-[Envoyer]--+
             | zmodem     |
             | ymodem     |
             | xmodem1
             | kermit     |
             | ascii      |
             +------------+
    <snip/>
    
     +-----------[Sélectionner un fichier pour envoyer]------------+
     |Répertoire : /home/etu                                       |
     | [..]                                                        |
     | [ios]                                                       |
     | .bash_history                                               |
     | .bash_profile                                               |
     | .bashrc                                                     |
     | .viminfo                                                    |
     | c2950-i6q4l2-mz.121-22.EA2.bin2
     | c2950-i6q4l2-tar.121-22.EA2.tar                             |
     | minicom.log                                                 |
     |                                                             |
     |                                                             |
     |       (Échap pour sortir, Espace pour marquer)              |
     +-------------------------------------------------------------+
    
               [Aller] [Préc.] [Voir]  [Marq.] [Dém .]   [OK]
    <snip/>
    
    +-----[xmodem envoyer - Appuyez sur CTRL-C pour quitter]------+
    |Sending c2950-i6q4l2-mz.121-22.EA2.bin, 24111 blocks: Give yo|
    |ur local XMODEM receive command now.                         |
    |Xmodem sectors/kbytes sent: 138/17k3
    |                                                             |
    |                                                             |
    |                                                             |
    |                                                             |
    +-------------------------------------------------------------+