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


Capitolo 289.   RPC: Remote Procedure Call

RPC, acronimo di Remote procedure call, è un meccanismo generale per la gestione di applicazioni cliente-servente. Il sistema si basa su un demone, il Portmapper, e un file che elenca i servizi disponibili associati al demone relativo. Il Portmapper funziona in modo autonomo dal supervisore dei servizi di rete.

289.1   RPC in generale

Semplificando in modo estremo il funzionamento delle RPC, si può dire che si tratti di un meccanismo attraverso cui si possono eseguire delle elaborazioni remote.

Dal lato servente si trova il Portmapper (1) in ascolto sulla porta 111, dal lato cliente ci sono una serie di programmi che, per un servizio RPC qualunque, devono prima interpellare il Portmapper remoto il quale fornisce loro le informazioni necessarie a stabilire una connessione con il demone competente.

Per questo motivo, le chiamate RPC contengono l'indicazione di un numero di programma, attraverso il quale, il Portmapper remoto è in grado di rispondere informando il cliente sul numero di porta da utilizzare per quel programma.

I servizi RPC possono essere interrogati attraverso il programma rpcinfo. Per esempio, per chiedere al Portmapper dell'elaboratore weizen.mehl.dg quali servizi sono disponibili e per conoscere le loro caratteristiche, si può agire come nell'esempio seguente:

rpcinfo -p weizen.mehl.dg[Invio]

   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp    844  mountd
    100005    1   tcp    846  mountd
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs

Una cosa da osservare è che alcuni dei programmi elencati tra i servizi RPC, non appaiono necessariamente anche nell'elenco del file /etc/services.

Il demone che si occupa di attivare i servizi RPC è portmap (a volte anche rpc.portmap), che di norma viene avviato e fermato dalla procedura di inizializzazione del sistema (restando indipendente dal controllo del supervisore dei servizi di rete).

portmap [opzioni]

Il file /etc/rpc contenente l'elenco dei servizi RPC disponibili, abbinati al numero di programma usato come riferimento standard. Il suo scopo è quindi quello di tradurre i nomi in numeri di programma e viceversa.

# /etc/rpc:
# $Id: rpc,v 2.1 1997/06/11 17:14:15 tobias Exp $
#
# rpc 88/08/01 4.0 RPCSRC; from 1.12   88/02/07 SMI

portmapper      100000  portmap sunrpc
rstatd          100001  rstat rstat_svc rup perfmeter
rusersd         100002  rusers
nfs             100003  nfsprog
ypserv          100004  ypprog
mountd          100005  mount showmount
ypbind          100007
walld           100008  rwall shutdown
yppasswdd       100009  yppasswd
etherstatd      100010  etherstat
rquotad         100011  rquotaprog quota rquota
sprayd          100012  spray
3270_mapper     100013
rje_mapper      100014
selection_svc   100015  selnsvc
database_svc    100016
rexd            100017  rex
alis            100018
sched           100019
llockmgr        100020
nlockmgr        100021
x25.inr         100022
statmon         100023
status          100024
bootparam       100026
ypupdated       100028  ypupdate
keyserv         100029  keyserver
tfsd            100037 
nsed            100038
nsemntd         100039
pcnfsd          150001
amd             300019  amq
sgi_fam         391002
ugidd           545580417
bwnfsd          788585389

289.2   Informazioni sulle RPC

Per interrogare un Portmapper si utilizza normalmente il programma rpcinfo: (2)

rpcinfo -p [nodo]
rpcinfo [-n numero_di_porta] {-u|-t} nodo programma [versione]
rpcinfo {-b|-d} programma versione

L'utilità di questo programma sta quindi nella possibilità di conoscere quali servizi RPC sono disponibili all'interno di un certo nodo, oltre alla possibilità di verificare che questi siano effettivamente in funzione.

Tabella 289.3. Alcune opzioni.

Opzione Descrizione
-p [nodo]
Interroga il Portmapper nell'elaboratore indicato, oppure in quello locale, elencando tutti i programmi RPC registrati presso lo stesso.
-u nodo programma [versione]
Utilizza il protocollo UDP per eseguire una chiamata RPC alla procedura zero (NULLPROC) del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.
-t nodo programma [versione]
Utilizza il protocollo TCP per eseguire una chiamata RPC alla procedura zero (NULLPROC) del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.
-n numero_di_porta
Permette di specificare una porta diversa rispetto a quella che viene indicata dal Portmapper, per eseguire una chiamata RPC attraverso le opzioni -u e -t.
-b programma versione
Permette di eseguire una chiamata RPC circolare (broadcast) a tutti i nodi in grado di riceverla, utilizzando il protocollo UDP, per l'esecuzione della procedura zero (NULLPROC) del programma e della versione specificati. Il risultato viene emesso attraverso lo standard output.
-d programma versione
L'utente root può utilizzare questa opzione per eliminare la registrazione del servizio RPC del programma e della versione specificati.

Seguono alcuni esempi:

rpcinfo -p[Invio]

Elenca tutti i servizi RPC registrati nell'elaboratore locale.

   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp    844  mountd
    100005    1   tcp    846  mountd
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs

rpcinfo -p weizen.mehl.dg[Invio]

Elenca tutti i servizi RPC registrati nell'elaboratore weizen.mehl.dg.

rpcinfo -b mountd 1[Invio]

Elenca tutti i nodi in grado di fornire il servizio mountd.

127.0.0.1 localhost.localdomain
192.168.1.1 dinkel.brot.dg
192.168.1.2 roggen.brot.dg

289.3   Controllo sulle RPC

Generalmente, il Portmapper non viene messo sotto il controllo del supervisore dei servizi di rete; tuttavia, potrebbe essere stato compilato in modo da tenere in considerazione il contenuto dei file /etc/hosts.allow e /etc/hosts.deny. Indipendentemente dal fatto che ciò sia vero, se si usano questi file conviene prevedere le direttive che riguardano il Portmapper, in vista di aggiornamenti futuri. In generale, conviene inserire nel file /etc/hosts.allow la riga seguente:

portmap: specifica_dei_nodi

Per converso, conviene indicare la riga seguente nel file /etc/hosts.deny, allo scopo di escludere gli accessi che non provengano dai nodi autorizzati espressamente:

portmap: ALL

Eventualmente, per una sicurezza maggiore, può essere conveniente inserire soltanto la direttiva seguente nel file /etc/hosts.deny, sapendo che questa interferisce però con tutti gli altri programmi che interpretano questi file:

ALL: ALL

Ai fini del controllo attraverso filtri di pacchetto che si basano sul riconoscimento delle porte TCP o UDP, va ricordato che il Portmapper utilizza solitamente la porta 111.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Portmapper   UCB BSD + SUN RPC

2) RPCinfo   UCB BSD + SUN RPC


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

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

Valid ISO-HTML!

CSS validator!