• Aucun résultat trouvé

Le protocole Point-a-Point | PPP

8.4 Les chiers d'options

Avant que pppd n'analyse les arguments de sa ligne de commande, il recherche di e- rents chiers pouvant contenir des options par defaut. Ces chiers peuvent indiquer n'importe quelle option valide, sur plusieurs lignes si necessaire; les commentaires sont introduits par le signe diese (#).

Le chier /etc/ppp/options est le premier recherche, a chaque demarrage de pppd. L'utiliser pour initialiser certaines valeurs par defaut est une bonne idee, car cela evite aux utilisateurs de forcer certains parametres pouvant compromettre la securite. Par exemple, pour faire que pppd demande a chaque fois que l'autre c^ote s'identi e (avec PAP ou CHAP), il sut d'ajouter l'optionauthdans ce chier. Elle ne pourra plus

^etre forcee par l'utilisateur, et il devient alors impossible d'etablir une connexion PPP avec des systemes absents de votre base de donnees d'authenti cation.

L'autre chier d'options, qui est lu apres /etc/ppp/options, s'appelle .ppprc dans le repertoire personnel de l'utilisateur. Il permet a chacun de speci er ses propres options par defaut.

Voici un exemple de chier /etc/ppp/options :

# Options globales pour pppd sur kro.bibine.com auth # demande l'authentification

usehostname # utilise le nom d'h^ote local pour CHAP

lock # emploie les fichiers de verrouillage style UUCP domain bibine.com # notre nom de domaine

Les deux premieres options concernent l'identi cation et seront decrites plus bas. Le mot clelock rend pppd compatible avec la methode UUCP pour le verrouillage

des peripheriques. Dans cette convention, chaque processus accedant a un port serie, disons /dev/cua3, cree un chier nomme LCK..cua3 dans le repertoire spool/uucp pour signaler que le peripherique est en cours d'utilisation. Cela permet d'eviter que certains autres programmes tentent d'acceder au port serie au m^eme moment. L'inter^et de mettre ces options dans le chier de con guration global, c'est qu'elles ne pourront plus ^etre forcees par quiconque par la suite, o rant ainsi un niveau de securite raisonnable. Notez que quelques-unes n'obeissent pas a cette regle, la cha^ne connectpar exemple.

8.5 Appel telephonique par le programme

chat

Le fait d'^etre oblige d'etablir la connexion manuellement avant de lancer pppd vous a peut-^etre rebute. A la di erence de dip, pppd ne possede pas son propre langage script pour l'appel d'un serveur, mais necessite qu'un programme externe quelconque prenne en charge cette operation. La commande necessaire peut ^etre automatiquement executee par pppd, si on la lui passe en argument de l'option connect; il redirigera alors l'entree et la sortie standard de la commande vers le port serie. Certains utilisent expect, ecrit par Don Libes. Il comporte un langage tres puissant base sur Tcl et est etudie exactement pour ce type d'applications.

Le paquetage pppd contient un programme similaire appele chat, qui vous permet de rediger des scripts de dialogue dans le style UUCP. Il s'agit de sequences de cha^nes de caracteres que l'on attend du serveur distant, et des reponses que nous devons envoyer pour chacune d'elles. Nous les appellerons respectivement attente et envoi; en voici un exemple typique, extrait d'un script de dialogue:

ogin: dugenou ssword: salut

Ici, chat attendra que le systeme distant nous envoie l'invite de login, et nous lui repondrons par le nom de l'utilisateur

dugenou

. Nous n'attendons que la cha^ne

ogin:. Ainsi, que la premiere lettre soit majuscule ou minuscule, ou remplacee par

un malheureux parasite, sera sans importance. Ensuite, nous attendons que l'on nous demande le mot de passe (ssword:), et nous envoyons la reponse.

Un script de dialogue n'est pas autre chose. Bien s^ur, pour etablir la communication, il faut egalement y inclure les commandes necessaires au modem. Supposons que vous disposez d'un modem Hayes (le contraire serait etonnant), et que le numero de telephone du serveur est 318714. Pour appeler

pabo

, la commande chat complete est alors:

Par de nition, la premiere cha^ne doit ^etre une attente, mais comme le modem ne dira jamais rien tant que nous ne lui avons pas adresse la parole, nous indiquons une cha^ne vide pour que chat n'attende pas inde niment. Nous envoyons ensuite

ATZ, la commande de remise a zero des modems compatibles Hayes, et attendons sa

reponse (OK). La cha^ne suivante envoie la commande de numerotation et le numero

de telephone, et attend le messageCONNECTen reponse. La encore, cette attente est

suivie d'une cha^ne vide car nous ne voulons rien envoyer pour l'instant, il nous faut attendre l'invite du serveur. La suite de ce script fonctionne exactement comme nous l'avons decrit plus haut.

L'option-vindique a chat d'enregistrer toutes les activites dans les chiers trace du

systeme, par le demon syslog; c'est le niveau local2 qui est utilise5.

Speci er le script de dialogue sur la ligne de commandes presente un certain risque, car tout utilisateur peut se servir de ps et visualiser cette ligne de commandes. Vous pouvez eviter ce probleme en mettant ce script dans un chier, disons par exemple appel-pabo. Il sura d'indiquer a chat, par l'option-fsuivie du nom de chier, d'aller

lire le script dedans. Maintenant, l'appel a pppd se passe donc comme ceci:

# pppd connect "chat -f appel-pabo" /dev/cua3 38400 -detach \ crtscts modem defaultroute

En plus de l'option connect qui speci e le script de dialogue, nous avons ajoute deux autres options a la commande: -detach, qui demande a pppd de ne pas se detacher de la console et passer en arriere-plan, et le mot cle modem, qui lui permet de gerer la ligne serie dans le cas particulier d'un modem, par exemple en deconnectant la ligne apres l'appel. Si vous n'utilisez pas ce mot cle, pppd ne testera pas la ligne DCD (detection de porteuse) et ne detectera jamais la deconnexion eventuelle de la machine distante.

Tous ces exemples sont plut^ot simples; chat permet de faire des scripts bien plus complexes. Il o re par exemple l'interessante possibilite de pouvoir abandonner la session en retournant une erreur, en fonction des reponses obtenues. Les messages sur lesquels on utilisera typiquement cette fonction sontBUSYouNO CARRIER, que votre

modem indiquera si le numero appele est occupe ou ne repond pas. Pour que chat reconnaisse immediatement ces messages, vous pouvez les indiquer au debut du script par le mot cleABORT:

$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...

De m^eme, vous pouvez changer le temps d'attente maximal de toute partie du dialogue en inserant l'optionTIMEOUT. Consultez la page de manuel de chat(8) pour les details.

Quelquefois, vous aurez aussi besoin de conditions d'execution de certaines parties du script. Par exemple, lorsque vous ne recevez pas l'invite de la machine appelee, 5:Si vous modi ezsyslog.confpour rediriger ces traces dans un chier, assurez-vous qu'il ne soit

pas lisible par tout le monde, carchat enregistre tout le dialogue, tel quel, y compris les mots de passe.

vous pouvez vouloir lui envoyer un BREAK, ou un retour-chariot. C'est realisable en ajoutant un script secondaire a une attente de cha^ne: il consiste en une serie de sequences attente/envoi, comme le script principal, mais qui sont separees par des tirets. Le script secondaire est execute lorsque la cha^ne attendue a laquelle il est rattache n'est pas recue dans le temps imparti. Nous pourrions modi er l'exemple precedent de cette facon:

ogin:-BREAK-ogin: ppp ssword: GaGariN

Maintenant, lorsque chat ne recoit pas l'invitelogindans le temps prevu, le script

secondaire est execute et envoie un BREAK, puis attend a nouveau. Si l'invite appa- ra^t, le script continue a se derouler normalement, sinon chat se termine en retournant une erreur au systeme ou au programme qui l'a appele.