Developpez.com - Linux
X

Choisissez d'abord la catégorieensuite la rubrique :


Administration NFS : portmap et les RPC (Remote Procedure Call)

Date de publication : 05/01/2005 , Date de mise a jour : 05/01/2005

Par david.d (Coredump)
 


1. Les RPC
2. XDR
3. Portmap
3.1. Rôle
3.2. Fonctionnement
3.3. Activation de portmap sous Linux



1. Les RPC

Les RPC (développées par sun) permettent l’exécution de procédures sur une machine distante. Autrement dit, elles permettent de concevoir des programmes répartis en fournissant un mécanisme d’appel de procédures distantes. Nombreuses sont les applications ayant recours aux RPC. On trouve notamment NFS, NIS mais également la plupart des r-commandes rusers, rwall, etc ...

Les procédures (ou fonctions) RPC sont regroupées en programmes et identifiées par des numéros. Les programmes se voient aussi attribuer un numéro ainsi qu’un numéro de version. C’est par le biais de ce triplet qu’un client peut appeler une procédure particulière.

Les numéros sont attribués d’une façon stricte (idem ports TCP et UDP). Ainsi mountd se voit attribuer le numéro 100005.


2. XDR

Conjointement aux RPC et au-dessus (dans le modèle OSI), on utilise le protocole XDR (eXternal Data Representation). XDR gère la mise en forme des données: cryptage, conversion EBCDIC/ASCII. Il définit un standard de représentation des types sur le réseau, afin notamment de palier la multiplicité des représentations utilisées (big endien, little endien, ...).


3. Portmap

Les RPC se trouvent au niveau 5 du modèle OSI au dessus de TCP/UDP, tandis qu’XDR se trouve au niveau 6. Ces appels sont gérés par un standard (le processus portmap) via les numéros vus plus haut. Ces numéros sont recensés dans le fichier /etc/rpc. Ce fichier contient les services constructeurs, ce n’est pas un fichier de configuration, il joue le même rôle que /etc/services dans la correspondance nom d’application/port associé pour la programmation RPC.

On aura sous Linux :


	[bob@matrox /]$ more /etc/rpc

	# ident "@(#)rpc 1.11 95/07/14 SMI" /* SVr4.0 1.2 */

	#

	# rpc

	#

	portmapper..100000 portmap sunrpc rpcbind

	rstatd......100001 rstat rup perfmeter rstat_svc

	rusersd.....100002 rusers

	nfs.........100003 nfsprog

	ypserv......100004 ypprog

	mountd….100005 mount showmount < --------- mountd 1000005

	ypbind……100007

	walld…….100008 rwall shutdown

	yppasswdd…100009 yppasswd

	etherstatd..100010 etherstat

	rquotad…..100011 rquotaprog quota rquota

	…



3.1. Rôle

Le programme serveur RPC contenant les procédures distantes utilise les ports éphémères, pas les ports bien connus. Ceci nécessite l’existence d’un standard conservant trace des ports éphémères utilisés. Le processus assurant cette fonction, c’est portmap, le translateur de ports. Le translateur de ports est aussi un programme serveur RPC de numéro 100000, de version 2 et écoutant sur les ports 111 TCP et UDP.


3.2. Fonctionnement

Pour qu’un serveur usant des RPC fonctionne, il est nécessaire au préalable que portmap soit lancé :

  1. portmap est lancé et est en écoute passive sur les ports TCP et UDP 111,
  2. le serveur démarre, se met en écoute passive sur des ports éphémères TCP et UDP, un par version,
  3. le serveur enregistre chaque programme, version, protocole et numéro de port par un appel à portmap,
  4. lorsqu’un client veut solliciter le serveur, il contacte portmap (111/UDP ou TCP) avec les paramètres protocole et version,
  5. portmap lui retourne alors le port d’écoute du serveur correspondant pour le protocole et la version précisée,
  6. la communication peut maintenant se faire directement entre le client et le serveur

3.3. Activation de portmap sous Linux

La commande rpcinfo permet de connaître les translations en cours :


	[bob@matrox /]$ rpcinfo -p (équivalent à rpcinfo -p localhost)

	program.no_version.protocole.no_port

	100000......2.........tcp......111 portmapper

	100000......2.........udp......111 portmapper

	... (éventuellement)


Si la commande rpcinfo -p donne :


	[bob@matrox /]$ rpcinfo -p

	rpcinfo: ne peut contacter l'aiguilleur de ports: RPC: erreur système sur l'hôte cible - Connexion refusée


Il faut alors activer portmap. Sous RedHat, c’est le script portmap du répertoire /etc/rc.d/init.d qui gère le lancement avec les arguments habituels start et stop :


	[bob@matrox /]$ su

	[root@matrox /]# /etc/rc.d/init.d/portmap start

	Démarrage de portmapper : [ OK ]


Cet article présente l'administration NFS sous Linux. Vous pourrez trouver comment administrer NFS sous FreeBSD sur le site Coredump



Copyright (c) 2004 david d. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. Read the full license here : http://www.gnu.org/licenses/fdl.txt
Contacter le responsable de la rubrique Linux