Pierre Ficheux (pierre@rd.lectra.fr)
28/29/30 mai 1997
SAMBA permet d'utiliser le protocole WFW (Windows For Workgroups) sur une station UNIX (la station peut devenir serveur WFW). LINUX permet en plus d'être client WFW (à partir du noyau 2.0). La page de référence de SAMBA est sur:
Un package samba-1.9.16p9-6.i386.rpm pour RedHat-4.1 est également disponible.
La configuration d'un serveur SAMBA basique est relativement simple:
[homes]
workgroup = WORKGROUP
guest ok = no
read only = no
[Data]
comment = Home partition
path = /home
read only = no
guest ok = yes
/usr/local/samba/bin/smbd -D /usr/local/samba/bin/nmbd -Dle fonctionnement des démons est tracé dans var/log.smb et var/log.nmb.
Si vous voulez dialoguer entre machines de réseaux différents, il faut configurer le fichier LSMHOSTS:
# lmhosts sample file # # This file should contain foreign SMB networks (which are not on # the same sub-network), available for SMB browsing (visible in # 'Network Neighborhood' Windows list) # # just put a line such as 'broadcast_mask group G' for each sub-network # Example: # #194.2.13.255 WORKGROUP G # # You should also configure your Windows computer for using LMHOSTS file # There is an example of a Windows LMHOSTS file on C:\WINDOWS\LMHOSTS.SAM #
SAMBA permet de partager une imprimante avec un environnement WFW en utilisant la commande smbclient. Par exemple, pour imprimer sur une imprimante connectée sur un serveur NT:
smbclient \\\\serveur\\imprimante -P -U nom_utilisateur
puis au prompt smb:
print nom_du_fichier
quit
LINUX peut également être un client WFW. Pour cela il faut compiler le noyau (2.0/2.1) avec le support du filesystem SMB (dans le noyau ou bien par module smbfs.o). Il faut également récupérer les utilitaires smbmount et smbumount.
Ces utilitaires font partie du package smbfs-2.0.1 disponible sur:
La syntaxe de montage est simple:
smbmount //serveur/repertoire /point_de_montage
WABI sous LINUX est le portage de l'émulateur Windows-3.11 développé par Sun Microsystems pour Solaris. Cet émulateur nécessite une license Windows-3.11 (ou 3.1). Il ne fonctionne pas avec Windows-95 mais marche très bien avec des applicatifs de bureautique complexe comme le pack Microsoft Office (Word-6, ...).
L'archive est au format .rpm.
PPP (Point to Point Protocol) permet d'établir une connexion IP sur une voie série de manière plus efficace que SLIP (Serial Line Internet Protocol). Une fois la connexion établie, tous les protocoles supérieurs à IP (FTP, telnet, NFS, http, X...) sont disponibles.
Pour établir une connexion PPP, il faut:
PPP est supporté par un grand nombre de systèmes (même MS-Windows) et on peut normalement se connecter d'un système à l'autre. Cependant, cette documentation ne traite que le cas de Linux !
Pour accéder à un serveur PPP installé, ton noyau doit être compilé avec le support TCP/IP. Pour cela, lors du make config il faut répondre comme suit :
Networking support (CONFIG_NET) [y] y TCP/IP networking (CONFIG_INET) [y] y IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] n Network device support? (CONFIG_NETDEVICES) [y] y PPP (point-to-point) support (CONFIG_PPP) [y] y
Tu dois en plus récupérer les sources des programmes
d'accès à PPP (dans l'archive ppp-2.1.2a.tar.gz, voire b, c, ou
d) de manière à installer les programmes suivants :
pppd le programme d'établissement du protocolechat qui permet de dérouler le chat-script d'appel
au site PPPTu peux par exemple installer pppd et chat dans le
répertoire /usr/sbin.
Ensuite, tu dois configurer tes shell-scripts de boot
de manière à configurer la couche TCP/IP (par exemple dans
un fichier /etc/rc.d/rc.net qui sera lancé par
/etc/rc.d/rc.local). En voici un exemple :
echo -n "/etc/rc.net: "
INETD=/sbin/inetd
PORTMAP=/sbin/portmap
# loopback
/sbin/ifconfig lo 127.0.0.1 up netmask 255.255.255.0
/sbin/route add 127.0.0.1 lo
# demarrage des demons
if [ -x $PORTMAP ]; then
echo -n ", `basename $PORTMAP`"
$PORTMAP
fi
if [ -x $INETD ]; then
echo -n ", `basename $INETD`"
$INETD
fi
echo ""
Il faut ensuite ajoute l'adresse IP de ta machine dans
le fichier /etc/hosts :
127.0.0.1 loopback localhost # useful aliases
199.103.124.170 pcpf pcpf.lectra.fr # Mon beau PC en PPP
L'adresse IP de la machine correspond à celle affectée par l'administrateur du serveur PPP pour la connexion associée à un numéro de téléphone donné. Cela signifie que le copain qui se connecte 10 minutes après utilisera la même adresse IP que toi.
Enfin, tu dois configurer ton domaine dans le fichier
/etc/resolv.conf :
domain lectra.fr nameserver 192.1.2.1
La deuxième ligne est utilisée si tu veux utiliser un
serveur de noms, bécane qui te renvoie l'adresse IP correspondant au nom de
machine fourni. Si tu n'as pas de serveur de noms, tu ne pourras
utiliser que des adresses numériques (199.103.124.x) ou bien tu devras
mettre dans ton /etc/hosts toutes les machines auxquelles tu
veux accéder avec leurs adresses IP...
Tu peux également mettre ton nom de domaine dans le
fichier /etc/ppp/options qui doit exister même vide (si tu
ne veux pas que pppd demande /etc/ppp/options, il faut le
compiler avec l'option -DREQ_SYSOPTIONS=0).
Tu peux maintenant fébrilement tester ta connexion en utilisant un shell-script du style (attention : tout cela constitue une seule ligne) :
/usr/sbin/pppd connect '/usr/sbin/chat -v ABORT ERROR ABORT "NO CARRIER" \ ABORT BUSY "" ATB0 OK ATDTxxxxxxxx CONNECT "" ogin: ppp \ word: ppp0' /dev/modem 9600 -detach debug crtscts modem \ defaultroute 199.103.124.170:
La commande chat permet d'effectuer la connexion en
appelant le numéro de téléphone de ton serveur. Attention de
ne pas oublier les options de la deuxième ligne en particulier
modem et defaultroute.
La spécification de la vitesse (9600) ainsi que le chat-script à utiliser (ABORT ERROR ABORT "NO CARRIER" ABORT BUSY "" ATB0 OK ATDTxxxxxxxx CONNECT) dépendent bien entendu de ton modem et de la configuration du serveur (voir également le login et le password).
L'adresse IP doit être celle déclarée en tant
qu'adresse de ta machine en PPP dans /etc/hosts (tu peux
également mettre le nom de ta machine en PPP).
Les informations de debug doivent sortir sur la console (si tu as configuré le syslog pour celà).
A partir de là, tu es connecté sur le réseau distant et tu peux faire par exemple:
$ ping 199.103.124.50 PING 199.103.124.50 (199.103.124.50): 56 data bytes 64 bytes from 199.103.124.50: icmp_seq=0 ttl=255 time=268 ms 64 bytes from 199.103.124.50: icmp_seq=1 ttl=255 time=247 ms 64 bytes from 199.103.124.50: icmp_seq=2 ttl=255 time=266 mspour tester ta connexion. Si le ping marche et que ton réseau est connecté à l'Internet, alors tu as l'Internet chez toi !
Si ça ne marche pas, tu peux tester en tapant
/sbin/ifconfig et le résultat doit ressembler à ça :
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast 127.255.255.255 Mask 255.0.0.0
UP LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
ppp0 Link encap Serial Line IP
inet addr 199.103.124.170 P-t-P 199.103.124.50 Mask 255.255.255.0
UP POINTOPOINT RUNNING MTU 1500 Metric 1
RX packets 33 errors 0 dropped 0 overrun 0
TX packets 42 errors 0 dropped 0 overrun 0
Surtout, tu dois avoir une ligne commençant par ppp0
sinon, no good. Tu peux également tester ton routage par
netstat -nr qui doit donner un truc du style :
Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface 199.103.124.50 0.0.0.0 255.255.255.255 UH 0 0 6 ppp0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 199.103.124.50 0.0.0.0 UG 0 0 6298 ppp0
Avec une ligne 0.0.0.0 contenant l'adresse IP de ton
serveur PPP. Si tu n'as pas cette ligne, il se peut que tu
ais oublié l'option defaultroute.
Certains serveur PPP utilisent un protocole d'authentification appelé PAP (Password Authentification Protocol). Ceci permet d'ajouter un niveau de sécurité supplementaire avant l'identification login/passwd. Pour utiliser PAP, il suffit de créer une fichier /etc/ppp/pap.login contenant les lignes:
mon_login_pap mon_password_papet d'ajouter à la ligne d'appel a pppd l'option:
+ua /etc/ppp/pap.login
Lors, de l'établissement du protocole PPP, le shell-script /etc/ppp/ip-up est lancé. Ceci permet de lancer l'exécution d'une suite de commandes (envoi de mail, récupération de mail par POP3). Pour cela il faut déclarer les mailers SMTP comme expensive dans le fichier sendmail.cf (Voir article de Stéphane Bortzmeyer ici).
# Expensive mailers OctLe messages ne seront plus directement envoyés mais stockés dans la file d'attente (/usr/spool/mqueue).
Exemple:
#!/bin/sh # Recupere le mail par POP3 popclient -3 -k -u pierre -p xxxx -f /usr/spool/mail/pierre -o /usr/spool/mail/pierre gwladys # Vide la file sendmail /usr/lib/sendmail -q
La coupure de la connexion peut être lancée par un script ppp-off du genre:
#!/bin/sh PIDFILE=/var/run/ppp0.pid if [ -r $PIDFILE ]; then kill -INT `cat $PIDFILE` fi
On peut définir des entrées dans le .fwmrc du genre:
Exec "Netscape" exec netscape& Exec "PPP Lectra 1" exec /usr/etc/go.ppp1 & Exec "PPP Lectra 2" exec /usr/etc/go.ppp2 & Exec "PPP Aliénor" exec /usr/etc/go.alienor & Exec "Déconnexion" exec /usr/etc/ppp-offles scripts go.* correspondant à:
#!/bin/sh /usr/sbin/pppd connect '/usr/sbin/chat -v ABORT ERROR ABORT BUSY ABORT \ "NO ANSWER" ABORT "NO CARRIER" "" AT\&FM0\&K3 OK ATDT0556693080 CONNECT "" \ ogin: pierre word: xxxx' /dev/modem 57600 -detach crtscts modem defaultroute \
Pour cela, tu dois installer les mêmes logiciels que
dans le chapitre précédent (configurer le noyau, installer
pppd). En plus de ça, il faut que tu crées un login spécial
pour les connexions PPP dans /etc/passwd, par exemple :
ppp::61:60:Connexion PPP:/:/usr/bin/ppp_login
Le script /usr/bin/ppp_login étant :
#!/bin/sh # Connexion PPP --> adresse IP = 199.103.124.170 exec /usr/sbin/pppd -d -detach -ip modem proxyarp :199.103.124.170
L'option proxyarp permet à la machine connectée
d'accèder à tout le réseau :
199.103.124.170 199.103.124.50
+-----------+ PPP link +----------+
| pcpf | ------------------- | ondee |
+-----------+ +----------+
| Ethernet
----------------------------------- 199.103.124.x
Voici un extrait d'un article de Stéphane Bortzmayer défendant UUCP:
Vous avez certainement entendu parler d'UUCP. Vous savez bien, le vieux truc pour le courrier électronique... Les adresses du genre "...!uunet!bilbo!galadriel!durand"... Ce qu'on utilisait avant les zotoroutes de l'information, avant que les journalistes ne s'aperçoivent que les réseaux existent...Eh bien, UUCP peut encore être utilisé aujourd'hui. Pas par nostalgie, pas par perversité, mais simplement parce que c'est le système le plus adapté dans certains cas. UUCP a reçu de nombreuses améliorations ces dernières années qui ont complètement changé sa facilité d'utilisation. Mais dans quels cas utiliser UUCP ?
Si tout votre courrier électronique peut passer à travers de liens Internet permanents et rapides, laissez tomber. SMTP (et POP) conviennent tout à fait.
Mais si vous avez à desservir des sites (pas seulement des micro-ordinateurs mono-utilisateur, des sites avec plusieurs personnes et qui ont peut-être d'autres sites derrière eux) qui ne sont reliés que de façon intermittente, UUCP a des chances d'être la meilleure solution.
Par exemple, une Université peut souhaiter permettre à ses étudiants d'avoir chez eux un BBS ("babillard" en toubonien) avec plusieurs comptes. (Linux marche très fort chez les étudiants en informatique en ce moment et c'est une excellente expérience pour eux que de gérer un BBS.)
Ou un centre de recherches peut avoir une annexe reliée uniquement par RNIS ou simplement uniquement par le réseau téléphonique car on ne va pas payer une ligne spécialisée pour une annexe avec cinq personnes, trois PC et un Machinetoc.
Dans ces deux cas, sendmail/SMTP convient mal. Imaginons qu'une liaison PPP puisse être établie, les moments où sendmail va essayer d'envoyer le courrier ont peu de chances de coïncider avec ceux où la liaison est fonctionnelle. Quant à POP, il n'est vraiment pas adapté au cas où le site distant a plusieurs utilisateurs et veut pouvoir en ajouter à volonté.
Il semble que sendmail 8.7 (la 8.8 vient de sortir) aie ajouté des fonctions pratiques pour de tels cas. Mais je connais peu de monde qui l'utilise encore et UUCP a, lui, dès le début été conçu pour l'intermittence (alors que SMTP est bâti autour de l'idée que la connectivité est la règle et que les pannes sont l'exception.)
Au niveau de la configuration, il existe un document UUCP-HOWTO. Un chapitre d'introduction existe également dans le Guide du ROOTard.
Voici une documentation générale concernant la configuration d'UUCP (parue dans TRIBUNIX en 1993):
La configuration de UUCP est complexe du fait du grands nombre de fichiers utilisés pour le paramètrage. Dans le cas de la version BNU de UUCP (disponible sur les versions System V), les fichiers de configuration sont rassemblés sur le répertoire :
/usr/lib/uucp
Nous allons décrire les plus importants :
Par exemple, si nous voulons tester notre connexion MODEM avec UUCP (et non avec Kermit), nous pouvons utiliser l'utilitaire cu (Call Unix) disponible dans le package UUCP. Après configuration, nous pourrons accèder à la ligne tty05 par :
cu -l tty05
Pour configurer UUCP dans ce cas simple, il suffit de modifier le fichier Devices pour y ajouter la ligne :
Direct tty05 - Any direct
Le pseudo-device Direct est associé au device /dev/tty05.
Il est IMPERATIF que le device /dev/tty05 appartienne à uucp (et non à root ou autre), sinon vous obtiendrez le message d'erreur :
Connect failed: CAN'T ACCESS DEVICE
ce qui n'est pas très parlant à première vue. Il faut donc faire :
chown uucp /dev/tty05
Moyennant cela, on peut obtenir le dialogue suivant :
$ cu -l tty05 Connected at OK ~[ondee]. taper ~. pour sortir Disconnected en général ca fait bip en sortant !
On peut compliquer un peu en ajoutant la ligne :
modem5 Any Direct Any
dans le fichier Systems. A ce moment là, on accède au MODEM sur tty05 par le nom symbolique modem5 .
$ cu modem5 Connected
Considérons un site nommé transpac accessible par UUCP à travers le device /dev/tty05 par le numéro de téléphone 36062424. Il est intéressant d'accèder à ce site simplement en faisant :
cu transpac
Pour cela, il faut ajouter les lignes suivantes au fichier Systems :
transpac Any ACU 2400 36062424
Le pseudo-device ACU signifie Automatic Call Unit (Modem en gros). Ce nom de pseudo-device est traditionnellement réservé aux connexions MODEM. Le mot-clé Any signifie que le système peut être appelé à n'importe quelle heure (on peut également spécifier des plages horaires pour diminuer les cou\*^ts de connexion).
Dans le fichier Devices, on peut définir :
ACU tty05 - 2400 aj2422_init "" hayes_direct
La macro aj2422_init représente la séquence d'initialisation du MODEM (ici un Anderson AJ2422, V22bis), la macro hayes_direct, représente la séquence de composition d'un numéro par un MODEM compatible HAYES. Ces macros sont à définir dans le fichier Dialers . On peut également remplacer les spécifications de vitesse 2400 par Any pour indiquer que tout cela se règle tout seul !
Au niveau du fichier Dialers, on définira les macros de dialogue avec le MODEM sous forme de chat-script dont la syntaxe est une suite de séquences :
chaine_envoyée chaine_attendue
exemple:
AT&V1\\r OK\\r on envoit AT&V1 + Return
le MODEM doit répondre OK + Return
.fi
On peut donc définir les macros du fichier Dialers :
aj2422_init =,-, "" AT&F0\\d\\r VALIDE\\r AT&V1\\r OK\\r AT&D2\\r OK\\r ATS40=255\\r OK\\r
hayes_direct =,-, "" \\dAT\\r\\c OK\\r \\EATDT\\T\\r\\c CONNECT
La macro aj2422_init est dépendante du type de MODEM mais hayes_direct
peut être utilisée avec tous les MODEM(s) compatibles HAYES. Elle effectue la
séquence suivante :
Une fois que tout est configuré, on peut tester par :
cu -d transpac (-d est l'option de debug de cu)
et l'on obtient :
$ cu -d transpac
conn(transpac)
Device Type ACU wanted
fixline(10, 2400)
expect: ("")
got it
sendthem (AT&F0DELAY
^M^M)
expect: (VALIDE^M)
T&F0^M^M^M^JVALIDE^Mgot it
sendthem (AT&V1^M^M)
expect: (OK^M)
^JAT&V1^M^M^M^JOK^Mgot it
sendthem (AT&D2^M^M)
expect: (OK^M)
^JAT&D2^M^M^M^JOK^Mgot it
sendthem (ATS40=255^M^M)
expect: (OK^M)
^JATS40=255^M^M^M^JOK^Mgot it
expect: ("")
got it
sendthem (DELAY
AT^M)
expect: (OK^M)
^JAT^M^M^JOK^Mgot it
sendthem (ECHO CHECK ON
A^JATTDDTT3366006622442244^M^M)
expect: (CONNECT)
^M^JCONNECTgot it
getto ret 10
device status for fd=10
F_GETFL=2,iflag=`12045',oflag=`0',cflag=`2273',lflag=`0',line=`0'
cc[0]=`177',[1]=`34' , [2]=`43' , [3]=`100' , [4]=`1' , [5]=`0' , [6]=`0' , [7]=`0
' ,
call _mode(1)
Connected
_receive started
transmit started
2400
TRANSPAC 083019195
~[ondee].
call tilda(.)
call _quit(0)
call _bye(0)
Disconnected
call cleanup(0)
call _mode(0)
Le transfert de fichiers binaires ne peut se faire par cu. Il faut pour cela utiliser la commande uucp du package UUCP. Par exemple, le transfert du fichier (binaire) all.tar.Z depuis le site éloigné loin vers /usr/spool/uucppublic se fera par :
uucp loin!~/all.tar.Z /usr/spool/uucppublic
La chaine ~/ symbolise le répertoire /usr/spool/uucppublic normalement réservé aux transferts UUCP.
Le transfert se fait de manière automatique ce qui implique un login automatisé sur le site distant (un général, un login particulier nuucp ou équivalent est réservé pour les transferts). La séquence de login est définie grâce à un chat-script. On définira le site de la manière suivante dans le fichier Systems :
loin Any ACU Any 12345678 "" \\r gin--gin: nuucp ord: xxxx
ce qui signifie :
\\r on commence par envoyer un Return
gin--gin: on attend "gin" (de login:) si on ne l'obtient pas
on envoit Return et on attend de nouveau "gin:"
nuucp on envoit "nuucp" (login de transfert)
ord: on attend "ord:" (de password:)
xxxx on envoit "xxxx"
Dans le fichier /etc/passwd de la machine distante, on devra avoir une ligne du type :
nuucp:wjk:10:10:0000-uucp(0000):/usr/spool/uucppublic:/usr/lib/uucp/uucico
On peut également retarder le transfert (placer la commande dans la file UUCP mais ne pas l'exécuter tout de suite) par l'option -r :
uucp -r loin!~/all.tar.Z /usr/spool/uucppublic
La file UUCP sera vidée par la commande :
/usr/lib/uucp/uucico -r1 -x1 -sloin
-r1 le système local est mai\*^tre du dialogue
-x1 niveau de debug = 1
-sloin dialogue avec le système "loin"
Toutes les tâches UUCP en attente (courrier, transfert, ...) sont exécutées.
Les requêtes UUCP sur le site distant pour le site local sont également exécutées (le protocole est retourné).
Cette commande peut bien entendu être appelée automatiquement (dans un crontab par exemple) de manière à automatiser la gestion de la file UUCP.