sysrep:rpc
Table of Contents
TP RPC
Vous disposez de documentation dans le manuel Unix (man rpc, man xdr), ainsi que des documents suivants : rpc-doc.pdf et rpc-spec.pdf.
: rpcbind (la nouvelle implantation du portmapper) ne fonctionne qu'en mode superuser et n'accepte que des services RPC lancés en mode superuser ! Pour surmonter ce problème, il faudrait pouvoir lancer rpcbind en mode “insecure” (option -i) ou utiliser des machines virtuelles ou recompiler une ancienne version de ce service qui ne travaille pas avec le port 111 (mais 1111).
Exercice 1 (calculation)
On vous fourni l'interface “calculation.x”.
- calculation.x
struct two_int { int a; int b; }; program CALCULATION_PROG { version CALCULATION_VERS_BASE { int sum(two_int)=1; }=1; }=0x20000000;
- Programmer cet exemple. Pour générer tout le code source (client, serveur, makefile, stubs), vous pouvez utilisez la commande suivante : “rpcgen -a calculation.x”. Il vous reste à compléter les fichiers calculation_server.c“ et “calculation_client.c”…
- Compiler : make -f makefile.calculation.
- Tester en local sur votre machine, puis sur deux machines distantes.
- Analyser le résultat de la commande “rpcinfo -p”.
- Analyser les souches de ce petit exemple. Ajouter des traces dans le code des souches afin de suivre précisément les appels à distance…
- Ajouter maintenant de nouvelles fonctions à votre service “calculation”…
Exercice 2 (rwall)
A partir de l'interface “rwall.x” qui permet d'envoyer un message.
- rwall.x
program WALLPROG { version WALLVERS { void WALLPROC_WALL(string) = 2; } = 1; } = 0x20000008;
- Implanter rapidement ce service.
- Ecrire maintenant un client pour le service “rwall”, n'utilisant pas les souches générées, grâce à la fonction “callrpc()”.
- Ecrire maintenant un serveur pour le service “rwall” n'utilisant pas les souches générées, grâce aux fonctions “registerrpc()” et “svc_run()”.
Nota Bene : cf. man rpc
Exercice 3 (authentification)
On vous fourni l'interface “hello.x”, qui retourne le message “hello world!” au client.
- hello.x
program HELLOPROG { version HELLOVERS { string HELLO(void) = 1; } = 1; } = 0x30000824;
- Implantez rapidement ce service.
- Modifiez le client pour qu'il utilise l'authentification Unix. Aidez-vous de la documentation fournie dans rpc-doc.pdf.
- Modifiez le serveur pour qu'il accepte uniquement les clients utilisant l'authentification Unix, possédant le même UID que le serveur. Vérifiez qu'un client avec un UID différent est bien rejeté !
- Que pensez-vous de ce système d'authentification ? Mettez-en évidence que vous pouvez le contourner en modifiant le code client.
sysrep/rpc.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1