[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 291.   PPP per l'accesso a Internet attraverso un ISP

Nei capitoli precedenti è stato introdotto l'uso di pppd in generale e in particolare per le connessioni senza autenticazione. Di solito, il primo contatto con il protocollo PPP si ha quando si vuole accedere a Internet attraverso un ISP, ovvero un fornitore di accesso a Internet, disponendo soltanto di una linea telefonica commutata.

In questi casi si tende a parlare di cliente PPP, anche se ciò non è corretto formalmente, dato che si interferisce con la terminologia utilizzata per il sistema di autenticazione, perché si vede il nodo dell'ISP come quello che offre un servizio, che quindi lo si considera un servente.

291.1   Organizzazione del proprio ISP

Un servizio PPP di un fornitore di accesso a Internet può essere organizzato in tanti modi differenti e la cosa che deve essere conosciuta quando ci si vuole collegare è il modo con cui viene consentita l'autenticazione. In pratica, il protocollo PPP è standard, ma per usarlo occorre accordarsi sul modo in cui il nodo che accede al servizio deve (o può) identificarsi.

Tutte le informazioni necessarie dovrebbe darle il fornitore stesso, ma nella maggior parte dei casi, le persone con cui si hanno contatti non sono a conoscenza di tutti i dettagli e spesso ritengono che la loro procedura sia semplicemente «standard».

Fondamentalmente si può distinguere tra un'autenticazione tradizionale, dove si interviene come se si fosse davanti a un terminale a digitare il nominativo-utente e la parola d'ordine, oppure attraverso il PPP stesso, con i protocolli PAP o CHAP.

291.1.1   Autenticazione tradizionale

L'autenticazione di tipo tradizionale prevede che il protocollo PPP sia attivato dopo il riconoscimento dell'utente che richiede l'accesso. In pratica, si tratta di una connessione remota attraverso un terminale (o meglio, attraverso un programma di emulazione come Minicom o altro); si ottiene la classica richiesta login: e password:, alla quale si risponde e al termine si ottiene l'attivazione del PPP dalla parte remota.

L'attivazione del protocollo PPP potrebbe avvenire subito dopo il riconoscimento, oppure potrebbe essere necessario inviare un ritorno a carrello aggiuntivo, o avviare un comando apposito (indicato dal fornitore di accesso).

In questa situazione, quando ci si accorge che il nodo remoto ha attivato il PPP (si vedono apparire una serie di caratteri senza senso sullo schermo del terminale), si deve chiudere il programma con cui è stata fatta la connessione, senza reinizializzare il modem, quindi si deve attivare la gestione locale del PPP, in modo da utilizzare quella linea particolare.

Volendo provare quanto descritto, si potrebbe utilizzare Minicom, come è già stato mostrato altre volte in altri capitoli. Per questo bisogna ricordare di fare riferimento al dispositivo seriale giusto, cioè quello a cui è connesso il modem, quindi si deve verificare che le impostazioni della linea seriale siano quelle desiderate. Supponendo che il modem disponga di una configurazione di fabbrica sufficientemente corretta, la si può richiamare con il comando AT&F.

AT&F[Invio]

OK

Dovendo utilizzare le linee italiane si impartisce il comando ATX3, in modo che venga ignorata l'assenza del tono di chiamata.

ATX3[Invio]

OK

Infine si può passare alla composizione (il numero di telefono indicato è di pura fantasia).

ATDT0987654321[Invio]

In tal modo dovrebbe avvenire la composizione del numero e il modem remoto dovrebbe rispondere.

CONNECT 9600

In presenza di un sistema di autenticazione tradizionale, potrebbe apparire un messaggio di benvenuto e quindi la richiesta di introdurre il proprio nominativo.

Se non dovesse apparire nulla, potrebbe essere necessario inviare un carattere qualunque, o un semplice ritorno a carrello. È necessario provare per stabilire cosa bisogna fare per iniziare il colloquio con il nodo remoto.

Benvenuto presso il servizio della Società ...

login:

In tal caso si introduce il proprio nominativo-utente (in altri termini si esegue il login) e si conferma con [Invio].

login: tizio[Invio]

password:

Subito dopo si ottiene la richiesta di inserimento della parola d'ordine, alla quale si risponde nel modo solito, come di fronte a un terminale Unix classico.

password: tazza[Invio]

Ammesso che il sistema remoto riconosca l'utente, cioè la coppia utente-parola d'ordine, questo potrebbe attivare immediatamente il PPP, oppure potrebbe attendere che l'utente faccia qualcosa di specifico prima di iniziare.

Nel caso peggiore si ottiene l'invito di una shell, attraverso la quale si può interagire e fare qualcosa con il proprio accesso remoto, per esempio attivare il programma pppd personalmente. In alternativa potrebbe essere necessario fare una scelta in base a un menù di opzioni che viene proposto, oppure potrebbe essere necessario premere un [Invio] in più. In pratica, bisogna provare. Quando si vedono apparire dei simboli strani, come quanto mostrato sotto, significa che il PPP è stato attivato dalla parte remota.

~y}#À!}!}!} }.}%}&k`q1}'}"}(}"Ò>~~y}#À!}!}!} }.}%}&k`q1}'}"}(}"Ò>~~y}

A questo punto, basterebbe concludere il funzionamento di Minicom, ma senza reinizializzare il modem (si usa il comando [Ctrl a][q]), avviando subito dopo pppd con le opzioni opportune, in modo da sfruttare il collegamento seriale corrispondente alla connessione instaurata.

Comunque, lo scopo di utilizzare Minicom è solo quello di scoprire la procedura corretta per instaurare una connessione PPP con il nodo remoto. Quando le operazioni da farsi diventano più chiare, si può predisporre un sistema automatico, attraverso chat.

È importante osservare che, quando la connessione PPP è preceduta da un'autenticazione tradizionale, il PPP non dovrebbe richiedere a sua volta altre forme di autenticazione, ma ciò non può essere escluso. In pratica, questo significa che potrebbe essere necessario predisporre i file /etc/ppp/pap-secrets e /etc/ppp/chap-secrets.

291.1.2   Autenticazione attraverso il PPP

L'autenticazione attraverso il PPP salta qualunque fase introduttiva, lasciando al protocollo PAP o a quello CHAP di verificare l'identità di chi accede. Per accertarsene si può usare lo stesso sistema già visto nella sezione precedente: si utilizza Minicom per iniziare la connessione, anche attraverso la composizione del numero telefonico, quindi, senza fare nulla, oppure provando a premere qualche tasto, si ottengono solo i caratteri tipici di un protocollo PPP.

~y}#À!}!}!} }.}%}&k`q1}'}"}(}"Ò>~~y}#À!}!}!} }.}%}&k`q1}'}"}(}"Ò>~~y}

In tal caso, si è costretti a predisporre i file /etc/ppp/pap-secrets e /etc/ppp/chap-secrets. Eventualmente, per questo ultimo file potrebbe essere necessario conoscere il nome con cui si presenta il nodo remoto.

291.2   Cliente PPP che utilizza un sistema di identificazione tradizionale

È stato mostrato il procedimento di accesso a un sistema che utilizza un metodo di identificazione degli utenti di tipo tradizionale. Attraverso Minicom o un altro programma simile si possono dare i comandi necessari al modem, comporre il numero ed eseguire l'accesso. Al termine, una volta avviato il PPP dalla parte remota, si può chiudere il funzionamento del programma senza reinizializzare il modem (con Minicom si usa la sequenza [Ctrl a][q]).

A questo punto bisognerebbe avviare la gestione locale del PPP, in modo rapido, altrimenti il nodo remoto chiude la connessione. Per farlo si potrebbe realizzare uno script che avvii pppd indicando tutte le opzioni necessarie (si vuole ignorare volutamente il file /etc/ppp/options per non confondere il lettore con troppe cose).

#!/bin/sh

/usr/sbin/pppd \
    crtscts \
    modem \
    defaultroute \
    0.0.0.0:0.0.0.0 \
    /dev/ttyS1 \
    57600

L'esempio mostra l'utilizzo della seconda porta seriale, /dev/ttyS1, specificando esplicitamente che si attende dalla parte remota l'indicazione del numero IP locale e di quello remoto.

Se il nodo remoto dovesse pretendere anche un'autenticazione PAP, o CHAP, allora si devono predisporre i file /etc/ppp/pap-secrets e /etc/ppp/chap-secrets.

Naturalmente, non è molto pratico questo sistema di connessione attraverso l'uso di Minicom. Per automatizzare il procedimento di identificazione si può inserire un programma specifico: chat.

Prima di proseguire, si tenga presente che per chiudere il funzionamento di pppd, è sufficiente inviargli un segnale di interruzione (SIGINT).

291.2.1   Chat

Il programma Chat (1) costituito in pratica dall'eseguibile chat, permette di definire una comunicazione tra l'elaboratore e il modem. Il suo scopo principale è quello di stabilire una connessione tra il demone pppd locale e quello di un elaboratore remoto, quando prima è necessario procedere a un'autenticazione di tipo tradizionale.

chat [opzioni] [script]

Segue la descrizione di alcune opzioni di questo programma.

Opzione Descrizione
-f chat_file
Con questa indicazione, chat legge lo script di colloquio (chat script) dal file indicato. L'uso di questa opzione esclude l'indicazione dei comandi di script dalla riga di comando. Il file può contenere più righe, le stringhe possono essere separate utilizzando spazi o caratteri di tabulazione.
-t timeout
Fissa il valore del timeout, cioè del tempo massimo di attesa per la ricezione di una stringa.
-r report_file
Definisce il nome del file per contenere il rapporto quando viene utilizzata la parola chiave REPORT. Se non si specifica questo file viene utilizzato lo standard error.
-v
Attiva la modalità dettagliata per cui viene utilizzato il registro del sistema per annotare i messaggi di chat.
-V
Attiva la modalità dettagliata utilizzando lo standard error. In tal modo possono essere visualizzati immediatamente i messaggi che intercorrono tra chat e il modem. Questa opzione non può funzionare come previsto se lo standard error è ridiretto altrove, per esempio quando chat viene eseguito da pppd in modalità detached.
script
Se non viene specificato un file di script attraverso l'opzione -f questo deve essere fornito nella riga di comando, molto probabilmente racchiudendolo tra virgolette per permettere l'inserimento di spazi.

Quando il programma termina, il codice di uscita può dare delle informazioni importanti:

Codice di uscita Significato
0 Conclusione normale: lo script è stato eseguito senza problemi.
1 Almeno uno dei parametri non è valido.
2 Errore durante l'esecuzione: potrebbe trattarsi di un errore di lettura di un file, o la ricezione di un segnale di SIGINT.
3 Errore di timeout.
4 È stata ricevuta la prima delle stringhe indicata come condizione di interruzione (ABORT).
5 È stata ricevuta la seconda delle stringhe indicata come condizione di interruzione (ABORT).
6 È stata ricevuta la terza delle stringhe indicata come condizione di interruzione (ABORT).
7 È stata ricevuta la quarta delle stringhe indicata come condizione di interruzione (ABORT).
3+n È stata ricevuta la n-esima delle stringhe indicata come condizione di interruzione (ABORT).

291.2.2   Script di chat

Lo script di colloquio, ovvero lo script di chat, definisce la comunicazione. Lo script consiste di una o più coppie di stringhe di attesa e invio separate da spazi, con una coppia opzionale di stringhe di subattesa-subinvio, separate da un trattino. Per esempio:

ogin:-BREAK-ogin: tizio ssword: tazza

indica che chat si aspetta di ricevere la stringa ogin:. Se ciò non avviene entro il tempo massimo stabilito (timeout), invia un break al sistema remoto e quindi attende di nuovo la stringa ogin:. Se la stringa ogin: viene ricevuta già la prima volta, la sequenza di interruzione non viene generata. Se fallisce anche la seconda volta l'attesa, chat termina l'esecuzione. Quando chat ha ricevuto la stringa ogin: invia la stringa tizio e quindi si mette in attesa di ricevere la stringa ssword:. Quando la riceve invia la stringa tazza. Alla fine di ogni stringa trasmessa da chat viene aggiunto un ritorno a carrello (<CR>). Al contrario, per indicare che si attende un codice di ritorno a carrello, si utilizza la sequenza \r.

Il motivo per il quale si indica solo la parte finale delle stringhe di identificazione è che in questo modo si possono ignorare le parti di stringa superflue che potrebbero anche essere giunte alterate. Un esempio molto simile al precedente potrebbe essere:

ogin:--ogin: tizio ssword: tazza

In questo caso, se non si riceve la stringa ogin: al primo tentativo, chat invia un semplice ritorno a carrello e quindi attende ancora una volta.

Il programma chat è in grado di riconoscere una serie di stringhe speciali che vengono descritte di seguito.

Stringa Descrizione
ABORT

stringhe di interruzione

Le stringhe di interruzione permettono di interrompere la comunicazione quando il modem restituisce una parola chiave particolare. Nell'esempio seguente la sequenza non attende nulla (i due apostrofi delimitano una stringa nulla ed è quel «nulla» che si attende) e quindi invia la stringa ATZ:

ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT123456 CONNECT

La risposta attesa è la stringa OK. Quindi invia ATDT123456 e attende CONNECT. Quando viene ricevuta anche questa ultima stringa, lo script prosegue. Se però, in qualunque momento, il modem restituisce una delle stringhe BUSY o NO CARRIER, l'esecuzione dello script viene interrotta.

REPORT

stringhe di rapporto

Le stringhe di rapporto permettono di registrare nel file di rapporto (si veda l'opzione -r) gli eventi specificati. Si osservi l'esempio:

REPORT CONNECT ABORT BUSY '' ATZ OK ATDT123456 CONNECT

Questa sequenza non attende nulla (i due apostrofi delimitano una stringa nulla ed è quel «nulla» che si attende) e quindi invia la stringa ATZ. La risposta attesa è la stringa OK. Quindi invia ATDT123456 e attende CONNECT. Quando viene ricevuta anche questa ultima stringa, lo script prosegue e in più viene scritto all'interno del file di rapporto la parola CONNECT, seguita da tutto quello che il modem ha inviato insieme fino al raggiungimento del carattere di ritorno a carrello.

TIMEOUT

tempo massimo

Il tempo massimo iniziale è di 45 s (secondi) e può essere cambiato utilizzando il parametro -t oppure durante l'esecuzione dello script. Si osservi l'esempio seguente, tenendo conto che è diviso in due per motivi tipografici:

'' ATZ OK ATDT123456 CONNECT TIMEOUT 10 \
  \ogin:--ogin: tizio TIMEOUT 5 ssword: tazza

Prima di attendere l'invito a inserire il nominativo-utente viene cambiato il tempo massimo di attesa (il timeout) a 10 secondi e, prima di attendere l'invito a inserire la parola d'ordine, viene cambiato a cinque secondi. Quando viene cambiato il valore del timeout, questo resta così fino al cambiamento successivo.

EOT

invio del codice di fine testo

Il simbolo di EOT può essere rappresentato con ^D. Quando si invia questo carattere non viene aggiunto il ritorno a carrello, al contrario del solito.

BREAK

interruzione

La stringa speciale BREAK rappresenta un segnale speciale nella trasmissione. L'azione normale del modem ricevente questo segnale è quello di cambiare la velocità di trasmissione. La sequenza di interruzione può essere incorporata all'interno di una stringa utilizzando la sequenza \K.

All'interno di uno script di colloquio, si possono inserire dei simboli speciali, rappresentati prevalentemente attraverso delle sequenze di escape del tipo \x. Segue l'elenco di quelle più importanti per chat.

Codice Descrizione
''
""
Una coppia di apici singoli o di apici doppi rappresenta la stringa nulla. Se viene inviata una stringa nulla, in pratica si invia solo un ritorno a carrello.
\b
Backspace.
\c
Elimina il carattere di ritorno a carrello alla fine di una riga da trasmettere. È l'unico modo per riuscire a trasmettere una stringa che non termini con il solito ritorno a carrello. Si utilizza alla fine della stringa da trasmettere e non vale per le stringhe da ricevere.
\d
Attende per un secondo. Vale solo per le stringhe da trasmettere.
\K
Inserisce un carattere break. Vale solo per le stringhe da trasmettere.
\n
Rappresenta un carattere line feed o <LF>.
\N
Invia un carattere <NUL>. Vale solo per le stringhe da trasmettere.
\p
Esegue una pausa di 0,1 s. Vale solo per le stringhe da trasmettere.
\q
Sopprime la scrittura della stringa nel registro del sistema. Al suo posto appaiono alcuni punti interrogativi. Vale solo per le stringhe da trasmettere.
\r
Invia o attende un ritorno a carrello.
\s
Rappresenta uno spazio e può essere usato quando non si vuole usare la tecnica delle virgolette per racchiudere una stringa che contiene spazi.
\t
Invia o attende un carattere di tabulazione.
\\
Invia o attende un carattere \
\ooo
Rappresenta un carattere in notazione ottale. Alcuni simboli non possono essere ricevuti (attesi).
^x
Rappresenta una sequenza del tipo ^A, ^B, ^C,... Per esempio, ^Q rappresenta il codice <DC1> pari a 1710. Alcuni simboli non possono essere ricevuti (attesi).

291.2.3   Demone per il PPP e Chat assieme

Per automatizzare la creazione di un collegamento PPP attraverso la linea telefonica, quando il nodo remoto utilizza un sistema di autenticazione tradizionale, si può combinare l'uso di pppd e di chat. Per la precisione, si utilizza pppd con l'opzione connect, attraverso la quale si avvia chat allo scopo di inizializzare il modem, comporre il numero ed eseguire il procedimento di autenticazione.

La prima cosa da fare è quella di creare uno script per chat, adatto alle esigenze del proprio modem, ma soprattutto, in grado di eseguire l'accesso presso la macchina remota. Si osservi l'esempio seguente, che fa riferimento al file /etc/ppp/chatscript.(2)

TIMEOUT      3
ABORT        BUSY
ABORT        'NO CARRIER'
''           \dAT&F
OK           \dAT
OK           \dATX3
OK           \dAT
OK           '\dATDT 0987654321'
TIMEOUT      30
CONNECT      ''
ogin:--ogin: tizio
word:        tazza
''           ''

Se si osserva l'esempio, si può notare che se la stringa ogin: non viene ricevuta entro 30 s, viene inviato un ritorno a carrello e quindi la si attende nuovamente. Inoltre, alla fine, anche se non è detto che sia strettamente necessario, viene inviato un ritorno a carrello senza attendere nulla.

In questa situazione, si potrebbe predisporre un altro script (questa volta uno script di shell), per avviare pppd con tutte le opzioni necessarie, ma soprattutto con l'uso di connect per incorporare chat.

#!/bin/sh

/usr/sbin/pppd \
    connect "/usr/sbin/chat -v -f /etc/ppp/chatscript" \
    crtscts \
    modem \
    defaultroute \
    0.0.0.0:0.0.0.0 \
    /dev/ttyS1 \
    57600

Come in altri esempi, viene utilizzata la seconda porta seriale e si lascia che sia la controparte a definire gli indirizzi IP di entrambi i nodi.

Ricapitolando, in questo modo: pppd apre la linea seriale; avvia chat che si occupa di inizializzare il modem, di comporre il numero telefonico e di eseguire l'accesso, fino a fare partire il PPP dall'altra parte; quindi pppd riprende il controllo ed è pronto per comunicare con l'altro lato della comunicazione.

Volendo, si può incorporare tutto lo script di colloquio nello script di shell che serve ad avviare pppd. Così facendo, diventa tutto un po' confuso da leggere, ma può essere un modo per tenere le informazioni sul proprio accesso remoto lontane da occhi indiscreti.

Quello che segue è uno script completo che prima di avviare pppd verifica che non ci sia già un'interfaccia di rete denominata ppp0.

#!/bin/sh
#
## ~/ppp-connetti
##
## Attiva la connessione al proprio ISP attraverso pppd e chat.
##
## Questo script è molto semplificato rispetto a quelli standard.
## Il problema sta nel fatto che molto dipende da come si
## comporta l'elaboratore dell'ISP.
## In questo esempio, in particolare, alla fine dello script di
## chat viene inviato un ritorno a carrello senza il quale la
## connessione non avviene.
##
## Si presume che la connessione avvenga utilizzando l'interfaccia
## «ppp0».
##
## Perché possa essere utilizzato da un utente comune, occorre che
## tale utente possa accedere alla porta seriale del modem e che il
## programma «pppd» sia SUID-root.
##
## Questo script non utilizza alcun argomento dalla riga di comando.
#
#
##
## Variabili.
##
#
#
# Indirizzo dell'ISP.
# In teoria non è necessario indicare l'indirizzo IP
# dell'elaboratore remoto. Tuttavia, se non dovesse funzionare,
# c'è sempre la possibilità di inserirlo qui.
#
IP_ISP="0.0.0.0"
#
# Indirizzo del proprio elaboratore.
# L'indirizzo IP del proprio elaboratore non deve essere indicato,
# a meno che non sia stato deciso diversamente con il proprio ISP.
# Infatti, di solito viene assegnato l'indirizzo locale in
# maniera dinamica.
#
IP_LOCALE="0.0.0.0"
#
# La porta di comunicazione utilizzata per il modem.
# In questo caso è la seconda porta seriale.
#
DISPOSITIVO="/dev/ttyS1"
#
# Velocità massima di trasmissione.
#
VELOCITA="57600"
#
# Il numero di telefono dell'ISP.
#
TELEFONO="0987654321"
#
# Il nominativo utente utilizzato per accedere all'elaboratore
# dell'ISP.
#
PPP_ACCOUNT="tizio"
#
# La password per accedere.
#
PPP_PASSWORD="tazza"
#
##
## Inizio.
##
#
#
# Prima di iniziare si controlla che non sia già attiva una
# connessione con l'interfaccia di rete «ppp0», ovvero quella di
# una connessione PPP (precisamente la prima).
# È da notare che «ifconfig» potrebbe non trovarsi nel percorso
# di ricerca degli eseguibili della variabile PATH, per cui è
# necessario indicare il percorso assoluto.
#
if `/sbin/ifconfig | grep "ppp0" > /dev/null`
then
    #
    # Esiste già una connessione con «ppp0», quindi non si può
    # procedere (si interrompe lo script).
    #
    echo "È già attiva una connessione con ppp0"
    exit 1
fi
#
# Viene attivato pppd con l'aiuto di chat.
# In particolare, chat esegue le operazioni seguenti:
#  - imposta il tempo di attesa a 3 secondi;
#  - interrompe in caso di messaggio ABORT
#  - interrompe in caso di messaggio NO CARRIER;
#  - senza attendere, richiede il prelievo della configurazione
#    di fabbrica del modem;
#  - dopo l'OK invia un comando AT nullo (serve per i modem lenti);
#  - dopo l'OK invia il comando ATX3 in modo che venga ignorato il
#    tono di chiamata;
#  - dopo l'OK invia un comando AT nullo (serve per i modem lenti);
#  - dopo l'OK invia la richiesta di composizione del numero
#    telefonico;
#  - cambia il tempo di attesa portandolo a 30 secondi;
#  - attende CONNECT e quindi invia un ritorno a carrello;
#  - attende la richiesta di login e invia il nome dell'utente;
#  - attende la richiesta della password e invia la password;
#  - senza attendere invia un ritorno a carrello.
#
/usr/sbin/pppd \
    connect "/usr/sbin/chat -v \
    TIMEOUT      3 \
    ABORT        BUSY \
    ABORT        'NO CARRIER' \
    ''           \\dAT\&F \
    OK           \\dAT \
    OK           \\dATX3 \
    OK           \\dAT \
    OK           '\\dATDT $TELEFONO' \
    TIMEOUT      30 \
    CONNECT      '' \
    ogin:--ogin: $PPP_ACCOUNT \
    word:        $PPP_PASSWORD \
    ''           ''  " \
    crtscts \
    modem \
    defaultroute \
    $IP_LOCALE:$IP_ISP \
    $DISPOSITIVO \
    $VELOCITA
#
##
## Fine.
##
#

Per semplificare la chiusura del PPP, si può preparare anche lo script seguente:

#!/bin/sh
#
# ~/ppp-chiudi
#
# Chiude la connessione inviando un segnale di SIGINT a "ppp0".
# Questo script non utilizza alcun argomento dalla riga di comando.
#
kill -INT `cat /var/run/ppp0.pid`

Prima di poter eseguire uno script è importante ricordare di attribuirgli i permessi di esecuzione necessari.

chmod +x nome_del_file

Come già accennato nel capitolo introduttivo all'uso di pppd, se si vuole permettere anche agli utenti comuni di effettuare la connessione, occorre fare in modo che pppd sia SUID-root. In pratica, si verifica e se necessario si modificano i permessi di pppd.

ls -l /usr/sbin/pppd[Invio]

-rwxr-xr-x   1 root     root        69084 Mar 25  1997 /usr/bin/pppd

Dal momento che manca la modalità SUID, occorre attribuirgliela.

chmod u+s /usr/sbin/pppd[Invio]

Si verifica nuovamente per sicurezza.

ls -l /usr/sbin/pppd[Invio]

-rwsr-xr-x   1 root     root        69084 Mar 25  1997 /usr/bin/pppd

La lettera s minuscola segnala l'attivazione della modalità SUID e del permesso di esecuzione per l'utente proprietario.

291.3   Cliente PPP che fornisce esclusivamente un'identificazione PAP o CHAP

Se si usa esclusivamente il protocollo PPP per ottenere l'autenticazione di chi accede, la configurazione del cliente diventa più semplice. La differenza rispetto a quanto mostrato nel caso di autenticazione tradizionale, sta nel fatto che non occorre più accedere in quel modo; tuttavia resta il problema di dover inizializzare il modem e di comporre il numero telefonico.

In pratica, il procedimento è simile a quanto è già stato mostrato, nel senso che pppd viene usato ancora assieme a chat, solo che lo script di colloquio si limita a comandare il modem.

TIMEOUT      3
ABORT        BUSY
ABORT        'NO CARRIER'
''           \dAT&F
OK           \dAT
OK           \dATX3
OK           \dAT
OK           '\dATDT 0987654321'

Quello che si vede potrebbe essere il nuovo script di colloquio di chat. Per il resto, l'uso di pppd non cambia, a parte il fatto di dover intervenire sui file /etc/ppp/pap-secrets e /etc/ppp/chat-secrets. Quello che segue è l'esempio di /etc/ppp/pap-secrets; nel caso di /etc/ppp/chat-secrets potrebbe essere necessario indicare espressamente il nome del servente, ovvero del nodo remoto.

# /etc/ppp/pap-secrets
#
# Segreti per l'autenticazione PAP
#
# cliente       servente        segreto         indirizzi IP ammissibili
tizio           *               tazza           *

A questo punto, specialmente nel caso che il nodo remoto richieda l'autenticazione PAP, è necessario aggiungere al comando pppd l'opzione user, in modo da selezionare la voce corretta nel file /etc/ppp/pap-secrets.

#!/bin/sh

/usr/sbin/pppd \
    connect "/usr/sbin/chat -v -f /etc/ppp/chatscript" \
    user tizio \
    crtscts \
    modem \
    defaultroute \
    0.0.0.0:0.0.0.0 \
    /dev/ttyS1 \
    57600

291.4   Problemi collegati

Dal momento che la connessione a Internet è una delle prime cose che si fa quando ci si avvicina a qualunque sistema operativo che lo consenta, è il caso di ricordare un paio di particolari che non sono correlati direttamente al protocollo PPP.

291.4.1   Gli indirizzi locali

Se il proprio elaboratore è collegato a una rete locale, si devono utilizzare indirizzi IPv4 che non vadano in conflitto con quelli della rete esterna, cioè Internet.

Per questo, di solito si usano gli indirizzi della classe C riservati appositamente alle reti locali i cui elaboratori non devono essere accessibili da parte della rete Internet: da 192.168.0.0 a 192.168.255.255.

291.4.2   DNS

Dovendo accedere alla rete esterna Internet, un problema importante è costituito dalla risoluzione dei nomi di dominio. Se si utilizza il proprio elaboratore per accedere a Internet, è molto probabile che non si disponga di un servizio di risoluzione dei nomi locale (servente DNS), al massimo si utilizza il file /etc/hosts con l'elenco degli elaboratori locali. Per non perdere la possibilità di comunicare con la propria rete locale, pur potendo accedere a Internet, occorre configurare il file /etc/host.conf (279.1.1) in modo da utilizzare prima il file /etc/hosts e quindi i serventi DNS.

order hosts,bind
multi on

Successivamente occorre preparare il file /etc/resolv.conf (279.2.3) in modo da utilizzare i serventi DNS indicati dal proprio ISP. Segue un esempio con indirizzi immaginari:

nameserver 195.345.145.15
nameserver 194.145.123.77

Il protocollo PPP può fornire a un cliente l'indicazione degli indirizzi IP dei serventi DNS da utilizzare. Questo problema è descritto nella sezione 289.5.2, dove si mostra l'uso dell'opzione usepeerdns.

Se invece si desidera attivare localmente un servizio di risoluzione dei nomi si può vedere quanto trattato nei capitoli 281 e 282.

291.4.3   Il sistema di posta elettronica

Quando si utilizza un ISP per accedere a Internet, di solito si ottiene un indirizzo di posta elettronica riferito a un elaboratore dell'ISP; per acquisire la posta da quell'elaboratore si può utilizzare Popclient o Fetchmail (capitolo 323) trasferendola così nel proprio sistema di posta locale.

Per l'invio della posta elettronica, se si è alle prime armi, è meglio utilizzare un programma MUA in grado di accedere a un servente SMTP differente da quello locale, ovvero in grado di sfruttare quello offerto dal fornitore di accesso a Internet. Ciò dà il vantaggio di lasciare a quel servente il compito di inoltrare i messaggi e di ritentare l'invio nel caso le destinazioni non siano raggiungibili immediatamente.

Se invece si pretende di gestire la posta attraverso il servente locale, magari perché si vuole servire la propria rete locale, allora le cose si complicano e occorre conoscere bene la configurazione del proprio servente SMTP.

291.5   Riferimenti


1) Chat   dominio pubblico

2) La scelta della collocazione e del nome di questo script è personale. In questo caso è stato messo nella directory /etc/ppp/, anche se ciò potrebbe essere discutibile. Dal momento che contiene informazioni riservate, precisamente ciò che è necessario per accedere presso il servente remoto a cui ci si connette, può darsi che sia meglio «nasconderlo» in qualche modo.


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ppp_per_l_x0027_accesso_a_internet_attraverso_un_isp.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory