Zurück Weiter Inhalt

5. PPP-Verbindung zu Windows NT mit PAP-Authentifizierung

Bei dieser Variante kann das der Linux Distribution beiliegende Standard "pppd"-Paket verwendet werden; d.h. es brauchen keinerlei Veränderungen am standardmäßig installierten Linux-System gemacht werden !

5.1 `pppd'-Anwahlskript

Für den Anwahlvorgang wird ein einfaches Skript verwendet, das den "pppd"-Prozess startet.


#!/bin/sh
# Aufbau einer PPP Verbindung zu einem Windows NT Server
/usr/sbin/pppd 38400 connect '/usr/sbin/chat -v -f $HOME/win_nt.chat' lock

Datei: dial_win_nt

Parameterbeschreibung Datei dial_win_nt :


38400                   : setzt die zu verwendende Portgeschwindigkeit
connect '...'           : Herstellung der Modemverbindung und Einloggen
                          über das Programm 'chat', wobei die zum Verbindungs-
                          aufbau notwendigen Informationen aus der über den
                          Parameter -f angegebenen Datei entnommen werden.
                          Der 'chat'-Parameter -v bewirkt eine Protokollierung
                          des Verbindungsaufbaus über 'syslogd'
                          (Datei /var/log/messages)
lock                    : Verwendung einer "UUCP-konformen" Lockdatei
                          (unter /var/lock/LCK..ttyS0)

Die Parameter für das "chat"-Programm sind in einer eigenen Datei hinterlegt:


TIMEOUT  60
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT ERROR
"" +++ATZ
OK ATE1Q0&C1&S0DT555222
CONNECT ""

Datei: win_nt.chat

Auffallend an dieser Datei ist das Fehlen des üblichen "Login:/Password:"-Schemas, das von Windows NT nicht verwendet wird. Ein Warten auf die "Login:"-Aufforderung nach der "CONNECT"-Meldung ist sinnlos !!

Es wird stattdessen einfach auf eine "CONNECT"-Meldung gewartet und die Steuerung an den "pppd" übergeben.

5.2 Konfiguration Datei /etc/ppp/pap-secrets

Um eine Verbindung mit Windows NT herzustellen muß das PAP-Authentifizierungsschema verwendet werden. Die dazu benötigten Parameter und Kennungen erwartet der "pppd" in der Datei /etc/ppp/pap-secrets:


# Secrets for authentication using PAP
# client        server     secret      IP addresses
my_login        win_nt     my_passw

Datei: /etc/ppp/pap-secrets

Typischerweise sollte diese Datei für eine PPP-Verbindung eine Zeile (ohne führende Blanks) enthalten, obwohl fast immer erwähnt wird, daß für eine PPP-Verbindung zwei Einträge (mit gespiegelten "server"/"client" Parametern) notwendig sind.

Wie es sich jedoch herausstellt, genügt bei einer Windows NT-Verbindung ein Parametersatz (Authentifizierung von Linux an Windows NT Server), da eine Authentifizierung des Windows NT Rechners nicht stattfindet, bzw. eine Aufforderung dazu mit "Authentication refused" durch Windows NT abgelehnt wird.

Als "server" wird der Windows NT Rechner bezeichnet, bei dem angerufen wird; das "secret" enthält das der unter "client" eingetragenen Windows NT-Userkennung zugeordnete Paßwort im Klartext. Unter "client" ist bezeichnenderweise nicht der lokale Rechnername, sondern die Windows-Userkennung anzugeben.

Um die Kombination PAP/PPP in Verbindung mit Windows NT zu nutzen, ist dem "pppd" über die Option "remotename" der Systemname des betreffenden Windows NT Servers mitzuteilen, damit der entsprechende pap-secrets-Eintrag verwendet werden kann. Microsoft NT Systeme senden beim Aufbau der PPP/PAP-Verbindung ihren Systemnamen leider nicht; deshalb muß dieser per Option definiert werden.

Als lokaler Systemname ("pppd"-Option name) wird die Windows NT-Userkennung vereinbart.

5.3 Konfiguration Datei /etc/ppp/options

Der verwendete "pppd"-Optionssatz besteht aus folgenden Parametern und liegt in der Datei /etc/ppp/options.


/dev/ttyS0
crtscts
152.3.60.1:152.3.60.2
defaultroute
debug
modem
name my_login
remotename win_nt

Datei: /etc/ppp/options

Parameterbeschreibung Datei /etc/ppp/options :


/dev/ttyS0              : Port an dem das Modem angeschlossen ist
                          ( ttyS0 = COM1 )
crtscts                 : Verwendung der Hardwareflusskontrolle (RTS/CTS)
                          um den Datenverkehr am seriellen Port zu
                          kontrollieren
152.3.60.1:152.3.60.2   : Definition der zu verwendenden IP-Adressen in der
                          Form <local_ip_addr>:<remote_ip_addr>
defaultroute            : Verwendung des Remotehosts als Standardroute-
                          verbindung:
                          die PPP-Verbindung wird als Default in die
                          Routingtabelle des Kernels eingetragen
debug                   : aktiviert den Debugmodus; die anfallenden
                          Informationen werden in die Datei /var/log/messages
                          geschrieben
modem                   : gibt an, daß es sich um eine Modemverbindung
                          handelt
name <username>         : setzt laut man-Page den lokalen Systemnamen für
                          Authentifizierungszwecke;
                          es wird aber die zu verwendende Windows NT-User-
                          kennung angegeben !!!
remotename <systemname> : setzt den Systemnamen des angewählten Windows NT
                          Servers für Authentifizierungszwecke

Die bis hier erfolgten Definitionen sollten ausreichen, die erstmalige Verbindungsaufnahme mit dem Windows NT Server zu wagen.

5.4 Protokoll PPP/PAP-Verbindung

Die Transaktionen des "chat"- als auch des "pppd"-Programmes können durch

 tail -f /var/log/messages

beim Verbindungsaufbau am Bildschirm mitprotokolliert werden.

Ein -unkommentiertes- Protokoll einer erfolgreichen PPP-Verbindungsaufnahme via PAP-Authentifizierung sieht folgendermaßen aus:


 kernel: PPP: version 2.2.0 (dynamic channel allocation)
 kernel: PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
 kernel: PPP line discipline registered.
 kernel: registered device ppp0
 pppd: pppd 2.2.0 started by root, uid 0
 chat: timeout set to 60 seconds
 chat: abort on (NO CARRIER)
 chat: abort on (BUSY)
 chat: abort on (NO DIALTONE)
 chat: abort on (ERROR)
 chat: send (+++ATZ^M)
 chat: expect (OK)
 chat: +++ATZ^M^M
 chat: OK -- got it
 chat: send (ATE1Q0&C1&S0DT555222^M)
 chat: expect (CONNECT)
 chat: ^M
 chat: ATE1Q0&C1&S0DT555222^M^M
 chat: CONNECT -- got it
 chat: send (^M)
 pppd: Serial connection established.
 pppd: Using interface ppp0
 pppd: Connect: ppp0 <--> /dev/ttyS0
 pppd: sent [LCP ConfReq id=0x1 <mru 1500> <magic 0x9df1a72> <pcomp> <accomp>]
 pppd: sent [LCP ConfReq id=0x1 <mru 1500> <magic 0x9df1a72> <pcomp> <accomp>]
 pppd: rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap msoft>              \
       <magic 0x3e6f> <pcomp> <accomp>]
 pppd: sent [LCP ConfNak id=0x0 <auth chap md5>]
 pppd: rcvd [LCP ConfAck id=0x1 <mru 1500> <magic 0x9df1a72> <pcomp> <accomp>]
 pppd: rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <auth 0xc027 01 00 00 01>      \
       <magic 0x3e6f> <pcomp> <accomp>]
 pppd: sent [LCP ConfNak id=0x1 <auth chap md5>]
 pppd: rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth 0xc123 01 00 00 01>      \
       <magic 0x3e6f> <pcomp> <accomp>]
 pppd: sent [LCP ConfNak id=0x2 <auth chap md5>]
 pppd: rcvd [LCP ConfReq id=0x3 <asyncmap 0x0> <auth pap> <magic 0x3e6f>      \
       <pcomp> <accomp>]
 pppd: sent [LCP ConfAck id=0x3 <asyncmap 0x0> <auth pap> <magic 0x3e6f>      \
       <pcomp> <accomp>]
 pppd: sent [PAP AuthReq id=0x1 user="my_login" password="my_passw"]
 pppd: rcvd [PAP AuthAck id=0x1msg=""]
 pppd: Remote message:
 pppd: sent [IPCP ConfReq id=0x1 <addr 152.3.60.1> <compress VJ 0f 01>]
 pppd: rcvd [CCP ConfReq id=0x4 < 12 06 00 00 00 01>]
 pppd: sent [CCP ConfReq id=0x1]
 pppd: sent [CCP ConfRej id=0x4 < 12 06 00 00 00 01>]
 pppd: rcvd [proto=0x803f] 01 06 00 17 03 05 00 05 01 02 0e 00 01 00 01      \
       00 00 52 32 30 30 32 00
 pppd: Unknown protocol (0x803f) received
 pppd: sent [LCP ProtRej id=0x2 80 3f 01 06 00 17 03 05 00 05 01 02 0e       \
       00 01 00 01 00 00 52 32 30 30 32 00]
 pppd: rcvd [IPCP ConfAck id=0x1 <addr 152.3.60.1> <compress VJ 0f 01>]
 pppd: rcvd [CCP ConfAck id=0x1 < fe 02>]
 pppd: rcvd [CCP TermReq id=0x7 00 00 02 dc]
 pppd: sent [CCP TermAck id=0x7]
 pppd: sent [IPCP ConfAck id=0xd <compress VJ 0f 01>]
 pppd: local  IP address 152.3.60.1
 pppd: remote IP address 152.3.60.2
 pppd: sent [CCP ConfReq id=0x1]
 pppd: rcvd [CCP TermAck id=0x1]
 pppd: sent [CCP TermReq id=0x2]
 pppd: rcvd [CCP TermAck id=0x2]
  ...
  ...   Beginn der Verbindung
  ...   Warten auf Verbindungsende
  ...
 pppd: Terminating on signal 2.
 pppd: sent [LCP TermReq id=0x3]
 pppd: rcvd [LCP TermAck id=0x3]
 pppd: Connection terminated.
 pppd: Exit.
 kernel: PPP: ppp line discipline successfully unregistered

Auszug Protokoll /var/log/messages : Aufbau einer PAP/PPP-Verbindung

Interessant ist hierbei die Reaktion des Clients auf den Request der PAP-Authentifizierung

 pppd: rcvd [LCP ConfReq  ...  <auth pap> ... ]

Dieser Request wird prompt beantwortet mit

 pppd: sent [LCP ConfAck ... <auth pap> ... ]
 pppd: sent [PAP AuthReq  user="my_login" password="my_passw"]

Dies führt schließlich zum erfolgreichen Verbindungsaufbau.

Wie aus dem Protokoll ersichtlich ist, wird beim PAP-Authentifizierungsschema neben der Userkennung auch das Paßwort im Klartext übertragen, was unter Umständen als Sicherheitsrisiko angesehen werden kann. Um den Sicherheitsstandard zu heben, wird zusätzlich zumindest eine Verschlüsselung des Paßwortes gefordert.


Zurück Weiter Inhalt