[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
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.
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 |
Per interrogare un Portmapper si utilizza normalmente il programma rpcinfo: (2)
rpcinfo -p [host]
rpcinfo [-n numero_di_porta] {-u|-t} host 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. L'elenco seguente descrive alcune opzioni.
Seguono alcuni esempi:
$
rpcinfo -p
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
Elenca tutti i servizi RPC registrati nell'elaboratore weizen.mehl.dg
.
$
rpcinfo -b mountd 1
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 |
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, converrà inserire nel file /etc/hosts.allow
la riga seguente:
portmap: specifica_dei_nodi |
Per converso, converrà 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 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini --daniele @ swlibero.org
1) Portmapper UCB BSD + SUN RPC
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome rpc_remote_procedure_call.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]