/usr/share/doc/HOWTO/fr-html/NFS-HOWTO.html is in doc-linux-fr-html 2013.01-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.72">
<title>Linux NFS HOWTO</title>
</head>
<body>
<h1>Linux NFS HOWTO</h1>
<h2>Nicolai Langfeldt <code>janl@linpro.no</code></h2>
v1.0, 1er octobre 1999
<hr>
<em>(30 novembre 1999. Adaptation française par Christophe Deleuze,
<code>Christophe.Deleuze@lip6.fr</code>). HOWTO décrivant
l'installation de serveurs et clients NFS.</em>
<hr>
<h2><a name="s1">1. Préambule</a></h2>
<h2><a name="ss1.1">1.1 Blabla légal</a></h2>
<p>(C)opyright 1997-1999 Nicolai Langfeldt et Ron Peters. Si vous
modifiez ce document signalez le dans le copyright, sa distribution
est libre à condition de conserver ce paragraphe. La section FAQ
est basée sur la FAQ NFS compilée par Alan Cox. La section
<em>Checklist</em> est basée sur une <em>checklist</em> des
problèmes de mount compilée par IBM Corporation. La section ``NFS
serveur sur disquette'' a été écrite par Ron Peters.</p>
<p>(C)opyright 1997-1999 Christophe Deleuze pour la version
française. Si vous lisez ce document sous le pont de l'Alma,
veillez à respecter les limitations de vitesse.</p>
<h2><a name="ss1.2">1.2 Dénégation</a></h2>
<p>Ni Nicolai Langfeldt, ni Ron Peters ni leurs employeurs, ni qui
que ce soit, n'assume de responsabilité pour les conséquences que
les instructions de ce document peuvent avoir. Si vous choisissez
de suivre ces instructions, bonne chance !</p>
<h2><a name="ss1.3">1.3 Retour</a></h2>
<p>Ce document ne sera jamais terminé, merci de m'envoyer par mail
vos problèmes et réussites, cela pourra améliorer ce HOWTO. Envoyez
argent, commentaires et questions à <a href=
"mailto:janl@math.uio.no">janl@math.uio.no</a>, ou <a href=
"mailto:rpeters@hevanet.com">rpeters@hevanet.com</a> pour ce qui
concerne les serveurs NFS sur disquette. Si vous m'envoyez un mail,
par pitié, <em>vérifiez</em> que l'adresse de retour soit correcte
et fonctionne. Vous ne vous imaginez pas combien de mes réponses
sont revenues à cause d'une adresse incorrecte.</p>
<h2><a name="ss1.4">1.4 Autre blabla</a></h2>
<p>Si vous voulez traduire ce HOWTO merci de me le signaler, que je
puisse savoir en quels langages j'ai été publié :-). [Ndt : c'est
fait...]</p>
<p>Remerciements à Olaf Kirch pour m'avoir convaincu d'écrire ceci,
puis fourni de bonnes suggestions.</p>
<p>Les commentaires sur la traduction sont à envoyer à Christophe
Deleuze, Christophe.Deleuze@lip6.fr.</p>
<h2><a name="intro"></a> <a name="s2">2. LISEZMOI.d_abord</a></h2>
<p>NFS, le système de fichiers par réseau, a trois caractéristiques
importantes :</p>
<ul>
<li>il permet le partage de fichiers sur un réseau ;</li>
<li>il marche suffisamment bien ;</li>
<li>il crée tout un tas de problèmes de sécurité bien connus des
crackers qui peuvent facilement les exploiter pour obtenir l'accès
(lecture, écriture et effacement) à tous vos fichiers.</li>
</ul>
<p>Je parlerai de ces deux aspects dans ce HOWTO. Lisez bien la
section sécurité et vous supprimerez quelques risques stupides. Ne
dites pas que je ne vous ai pas prévenus. Les passages sur la
sécurité sont parfois assez techniques et demandent quelques
connaissances en réseau IP. Si vous ne connaissez pas les termes
utilisés vous pouvez soit consulter le HOWTO réseau, improviser ou
vous procurer un livre sur l'administration de réseau TCP/IP pour
vous familiariser avec TCP/IP. C'est une bonne idée de toutes
façons si vous administrez des machines UNIX/Linux. Un très bon
livre sur le sujet est <em>TCP/IP Network Administration</em> par
Craig Hunt, publié par O'Reilly & Associates, Inc. Et quand
vous l'aurez lu et compris, vous vaudrez plus cher sur le marché du
travail, vous ne pouvez qu'y gagner :-)</p>
<p>Il y a deux sections pour vous aider à régler vos problèmes NFS,
la <em>Mount Checklist</em> et les <em>FAQs</em>. Jetez-y un oeil
si quelque chose ne marche pas comme prévu.</p>
<p>Si vous voulez/avez besoin de le récupérer et compiler vous
même, le site de référence pour le nfsd Linux 2.0 est <a href=
"ftp.mathematik.th-darmstadt.de:/pub/linux/okir">ftp.mathematik.th-darmstadt.de:/pub/linux/okir</a>.</p>
<p>À propos de NFS sous Linux 2.2 voir <a href="#linuxtwotwo">la
section sur Linux 2.2</a>.</p>
<h2><a name="nfs-server"></a> <a name="s3">3. Installer un serveur
NFS</a></h2>
<h2><a name="ss3.1">3.1 Conditions préalables</a></h2>
<p>Avant de continuer à lire ce HOWTO, vous aurez besoin de pouvoir
faire des telnet dans les deux sens entre les machines que vous
utiliserez comme serveur et client. Si cela ne fonctionne pas,
voyez le HOWTO réseau (NET-3) et configurez correctement le
réseau.</p>
<h2><a name="ss3.2">3.2 Premiers pas</a></h2>
<p>Avant de faire quoi que ce soit d'autre, il nous faut un serveur
NFS installé. Si vous faites partie d'un département réseau d'une
université ou autre, il y a probablement un grand nombre de
serveurs NFS qui tournent déjà. Si votre but est d'utiliser un
serveur déjà installé alors vous pouvez sauter à <a href=
"#nfs-client">la section sur l'installation d'un client
NFS</a>.</p>
<p>Si vous devez installer un serveur sur une machine non Linux
vous devrez lire les pages de manuel du système pour trouver
comment configurer le serveur NFS et l'exportation des systèmes de
fichiers par NFS. Ce HOWTO contient une section décrivant les
manipulations nécessaires sur divers systèmes. Ceci fait, vous
pourrez passer à la section suivante. Ou continuer à lire cette
section vu que certaines des choses que je vais dire sont
pertinentes quel que soit le type de machine que vous utilisez
comme serveur.</p>
<p>Si vous utilisez Linux 2.2, voyez <a href="#linuxtwotwo">la
section sur Linux 2.2</a> avant de passer à la suite.</p>
<p>Nous allons maintenant configurer tout un tas de programmes.</p>
<h2><a name="ss3.3">3.3 Le portmapper</a></h2>
<p>Le portmapper de Linux est appelé soit <code>portmap</code> soit
<code>rpc.portmap</code>. La page de manuel sur mon système dit que
c'est un convertisseur de port DARPA vers numéro de programme RPC.
C'est là que se trouve la première faille de sécurité. La gestion
de ce problème est décrite à la section <a href="#nfs-security">sur
la sécurité</a>, que, encore une fois, je vous invite très
fortement à lire.</p>
<p>Lancez le portmapper. Il devrait être dans le répertoire
<code>/usr/sbin</code> (sur quelques machines il est appelé
rpcbind). Vous pouvez le lancer à la main pour cette fois mais il
devra être lancé à chaque démarrage de la machine, il faudra donc
créer ou éditer les scripts rc. Les scripts rc sont décrits dans la
page de manuel init, ils sont généralement dans
<code>/etc/rc.d</code>, <code>/etc/init.d</code> ou
<code>/etc/rc.d/init.d</code>. S'il y a un script qui a un nom du
genre <code>inet</code>, c'est probablement le script à éditer.
Mais ce qu'il faut écrire ou faire sort du cadre de ce HOWTO.
Lancez portmap, et vérifiez qu'il tourne avec <code>ps -aux</code>,
puis <code>rpcinfo -p</code>. Il y est ? Benissimo.</p>
<p>Encore une chose. L'accès distant à votre portmapper est
contrôlé par le contenu de vos fichiers
<code>/etc/hosts.allow</code> et <code>/etc/hosts.deny</code>. Si
<code>rcpinfo -p</code> échoue alors que le portmapper tourne,
vérifiez ces fichiers. Voyez la section <a href="#nfs-security">sur
la sécurité</a> pour les détails concernant ces fichiers.</p>
<h2><a name="ss3.4">3.4 Mountd et nfsd</a></h2>
<p>Les prochains programmes à lancer sont mountd et nfsd. Mais
d'abord il faut éditer un autre fichier, <code>/etc/exports</code>.
Disons que je veux que le système de fichiers
<code>/mn/eris/local</code> qui est sur la machine
<code>eris</code> soit disponible sur la machine
<code>apollon</code>. Je l'indique dans <code>/etc/exports</code>
sur eris :</p>
<hr>
<pre>
/mn/eris/local apollon(rw)
</pre>
<hr>
<p>La ligne ci-dessus donne à <code>apollon</code> un accès en
lecture/écriture sur <code>/mn/eris/local</code>. Au lieu de
<code>rw</code> on pourrait mettre <code>ro</code> pour <em>read
only</em> (lecture seule, c'est la valeur par défaut). D'autres
options existent, et je parlerai de quelques unes liées à la
sécurité plus loin. Elles sont toutes décrites dans la page de
manuel <code>exports</code> qu'il faut lire au moins une fois dans
sa vie. Il y a de meilleures façons de faire que de lister tous les
hosts dans le fichier exports. Peuvent être autorisés à monter un
système de fichiers NFS, des groupes réseaux (<em>net groups</em>)
si vous utilisez NIS (ou NYS, auparavant connu sous le nom YP), des
noms de domaines avec jokers et des sous réseaux IP. Mais il faudra
vérifier qui peut obtenir un accès au serveur avec ce type
d'autorisations groupées.</p>
<p>Note : ce fichier exports n'utilise pas la même syntaxe que
d'autres Unix. Ce HOWTO contient une section sur la façon dont les
autres Unix <code>export</code>ent leurs fichiers.</p>
<p>Maintenant nous sommes prêts à lancer mountd (ou peut-être
s'appelle-t-il <code>rpc.mountd</code>), puis nfsd (qui s'appelle
peut-être <code>rpc.nfsd</code>). Ils liront tous deux le fichier
exports.</p>
<p>Si vous modifiez <code>/etc/exports</code>, vous devrez vous
assurer que nfsd et mountd savent que le fichier a changé. La façon
traditionnelle est de lancer <code>exportfs</code>. Beaucoup de
distributions Linux n'ont pas le programme exportfs. Si c'est le
cas sur votre machine, vous pouvez installer ce script :</p>
<hr>
<pre>
#!/bin/sh
killall -HUP /usr/sbin/rpc.mountd
killall -HUP /usr/sbin/rpc.nfsd
echo Volumes NFS réexportés
</pre>
<hr>
<p>Sauvez le dans <code>/usr/sbin/exportfs</code> par exemple, et
n'oubliez pas de lui appliquer <code>chmod a+rx</code>. Désormais,
chaque fois que vous changez votre fichier exports, lancez ensuite
exportfs en root.</p>
<p>Maintenant, vérifiez que mountd et nfsd fonctionnent
correctement. D'abord avec <code>rpcinfo -p</code>. Il devrait
donner quelque chose du genre :</p>
<hr>
<pre>
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 745 mountd
100005 1 tcp 747 mountd
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
</pre>
<hr>
<p>On voit que le portmapper a annoncé ses services, de même que
mountd et nfsd.</p>
<p>Si vous obtenez : <code>rpcinfo: can't contact portmapper: RPC:
Remote system error - Connection refused</code>,
<code>RPC_PROG_NOT_REGISTERED</code> ou quelque chose du style
c'est que le portmapper ne tourne pas. OU, vous avez quelques chose
dans <code>/etc/hosts.{allow,deny}</code> qui interdit au
portmapper de répondre, voyez <a href="#nfs-security">la section
sécurité</a> à ce propos. Si vous obtenez <code>No remote programs
registered</code> alors soit le portmapper ne veut pas vous parler,
soit quelque chose ne marche pas. Tuez nfsd, mountd et le
portmapper et essayez de recommencer.</p>
<p>Après avoir vérifié que le portmapper rend compte des services
vous pouvez vérifier aussi avec <code>ps</code>. Le portmapper
continuera à afficher les services même si les programmes qui les
offrent ont crashé. Il vaut donc mieux vérifier par ps si quelque
chose ne marche pas.</p>
<p>Bien sur, vous devrez modifier vos fichiers systèmes rc pour
lancer mountd et nfsd au démarrage de la même façon que le
portmapper. Il y a de très fortes chances que les scripts existent
déjà sur votre machine, vous aurez juste à décommenter les bonnes
lignes ou les activer pour les bons <em>runlevels</em> (pardon
niveaux d'exécution) d'init.</p>
<p>Quelques pages de manuel avec lesquelles vous devriez être
familier : portmap, mountd, nfsd et exports.</p>
<p>Bon, si vous avez tout fait exactement comme j'ai dit vous êtes
prêts à enchaîner sur le client NFS.</p>
<h2><a name="nfs-client"></a> <a name="s4">4. Installer un client
NFS</a></h2>
<p>Tout d'abord il faudra compiler un noyau avec le système de
fichiers NFS, soit compilé dans le noyau, soit disponible sous
forme de module. Si vous n'avez encore jamais compilé un noyau vous
aurez peut être besoin de consulter le HOWTO du noyau. Si vous
utilisez une distribution très cool (comme Chapeau Rouge) et que
vous n'avez jamais trifouillé le noyau (pas toucher toucher) il y a
des chances que NFS soit automagiquement disponible.</p>
<p>Vous pouvez maintenant, à l'invite (prompt) du root, entrer la
commande <code>mount</code> appropriée et le système de fichiers
apparaîtra. Continuons avec l'exemple de la section précédente,
nous voulons monter <code>/mn/eris/local</code> depuis eris. La
commande est :</p>
<hr>
<pre>
mount -o rsize=1024, wsize=1024 eris:/mn/eris/local /mnt
</pre>
<hr>
<p>Nous reviendrons plus tard sur les options rsize et wsize. Le
système de fichiers est maintenant disponible sous /mnt et vous
pouvez faire un cd sur lui, puis un ls et regarder les fichiers
individuellement. Vous remarquerez que ce n'est pas aussi rapide
qu'avec un système de fichiers local, mais beaucoup plus pratique
que ftp. Si, au lieu de monter le système de fichiers, mount
renvoie un message d'erreur comme <code>mount: eris:/mn/eris/local
failed, reason given by server: Permission denied</code> alors le
fichier exports est incorrect, ou vous avez oublié de lancer
exportfs après avoir modifié le fichier exports. S'il dit
<code>mount: clntudp_ipdate: RPC: Program not registered</code>
cela signifie que nfsd ou mountd ne tourne pas sur le serveur, ou
que vous avez le problème avec les fichiers
<code>hosts.{allow,deny}</code> mentionné plus haut.</p>
<p>Pour vous débarrasser du système de fichiers, vous pouvez faire
:</p>
<hr>
<pre>
umount /mnt
</pre>
<hr>
<p>Pour que le système monte automatiquement un système de fichiers
NFS au démarrage, éditez <code>/etc/fstab</code> de la façon
habituelle. Par exemple avec une ligne comme celle-ci :</p>
<hr>
<pre>
# device mountpoint fs-type options dumps sfckorder
...
eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0
...
</pre>
<hr>
<p>C'est presque tout ce qu'il y a à savoir. Vous pouvez jeter un
coup d'oeil à la page de manuel <code>nfs</code>. Continuons
plize.</p>
<h2><a name="ss4.1">4.1 Options de montage</a></h2>
<p>Il y a trois comportements principaux des clients NFS en cas de
chute du serveur qui sont spécifiés par les options de montage
:</p>
<dl>
<dt><b>soft</b></dt>
<dd>
<p>Le client NFS renverra une erreur au processus concerné si après
quelques essais le serveur NFS persiste à ne pas répondre. Si vous
voulez utiliser cette option, vous devez vérifier que votre
logiciel la gère correctement. Je ne recommande pas ce réglage,
c'est un bon moyen de perdre des données et corrompre des fichiers.
En particulier, n'utilisez pas ça pour les disques où sont stockés
vos mails (si vous tenez à vos mails).</p>
</dd>
<dt><b>hard</b></dt>
<dd>
<p>Le client NFS réessaiera infiniment jusqu'à ce qu'il soit tué.
Les opérations reprendront normalement si le serveur NFS se
rétablit ou redémarre. Le client ne pourra pas être interrompu ou
tué.</p>
</dd>
<dt><b>hard,intr</b></dt>
<dd>
<p>Comme hard, mais Ctrl-C tuera le processus bloqué. Dans quelques
cas, notament un disque /usr/spool/mail monté par NFS cela ne
changera rien car le shell ignore le Ctrl-C quand il teste si vous
avez du mail. Je recommande cette option pour <b>tous</b> les
systèmes de fichiers NFS, y compris le <em>spool</em> du mail.</p>
</dd>
</dl>
<p>Reprenons l'exemple précédent, votre entrée fstab est maintenant
:</p>
<hr>
<pre>
# device mountpoint fs-type options dumps sfckorder
...
eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0
...
</pre>
<hr>
<h2><a name="optimizing"></a> <a name="ss4.2">4.2 Optimisation de
NFS</a></h2>
<p>Normalement, si les options rsize et wsize ne sont pas
précisées, NFS écrira et lira par blocs de 4096 ou 8192 octets.
Mais certaines combinaisons de noyau Linux et cartes réseau ne
peuvent pas fonctionner avec ces valeurs, de plus, même si cela
marche, cela peut ne pas être optimal du tout. Il nous faudra donc
expérimenter et trouver les valeurs de rsize et wsize qui
fonctionnent et donnent les transferts les plus rapides. Vous
pouvez tester la vitesse obtenue avec différentes valeurs des
options avec des commandes simples. La commande mount ci-dessus
ayant été exécutée, si vous avez l'accès en écriture sur le disque
vous pouvez tester les performances en écriture séquentielle :</p>
<hr>
<pre>
time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096
</pre>
<hr>
<p>Ceci crée un fichier de 64 Mo ne contenant que des 0. Faites le
quelques (5-10?) fois et prenez la moyenne des temps. C'est le
temps `elapsed' ou `wall clock' qui est le plus intéressant.
Ensuite vous pouvez tester les performances en lecture en relisant
le fichier :</p>
<hr>
<pre>
time dd if=/mnt/testfile of=/dev/null bs=16k
</pre>
<hr>
<p>faites le quelques fois et prenez la moyenne. Puis démontez
(<code>umount</code>) et remontez (<code>mount</code>) avec des
valeurs plus grandes pour rsize et wsize. Il vaut mieux prendre des
multiples de 1024, et probablement pas plus grand que 16384 octets,
car les gros blocs ralentissent les accès aléatoires. Immédiatement
après avoir re<code>mount</code>é avec une taille supèrieure,
placez vous (<code>cd</code>) dans le système de fichiers et faites
des trucs comme ls, explorez un peu pour vérifier que tout est bien
normal. Si la valeur de rsize/wsize est trop grande, les symptômes
sont <em>vraiment</em> bizarres et pas évidents. Un symptôme
typique est une liste de fichiers donnée par <code>ls</code>
incomplète sans aucun message d'erreur. Ou la lecture de fichier
qui échoue mystérieusement et sans message d'erreur. Après vous
être assurés que les wsize/rsize choisis fonctionnent, vous pouvez
faire les tests de rapidité. Différentes plateformes de serveur
auront peut-être des tailles optimales différentes. SunOS et
Solaris sont réputés pour être beaucoup plus rapides avec une
taille de 4096 octets.</p>
<p>Les noyaux Linux récents (depuis 1.3) font parfois des lectures
anticipées (<em>read ahead</em>) pour des rsizes supérieurs ou
égaux à la taille de page de la machine. Sur les processeurs Untel
la taille de la page est de 4096 octets. La lecture anticipée
augmentera <em>sensiblement</em> les performances en lecture. Sur
une machine Untel on devrait donc choisir un rsize de 4096 si c'est
possible.</p>
<p>Un truc pour augmenter les performances d'écriture de NFS est
d'invalider les écritures synchrones sur le serveur. Les
spécifications de NFS disent que les requêtes d'écriture de NFS ne
doivent pas être considérées comme terminées avant que les données
ne soient sur un médium non versatile (normalement le disque). Ceci
réduit les performances à l'écriture, les écritures asynchrones
sont plus rapides. Le nfsd Linux ne fait pas d'écritures synchrones
car l'implémentation du système de fichiers ne s'y prête pas, mais
sur les serveurs non Linux vous pouvez augmenter les performances
de cette façon dans votre fichier exports :</p>
<hr>
<pre>
/dir -async, access=linuxbox
</pre>
<hr>
<p>ou quelque chose du genre. Référez vous à la page de manuel
exports de la machine concernée. Notez que ceci augmente les
risques de perte de données.</p>
<h2><a name="slow-lines"></a> <a name="s5">5. NFS sur les lignes à
faible débit</a></h2>
<p>Les lignes lentes (à faible débit) comprennent les modems, RNIS
et aussi sans doute les autres connexions longue distance.</p>
<p>Cette section est basée sur la connaissance des protocoles
utilisés mais pas sur des expérimentations. Faites moi savoir si
vous essayez ceci ;-)</p>
<p>La première chose à retenir est que NFS est un protocole lent.
Il a un grand <em>overhead</em> (sur-coût en bande passante).
Utiliser NFS, c'est presque comme utiliser kermit pour transférer
des fichiers. Il est <em>lent</em>. Presque tout est plus rapide
que NFS. FTP est plus rapide. HTTP est plus rapide. rcp est plus
rapide. ssh est plus rapide.</p>
<p>Vous voulez toujours l'essayer ? Ok.</p>
<p>Par défaut NFS est paramétré pour des lignes rapides et à faible
latence. Si vous utilisez les paramètres par défaut sur des lignes
à grande latence cela peut provoquer des erreurs, des annulations,
des rétrécissements de fichiers, et des comportements bizarres.</p>
<p>La première chose à faire est de ne <em>pas</em> utiliser
l'option de montage <code>soft</code>. Les temporisations
retourneront des erreurs au logiciel, qui, dans l'immense majorité
des cas, ne saura pas quoi en faire. C'est une bonne façon d'avoir
des problèmes bizarres. Utilisez plutôt l'option de montage
<code>hard</code>. Quand <code>hard</code> est actif les
temporisations déclenchent des essais infinis au lieu d'annuler ce
que le logiciel était en train de faire (quoi que ce soit). C'est
ce que vous voulez. Vraiment.</p>
<p>La deuxième chose à faire est d'ajuster les options de montage
<code>timeo</code> et <code>retrans</code>. Elles sont décrites
dans la page de manuel nfs(5), en voici un extrait (version
française) :</p>
<hr>
<pre>
timeo=n La valeur, en dixiemes de secondes, du
delai avant de declencher la premiere
retransmission d'une RPC. La valeur par
defaut est 7/10 de seconde. Apres une pre�
miere expiration, le delai est double et
l'on recommence les retransmissions jusqu'a
ce que le delai atteigne la valeur maximale
de 60 secondes, ou que le nombre maximal de
retransmission soit depasse. Il se produit
alors une erreur d'expiration majeure de
delai. Si le systeme est monte "en dur",
les retransmissions reprendront a nouveau
indefiniment.
On peut ameliorer les performances en aug�
mentant le delai sur un reseau charge, si
le serveur est un peu lent, ou si l'on
traverse plusieurs routeurs ou passerelles.
retrans=n Le nombre d'expirations mineures et de
retransmissions qui doivent se produire
avant de declencher une expiration majeure.
La valeur par defaut est 3 expirations
mineures. Quand une erreur d'expiration
majeure se produit, soit l'operation est
abandonnee, soit un message "server not
responding" est affiche sur la console.
</pre>
<hr>
<p>En d'autres mots : si une réponse n'est pas reçue avant la
temporisation de 0,7 seconde (700 ms), le client NFS répétera la
requête et doublera la temporisation à 1,4 seconde. Si la réponse
n'arrive pas dans les 1,4 seconde, la requête est répétée à nouveau
et la temporisation est doublée à 2,8 secondes.</p>
<p>La vitesse de la ligne peut être mesurée avec un ping ayant vos
valeurs de rsize/wsize comme taille de paquet.</p>
<hr>
<pre>
$ ping -s 8192 lugulbanda
PING lugulbanda.uio.no (129.240.222.99): 8192 data bytes
8200 bytes from 129.240.222.99: icmp_seq=0 ttl=64 time=15.2 ms
8200 bytes from 129.240.222.99: icmp_seq=1 ttl=64 time=15.9 ms
8200 bytes from 129.240.222.99: icmp_seq=2 ttl=64 time=14.9 ms
8200 bytes from 129.240.222.99: icmp_seq=3 ttl=64 time=14.9 ms
8200 bytes from 129.240.222.99: icmp_seq=4 ttl=64 time=15.0 ms
--- lugulbanda.uio.no ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 14.9/15.1/15.9 ms
</pre>
<hr>
<p>Le temps indiqué est celui que le paquet du ping a pris pour
aller et revenir de lugulbanda. 15 ms, c'est assez rapide. Sur une
ligne à 28 800 bps vous pouvez vous attendre à une valeur de
l'ordre de 4000-5000 ms, et si la ligne est chargée ce temps sera
encore plus élevé, facilement le double. En général, la latence
augmente avec la taille des paquets et la charge de la ligne. Si
vous comptez utiliser FTP et NFS en même temps il faudra mesurer
les temps du ping pendant un transfert FTP et augmenter
<code>timeo</code> en accord avec la latence de votre ligne.</p>
<h2><a name="nfs-security"></a> <a name="s6">6. NFS et la
sécurité</a></h2>
<p>Je ne suis en aucun cas un expert en sécurité informatique. Mais
j'ai traîné dans le secteur et j'ai un <em>petit</em> conseil pour
ceux qui se préoccupent de la sécurité. Mais attention. Ce n'est
pas absolument pas une liste complète des problèmes liés à NFS et
si vous pensez être en sécurité une fois que vous avez lu et mis en
pratique tout ceci alors j'ai un pilier de pont (presque neuf) à
vous vendre.</p>
<p>Cette section n'a probablement pas d'intérêt si vous êtes sur un
réseau <em>fermé</em> où vous avez confiance en tous les
utilisateurs, et que personne en qui vous n'avez pas confiance ne
peut obtenir un accès sur les machines du réseau. I.e., il ne
devrait y avoir aucun moyen de se connecter à votre réseau depuis
l'extérieur et il ne devrait être relié à aucun autre réseau où
vous n'avez pas confiance en tous les utilisateurs et en sa
sécurité. Vous pensez que je suis parano ? Pas du tout. C'est un
conseil de sécurité <em>de base</em>. Et rappelez-vous que c'est
juste le commencement. Un site <em>sûr</em> nécessite un
administrateur consciencieux et bien informé qui sait où trouver
l'information sur les problèmes de sécurité existants ou
potentiels.</p>
<p>Un problème de base de NFS est que le client, si on ne lui
demande pas le contraire, fera confiance au serveur NFS et vice
versa. Ça peut être mauvais. Cela signifie que si le compte root du
serveur est cassé (<em>broken into</em>) il peut être très facile
de casser le compte root du client. Et vice versa. Il y a quelques
moyens de gérer ce problème sur lesquels nous reviendrons.</p>
<p>Les documents consultatifs (<em>advisories</em>) du CERT sur NFS
sont une bonne source d'information, la plupart des problèmes (et
des solutions) évoquées ci-dessous sont traités dans ces documents.
Voyez <a href=
"ftp://ftp.cert.orf/01-README">ftp.cert.org:/01-README</a> pour une
liste à jour. En voici quelques-uns liés à NFS (il n'y a pas à ma
connaissance de version française) :</p>
<hr>
<pre>
CA-91:21.SunOS.NFS.Jumbo.and.fsirand 12/06/91
Vulnerabilities concerning Sun Microsystems, Inc. (Sun) Network
File System (NFS) and the fsirand program. These vulnerabilities
affect SunOS versions 4.1.1, 4.1, and 4.0.3 on all architectures.
Patches are available for SunOS 4.1.1. An initial patch for SunOS
4.1 NFS is also available. Sun will be providing complete patches
for SunOS 4.1 and SunOS 4.0.3 at a later date.
CA-94:15.NFS.Vulnerabilities 12/19/94
This advisory describes security measures to guard against several
vulnerabilities in the Network File System (NFS). The advisory was
prompted by an increase in root compromises by intruders using tools
to exploit the vulnerabilities.
CA-96.08.pcnfsd 04/18/96
This advisory describes a vulnerability in the pcnfsd program (also
known as rpc.pcnfsd). A patch is included.
</pre>
<hr>
<h2><a name="ss6.1">6.1 Sécurité du client</a></h2>
<p>Du côté client il y a quelques options de mount qui permettent
de ne pas faire trop confiance au serveur. L'option
<code>nosuid</code> interdit le démarrage de programmes suid depuis
le système de fichiers NFS. C'est une option à utiliser
systématiquement, car elle empêche le root du serveur de créer un
fichier suid sur le système de fichiers NFS, puis de se loger dans
le client en utilisateur et de lancer le programme suid pour
devenir root sur le client. Il est aussi possible d'interdire
l'exécution des fichiers du système de fichiers NFS avec l'option
<code>noexec</code>. Mais ceci est beaucoup moins utile que
<code>nosuid</code> car le système de fichiers contiendra très
probablement au moins <em>quelques</em> scripts ou programmes à
exécuter. Ces options se rentrent dans la colonne d'options, avec
<code>wsize</code> et <code>rsize</code>, séparées par des
virgules.</p>
<h2><a name="ss6.2">6.2 Sécurité du serveur : nfsd</a></h2>
<p>Du côté serveur on peut ne pas faire confiance au root du
client, avec l'option <code>root_squash</code> (rembarrage du root
:-) dans le fichier exports :</p>
<hr>
<pre>
/mn/eris/local apollon(rw, root_squash)
</pre>
<hr>
<p>Dans ce cas, si un utilisateur du client avec l'UID 0 essaye
d'accéder (en lecture, écriture ou effacement) au système de
fichiers, le serveur remplace l'UID par celui de l'utilisateur
`nobody' du serveur. Ceci signifie que l'utilisateur root du client
ne peut accéder/modifier les fichiers du serveur que seul le root
du serveur peut accéder/modifier. C'est bien, et vous aurez
probablement à utiliser cette option sur tous les systèmes de
fichiers que vous exportez. J'en entends un qui me dit : ``Mais
l'utilisateur root du client peut toujours utiliser 'su' pour
devenir n'importe qui et accéder à ses fichiers !'' Et là je
réponds : ``Oui, c'est comme ça, c'est Unix''. Ceci a une
conséquence importante : tous les fichiers et binaires importants
devraient appartenir à <code>root</code>, et pas <code>bin</code>
ou un compte autre que root, car le seul compte auquel le root du
client ne peut pas accéder est le compte root du serveur. Plusieurs
autres options permettant de ne pas faire confiance à qui ne vous
plait pas sont énumérées dans la page de manuel nfsd. Il y a aussi
des options pour rembarrer (<em>to squash</em>) des intervalles
d'UID ou GID.</p>
<p>Il est important aussi de s'assurer que nfsd vérifie que toutes
les requêtes viennent d'un port privilégié. S'il accepte les
requêtes de n'importe quel port du client, un utilisateur
quelconque peut exécuter un programme qu'il est facile de se
procurer sur l'Internet. Il parle le protocole NFS et pourra
prétendre être n'importe qui et être cru. Ça fait peur hein ? Le
nfsd Linux effectue cette vérification par défaut, sur d'autres
systèmes d'exploitation il faut la valider. Ça devrait être décrit
dans les pages du manuel de ce système.</p>
<p>Autre chose. N'exportez jamais un système de fichiers vers
`localhost' ou 127.0.0.1. Croyez-moi.</p>
<h2><a name="ss6.3">6.3 Sécurité du serveur : le
portmapper</a></h2>
<p>Le portmapper de base, en combinaison avec nfsd présente un
problème de conception qui rend possible de récupérer les fichiers
d'un serveur NFS sans avoir aucun privilège. Heureusement le
portmapper utilisé par la plupart des distributions Linux est
relativement sûr vis à vis de cette attaque, et peut être sécurisé
en configurant les listes d'accès au moyen de deux fichiers.</p>
<p>Toutes les distributions de Linux ne sont pas égales. Certaines
apparemment à jour n'incluent <em>pas</em> un portmapper sur, même
aujourd'hui, alors que le problème est connu depuis plusieurs
années. Au moins une distribution contient même la page de manuel
pour un portmapper sûr alors que le portmapper effectivement
installé n'est <em>pas</em> sûr. Pour déterminer simplement si
votre portmapper est le bon ou pas, lancez strings(1) et voyez s'il
lit les fichiers appropriés <code>/etc/hosts.deny</code> et
<code>/etc/hosts.allow</code>. Si votre portmapper est
<code>/usr/sbin/portmap</code> exécutez la commande <code>strings
/usr/sbin/portmap | grep hosts</code>. Sur ma machine cela donne
:</p>
<hr>
<pre>
/etc/hosts.allow
/etc/hosts.deny
@(#) hosts_ctl.c 1.4 94/12/28 17:42:27
@(#) hosts_access.c 1.20 96/02/11 17:01:27
</pre>
<hr>
<p>Tout d'abord, éditons <code>/etc/hosts.deny</code>. Il devrait
contenir la ligne :</p>
<hr>
<pre>
portmap: ALL
</pre>
<hr>
<p>qui refusera l'accès à <em>quiconque</em>. Maintenant qu'il est
fermé, lancez <code>rpcinfo -p</code> pour vérifier qu'il lit et se
conforme au contenu du fichier. rpcinfo ne devrait rien renvoyer,
ou peut être un message d'erreur. Il ne devrait <em>pas</em> y
avoir besoin de relancer le portmapper.</p>
<p>Fermer le portmapper à tous le monde est peut être un peu
excessif, nous ré-ouvrons donc quelque peu l'accès en éditant le
fichier <code>/etc/hosts.allow</code>. Mais il faut d'abord savoir
ce qu'on va y mettre. À la base, il devrait contenir les noms de
toutes les machines qui doivent avoir accès à votre portmapper. Sur
le système Linux moyen il y a très peu de machines qui ont une
bonne raison de demander cet accès. Le portmapper administre nfsd,
mountd, ypbind/ypserv, pcnfsd et les services ``en r'' comme
ruptime et rusers. Parmis ceux-ci, seuls nfsd, mountd,
ypbind/ypserv et peut-être pcnfsd ont de l'importance. Toutes les
machines qui ont besoin d'accéder à ces services sur votre machine
devraient y être autorisées. Disons que votre machine est
129.240.223.254 et que tout ce qui vit sur le sous réseau
129.240.223.0 doit pouvoir y accéder (si ceci n'est pas clair pour
vous, voyez le HOWTO réseau). On écrit :</p>
<hr>
<pre>
portmap: 129.240.223.0/255.255.255.0
</pre>
<hr>
<p>dans <code>hosts.allow</code>. C'est l'adresse de réseau que
vous donnez aussi à la commande <code>route</code> et le masque de
réseau que vous donnez à <code>ifconfig</code>. Pour le périférique
<code>eth0</code> sur cette machine <code>ifconfig</code> devrait
donner :</p>
<hr>
<pre>
...
eth0 Link encap:10Mbps Ethernet HWaddr 00:60:8C:96:D5:56
inet addr:129.240.223.254 Bcast:129.240.223.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:360315 errors:0 dropped:0 overruns:0
TX packets:179274 errors:0 dropped:0 overruns:0
Interrupt:10 Base address:0x320
...
</pre>
<hr>
<p>et <code>netstat -rn</code> devrait donner :</p>
<hr>
<pre>
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
129.240.223.0 0.0.0.0 255.255.255.0 U 0 0 174412 eth0
...
</pre>
<hr>
<p>(Adresse réseau dans la première colonne)</p>
<p>Les fichiers <code>hosts.deny</code> et <code>hosts.allow</code>
sont décrits dans les pages de manuel de mêmes noms.</p>
<p><b>IMPORTANT</b> : ne <em>rien</em> mettre d'autre que des
adresses IP (numériques) dans les lignes portmap de ces fichiers.
Les <em>host name lookup</em> (recherche d'adresse IP (numérique) à
partir de l'adresse alphanumérique ex. ftp.lip6.fr donne
132.227.77.2) peuvent indirectement déclencher une activité portmap
qui déclenchera un <em>host name lookup</em> qui déclenchera...</p>
<p>Ceci fait, votre serveur devrait être un peu plus solide. Le
dernier problème (mais oui !) est que quelqu'un casse le compte
root (ou boute MS-DOS) sur une machine de confiance et utilise ce
privilège pour envoyer des requêtes depuis un port sûr en se
faisant passer pour n'importe quel utilisateur.</p>
<h2><a name="ss6.4">6.4 NFS et les coupent-feu (firewalls)</a></h2>
<p>C'est une très bonne idée de bloquer les ports NFS et portmap
dans votre routeur ou firewall. nfsd utilise le port 2049, que ce
soit avec tcp ou udp. Le portmapper est au port 749 (tcp et udp) et
mountd aux port 745 et 747 (tcp et udp). Vérifiez les ports avec la
commande <code>rpcinfo -p</code>.</p>
<p>Si au contraire vous voulez que NFS traverse un firewall, il
existe des options sur les nfsd et mountd récents pour leur
spécifier le port à utiliser. Vous pouvez donc choisir un port qui
ne soit pas bloqué par le firewall.</p>
<h2><a name="ss6.5">6.5 Résumé</a></h2>
<p>Si vous configurez correctement votre installation
portmapper/NFS avec hosts.allow/deny, root_squash, nosuid et les
ports privilégiés, vous évitez beaucoup des bogues connues de NFS
et pouvez presque vous sentir en sécurité au moins pour
<em>ça</em>. Mais de toutes façons : quand un intrus obtient
l'accès à votre réseau, il/elle peut faire apparaître des commandes
bizarres dans votre .forward ou lire votre mail quand
<code>/home</code> ou <code>/var/spool/mail</code> sont exportés.
Pour la même raison, vous ne devriez jamais accéder à votre clé
privée PGP par NFS. Ou au moins vous devez savoir quel est le
risque. Et maintenant vous savez un peu.</p>
<p>NFS et le portmapper constituent un système complexe et il n'est
donc pas totalement exclu que de nouvelles bogues soient
découvertes, soit dans la conception soit dans l'implémentation que
nous utilisons. Il pourrait même y avoir des défauts de sécurité
connus, que quelqu'un utilise. Mais c'est la vie. Pour vous tenir
au courant, vous devriez au moins lire les forums
comp.os.linux.announce et comp.security.announce comme minimum
absolu (en français, consultez fr.comp.os.linux.annonces).</p>
<h2><a name="s7">7. ``Checklist'' mount</a></h2>
<p>Cette section est basée sur la <i>mount checklist</i> (liste des
problèmes liés à <code>mount</code>) de IBM Corp. Je les remercie
de m'autoriser à l'utiliser dans ce HOWTO. Si vous avez un problème
en montant un système de fichiers NFS, consultez cette liste avant
de poster votre problème sur les niouzes. Chaque point décrit un
type de problème et sa solution.</p>
<ol>
<li>Mount répète <code>RPC: Program not registered</code>
<p>Le portmapper tourne ?</p>
<p><b>Solution :</b> lancez-le.</p>
<p>mountd tourne ?</p>
<p><b>Solution :</b> lancez-le.</p>
<p>nfsd tourne ?</p>
<p><b>Solution :</b> lancez-le.</p>
<p><code>/etc/hosts.deny</code> empêche le portmapper de répondre
?</p>
<p><b>Solution :</b> vous pouvez enlever la règle en question dans
<code>hosts.deny</code> ou en ajouter une dans
<code>hosts.allow</code> de façon que le portmapper soit autorisé à
vous parler.</p>
</li>
<li>Système de fichier non exporté, ou non exporté au client en
question.
<p><b>Solution :</b> exportez le [Ndt : merci IBM !]</p>
</li>
<li>La résolution de noms ne s'accorde pas avec la liste des
exports.
<p>e.g.: la liste des exports dit d'exporter vers
<code>johnmad</code> mais le nom de <code>johnmad</code> est résolu
en <code>johnmad.austin.ibm.com</code>. La permission de monter est
refusée.</p>
<p><b>Solution :</b> exportez vers les deux formes du nom.</p>
<p>Cela peut aussi arriver si le serveur a deux interfaces avec des
noms différents et que les exports n'en spécifient qu'un.</p>
<p><b>Solution :</b> exportez les deux interfaces.</p>
<p>Cela peut aussi se produire si le serveur ne peut pas faire un
lookuphostbyname ou lookuphostbyaddr (ce sont des fonctions de
bibliothèque) sur le client. Assurez-vous que le client peut faire
<code>host <name></code>; <code>host <ip_addr></code>;
et que les deux donnent la même machine.</p>
<p><b>Solution :</b> mettez de l'ordre dans la résolution de
noms.</p>
</li>
<li>Le système de fichiers a été monté après que NFS soit lancé
(sur ce serveur). Dans ce cas le serveur exporte le point de
montage sous-jacent, pas le système de fichiers.
<p><b>Solution :</b> éteignez nfsd et relancez le.</p>
<p><b>Note :</b> les clients qui avaient monté le point de montage
sous-jacent auront des problèmes pour y accéder après le
redémarrage.</p>
</li>
<li>La date est très décalée sur une ou sur les deux machines (cela
peut mettre la pagaille pour make)
<p><b>Solution :</b> réglez correctement la date.</p>
<p>L'auteur du HOWTO recommande d'utiliser NTP pour synchroniser
les horloges. Vu qu'il y a des restrictions à l'exportation (au
sens commercial !) de NTP aux É.U., vous devez vous procurer NTP
pour Debian, Redhat ou Slakware depuis
<code>ftp://ftp.hacktic.nl/pub/replay/pub/linux</code> ou un
miroir.</p>
</li>
<li>Le serveur ne peut pas utiliser un mount d'un utilisateur qui
est dans plus de 8 groupes. <b>Solution :</b> diminuez le nombre de
groupes auxquels l'utilisateur appartient ou montez depuis un autre
utilisateur.</li>
</ol>
<h2><a name="s8">8. FAQ</a></h2>
<p>Voici la section FAQ. Elle est en partie basée sur une vieille
FAQ NFS écrite par Alan Cox.</p>
<p>Si vous avez un problème pour monter un système de fichier,
voyez si votre problème est décrit dans la section ``Checklist
mount''.</p>
<ol>
<li>J'obtiens un tas d'erreurs ``stale nfs handle'' quand j'utilise
Linux comme serveur NFS.
<p>Cela est dû à une bogue dans quelques vieilles versions de nfsd.
Elle est corrigée à partir de nfs-server2.2beta16.</p>
</li>
<li>Quand j'essaye de monter le système de fichiers j'obtiens
<blockquote>
<pre><code>
can't register with portmap: system error on send
</code></pre></blockquote>
<p>Vous utilisez probablement un système Caldera. Il y a une bogue
dans les scripts rc. Contactez Caldera pour obtenir la
solution.</p>
</li>
<li>Pourquoi ne puis-je pas exécuter un fichier après l'avoir copié
sur le serveur NFS ?
<p>La raison est que nfsd cache les manipulations de fichiers pour
des raisons de performances (rappelons qu'il fonctionne dans
l'espace utilisateur). Ainsi, après une écriture le fichier peut ne
pas être fermé tout de suite, et tant qu'il est ouvert le noyau ne
vous autorisera pas à l'exécuter. Les nfsd plus récents que le
printemps 95 [Ndt : hum...] ferment les fichiers ouverts après
quelques secondes, les plus vieux pouvaient ne pas les relâcher
avant plusieurs jours...</p>
</li>
<li>Mes fichiers NFS sont tous en lecture seule.
<p>Le serveur NFS Linux est par défaut en lecture seule. Voyez les
sections ``Mountd et nfsd'' et ``Exporter des systèmes de fichier''
dans ce HOWTO et référez vous aux pages de manuel ``exports'' et
``nfsd''. Vous devrez modifier <code>/etc/exports</code>.</p>
</li>
<li>Je monte depuis un serveur NFS Linux, <code>ls</code> marche et
pourtant je ne peux pas lire ou écrire de fichiers.
<p>Sur les anciennes versions de Linux il faut monter un serveur
NFS avec <code>rsize=1024, wsize=1024</code>.</p>
</li>
<li>Je monte depuis un serveur NFS Linux avec une taille de bloc
comprise entre 3500 et 4000 et Linux crashe régulièrement.
<p>Bah alors ne le faites pas. Cela ne se produit pas avec les
noyaux 2.0 et 2.2 ni, autant que je sache avec les 1.2.</p>
</li>
<li>Est-ce que Linux peut utiliser NFS sur TCP ?
<p>Non, pas pour le moment.</p>
</li>
<li>J'ai des tonnes d'erreurs bizarres en essayant de monter depuis
un serveur Linux.
<p>Assurez-vous que vos utilisateurs sont dans 8 groupes au
maximum. C'est une limitation des vieux serveurs.</p>
</li>
<li>Quand je redémarre ma machine elle se bloque parfois en
essayant de démonter un serveur NFS bloqué (<em>hung</em>).
<p>Ne démontez <b>pas</b> les serveurs NFS en redémarrant ou
arrêtant la machine, ça ne créera pas de problèmes si vous ne le
faites pas. La commande est <code>umount -avt nonfs</code>.</p>
</li>
<li>Les clients NFS Linux sont très lents quand ils écrivent sur
des systèmes Sun ou BSD.
<p>Normalement les écritures NFS sont synchrones (vous pouvez le
désactiver si vous ne craignez pas de perdre des données). Les
noyaux dérivés de BSD ont tendance à ne pas savoir travailler avec
des petits blocs. Ainsi quand vous écrivez 4K de données depuis un
client Linux dans des paquets de 1K, BSD fait ceci :</p>
<blockquote>
<pre><code>
lit une page de 4K
traite 1K
écrit 4K sur le disque
lit une page de 4K
traite 1K
écrit 4K sur le disque
...
</code></pre></blockquote>
</li>
<li>Quand je connecte de nombreux clients à un serveur NFS Linux,
la performance diminue soudainement.
<p>Le protocole NFS utilise les paquets UDP fragmentés. Le noyau ne
conserve qu'un nombre limité de fragments de paquets incomplets
avant de commencer à jeter des paquets. En 2.2, ce paramètre est
réglable à l'exécution au moyen du système de fichier /proc :
<code>/proc/sys/net/ipv4/ipfrag_high_tresh</code> et
<code>ipfrag_low_tresh</code>. En 2.0 ce sont des constantes
définies à la compilation dans
<code>.../linux/net/ipv4/ip_fragment.c</code>,
<code>IPFRAG_HIGH_TRESH</code> et <code>IPFRAG_LOW_THRESH</code>.
La signification des ces valeurs est que quand la mémoire consommée
par les fragments UDP non réassemblés atteint
``ipfrag_high_thresh'' (en octets, 256K par défaut en 2.2.3 et
2.0.36) elle est ramenée à ``ipfrag_low_tresh'' d'un coup, en
jetant des fragments. Ainsi, si la borne supérieure (high_tresh)
est atteinte, la performance de votre serveur diminue
drastiquement.</p>
<p>256K est suffisant pour 30 clients. Si vous en avez 60, doublez
la valeur. Et doublez aussi la borne inférieure (low_tresh).</p>
</li>
<li>J'utilise Linux 2.2 (ou suivant) avec knfsd et ma machine AIX,
IRIX, Solaris, DEC-Unix, ... n'arrive pas à monter de volume.
<p>knfsd annonce qu'il implémente NFS version 3, alors que ce n'est
pas vrai. Utilisez l'option qui permet de stopper ces annonces, ou
mettez <code>"vers=2"</code> dans la liste d'options de montage de
votre client.</p>
</li>
<li>Ma machine AIX 4 n'arrive pas à monter depuis mon serveur NFS
Linux. Elle dit quelque chose du genre :
<blockquote>
<pre><code>
mount: 1831-011 access denied for server:/dir
mount: 1831-008 giving up on:
server:/dir
The file access permissions do not allow the specified action.
</code></pre></blockquote>
<p>AIX 4.2 utilise des ports réservés (<1024) pour NFS. AIX
4.2.1 et 4.3 peuvent utiliser d'autres ports, et essaient de monter
par NFS3, NFS/TCP et finalement NFS/UDP.</p>
<p>Ajouter</p>
<hr>
<pre>
nfso -o nfs_use_reserved_ports=1
</pre>
<hr>
<p>à la fin de <code>rc.tcpip</code> la forcera à utiliser les
ports réservés (truc fourni par Brian Gorka).</p>
</li>
</ol>
<h2><a name="s9">9. Exporter un système de fichiers</a></h2>
<p>Bien sur, la façon d'exporter les systèmes de fichiers par NFS
n'est pas toujours la même sur toutes les plate-formes. Linux et
Solaris 2 sont les plus déviants. Cette section liste de manière
superficielle la façon de procéder sur la plupart des systèmes. Si
votre système n'est pas traité ici, cherchez dans vos pages de
manuel. Les mot-clés sont : nfsd, system administration tool, rc
scripts, boot scripts, boot sequence, /etc/exports, exportfs.
J'utiliserai le même exemple tout au long de cette section :
comment exporter /mn/eris/local vers apollon en
lecture/écriture.</p>
<h2><a name="ss9.1">9.1 IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4
(Solaris 1), AIX</a></h2>
<p>Ces systèmes utilisent le format export traditionnel de Sun.
Dans <code>/etc/exports</code>, écrivez :</p>
<hr>
<pre>
/mn/eris/local -rw=apollon
</pre>
<hr>
<p>La documentation complète se trouve dans la page de manuel
<code>exports</code>. Après avoir édité le fichier, lancez
<code>exportfs -av</code> pour exporter les systèmes de
fichiers.</p>
<p>La rigueur de la syntaxe demandée par exportfs varie. Sur
certains systèmes vous verrez que la ligne précédente peut être
:</p>
<hr>
<pre>
/mn/eris/local apollon
</pre>
<hr>
<p>ou même quelque chose de dégénéré comme :</p>
<hr>
<pre>
/mn/eris/local rw=apollon
</pre>
<hr>
<p>Je recommande d'utiliser la syntaxe stricte. Il se peut que la
prochaine version de <code>exportfs</code> soit plus exigeante vis
à vis de la syntaxe et ne fonctionne plus.</p>
<h2><a name="ss9.2">9.2 Solaris 2</a></h2>
<p>Sun ont complètement réinventé la roue quand ils ont fait
Solaris 2, et donc c'est complètement différent des autres
systèmes. Il faut éditer le fichier <code>/etc/dfs/dfstab</code> et
y placer les commandes de partage (<em>share</em>) documentées dans
la page de manuel <code>share(1M)</code>, comme ceci :</p>
<hr>
<pre>
share -o rw=apollon -d "Eris Local" /mn/eris/local
</pre>
<hr>
<p>Lancez ensuite le programme <code>shareall</code> pour exporter
les systèmes de fichiers.</p>
<h2><a name="linuxtwotwo"></a> <a name="s10">10. NFS sous Linux
2.2</a></h2>
<p>Au moment où j'écris, la version courante du noyau est 2.2.12 et
utiliser NFS peut être assez pénible. Ou pas. J'ignore ce qu'il en
sera pour Linux 2.4.</p>
<p>La grosse nouveauté dans Linux 2.2 c'est le support d'un serveur
nfs dans le noyau, appelé knfsd 2.2. Ce type d'implémentation a des
avantages, principalement la rapidité, une machine Linux 2.2 avec
knfsd est un serveur NFS respectable. Vous pouvez cependant
toujours utiliser l'ancien nfsd avec Linux 2.2, et cela présente
quelques avantages aussi, dont la simplicité.</p>
<p>Si vous utilisez un paquetage noyau source ou binaire fabriqué
par quelqu'un comme RedHat (6.0 et suivantes), SuSE (6.1 et
suivantes il me semble) ou un autre intégrateur de système
professionnel ils auront probablement intégré complètement
``knfsd'' et vous n'avez pas de soucis à vous faire, cela marchera.
Pour l'essentiel. Jusqu'à ce que vous vouliez compiler un noyau
vous même. Si vous utilisez un noyau 2.2 standard (au moins jusqu'à
2.2.12) knfsd ne fonctionnera pas.</p>
<p>Pour le faire fonctionner vous même il vous faut le paquetage
knfsd de H.J. Lu. C'est un ensemble de patchs avec les utilitaires
requis pour 2.2 que Lu maintient bénévolement. Récupérez le depuis
votre miroir de noyau local, le site maître est <a href=
"ftp://ftp.kernel.org/pub/linux/devel/gcc/">ftp.kernel.org:/pub/linux/devel/gcc/</a>.
<b>Ce n'est pas destiné au grand public</b>. Si vous trouvez que
c'est trop compliqué, n'insistez pas et attentez qu'un paquetage
noyau soit disponible auprès de votre intégrateur (Redhat,
SuSE...).</p>
<p>Ne m'envoyez pas de question à ce sujet, je ne peux pas vous
aider, je n'ai aucun serveur basé sur knfsd qui tourne. Si vous
trouvez des erreurs ou omissions dans la documentation, écrivez-moi
et je corrigerai ce HOWTO.</p>
<p>Toujours là ? Ok. H.J. Lu annonce les nouvelles versions de son
paquetage sur la liste de diffusion linux-kernel, où il passe
d'autres choses liées à NFS dans Linux 2.2. Lisez-la.</p>
<h2><a name="ss10.1">10.1 Le client</a></h2>
<p>Le client est presque simple. Afin que les verrous
(<em>locks</em>) marchent correctement il faut que
<code>statd</code> (du paquetage knfsd) soit compilé, installé et
lancé depuis vos scripts de démarrage. Statd a besoin d'un
répertoire appelé <code>/var/lib/nfs</code> qu'il vous faudra créer
avant de le lancer (sans quoi il se termine immédiatement sans
message d'erreur).</p>
<p>Une fois que statd tourne vous pouvez utiliser le programme
<code>testlk</code> (dans <code>tools/locktest</code>) pour tester
si un verrou sur un fichier d'un volume monté par NFS fonctionne.
Ça devrait. S'il affiche <em>No locks available</em>, statd ne
fonctionne pas.</p>
<p>En fait, vous pouvez aussi vous passer des verrous (ce que je ne
recommande pas) en mettant <code>"nolock"</code> dans la liste des
options de montage.</p>
<p>Autant que je sache, c'est tout ce qu'il faut pour faire
fonctionner correctement le client.</p>
<p>Ah, si vous avez un serveur NFS Alpha ou Sparc vous verrez que
le client nfs de Linux 2.2 est vraiment de la merde. Les débits
sont extrêmement faibles, bien pire qu'avec Linux 2.0. Bien sur on
peut corriger le problème. Les noyaux 2.2 d'Alan Cox (un petit peu
plus expérimentaux que ceux de Linus) incluent un patch pour
améliorer la performance du client 2.2 avec un serveur Alpha ou
Sparc. Si vous voulez utiliser les noyaux d'Alan Cox, vous devriez
lire la liste de diffusion linux-kernel, et si c'est le cas vous
savez où les trouver. Le site de référence est <a href=
"http://www.uio.no/~trondmy/src/">http://www.uio.no/~trondmy/src/</a>,
au cas où vous voudriez essayer de l'appliquer à un noyau 2.2
standard. Ce patch ne sera probablement pas intégré dans Linux 2.4,
car il demande trop de changements dans le noyau pour être accepté
dans le cycle de développement actuel. Attendez Linux 2.5.</p>
<p><code>trondmy</code> propose des patchs pour utiliser NFS
version 3 avec Linux, et qui permettent aussi d'utiliser TCP comme
mécanisme de transport au lieu d'UDP. NFSv3 est très bien pour des
réseaux grande distance ou avec des taux de pertes non nuls, ou des
temps de latence élevés.</p>
<p>Si vous utilisez ces patchs, il vous faut lire linux-kernel, car
de sales bugs, qui mangent vos fichiers, sont parfois découverts.
Alors <b>soyez prudent</b>.</p>
<h2><a name="ss10.2">10.2 Le serveur</a></h2>
<p>Le serveur NFS de Linux 2.2 et suivants est appelé
<code>"knfsd"</code>. Il est difficile à configurer. Il faudra vous
débrouiller tout seul ou utiliser ce que SuSE, RedHat et autres
fournissent dans leurs paquetages 2.2. Désolé, mais vous pouvez
toujours utiliser l'ancien nfsd. Il est lent mais facile à
installer.</p>
<h2><a name="s11">11. Serveur NFS sur une disquette</a></h2>
<p>Cette section a été écrite par Ron Peters, <a href=
"mailto:rpeters@hevanet.com">rpeters@hevanet.com</a>. Elle explique
comment installer un serveur NFS en démarrant depuis une disquette.
L'objectif initial était de partager par NFS un cédérom d'une autre
machine pour installer Linux sur une machine sans lecteur de
cédérom.</p>
<h2><a name="ss11.1">11.1 Introduction</a></h2>
<p>Ce document a pour but d'aider ceux qui auront le même problème
que moi récemment. J'installais un serveur Linux sur une machine
sans lecteur de cédérom et sans moyen d'en installer un, à part
peut être un SCSI externe. Ce genre de situations sera sans doute
de plus en plus rare et ce document perdra donc de son intérêt,
mais j'aurais bien aimé l'avoir quand j'essayais d'installer ma
machine.</p>
<p>Vu que la machine n'avait pas de lecteur de cédérom, j'ai pensé
installer un serveur NFS pour Win95 afin de partager le lecteur de
cédérom juste le temps d'installer ma machine et de la mettre sur
le réseau. Je n'ai trouvé que deux produits (je ne citerai pas les
noms mais l'un est un freeware et l'autre avait une licence limitée
à 14 jours), l'un ne marcha pas ``clés en main'' et l'autre n'était
pas capable de gérer les conventions de nommage Linux suffisamment
bien pour mener à bien l'installation.</p>
<p>J'ai donc décidé d'essayer de redémarrer ma machine Win95 sous
Linux avec les disquettes boot/root et d'utiliser une disquette
supplémentaire pour installer un serveur NFS.</p>
<p>Cela a été remarquablement simple, la procédure est en fait
probablement plus simple que de lire cette introduction. Cependant,
je pense qu'il est intéressant de rassembler les information
nécessaires dans ce document.</p>
<h2><a name="ss11.2">11.2 Attentes</a></h2>
<p>J'ai utilisé les disquettes boot/root fournies dans une des
distributions de Slakware (InfoMagic developpers distributions). Le
noyau utilisé sur les disquettes était un 2.0.34, et les programmes
du serveur NFS venaient d'un serveur pour 2.0.30. J'ai toujours
utilisé la méthode d'installation Slakware, non pas qu'elle soit
plus facile ou meilleure ou pire, mais simplement qu'elle m'est
familière et que je n'ai jamais pris le temps d'apprendre à en
utiliser une autre.</p>
<p>Je ne pense pas qu'il puisse y avoir beaucoup de problèmes liés
à la version du système. Je recommanderais simplement d'utiliser un
système relativement récent, ce qui devrait être le cas si vous
utilisez les disquettes boot/root de la distribution à
installer.</p>
<h2><a name="ss11.3">11.3 Matériel nécessaire</a></h2>
<ul>
<li>Une machine et une disquette de boot supportant le réseau. La
machine devant jouer le rôle du serveur NFS doit avoir une carte
réseau reconnue pendant le démarrage. Pour plus d'informations,
voir le HOWTO sur le réseau (NET4-HOWTO).</li>
<li>Une deuxième disquette contenant rpc.portmap, rpc.mountd et
rpc.nfsd. Vous pouvez trouver facilement ces fichiers par un
ftpsearch sur le ouèbe.</li>
<li>Un cd (par exemple) Slakware (ou autre).</li>
</ul>
<h2><a name="ss11.4">11.4 Configuration du serveur</a></h2>
<h3>Démarrer le serveur NFS temporaire</h3>
<p>Démarrez la machine qui sera serveur NFS depuis la disquette de
démarrage et assurez-vous que la carte réseau est reconnue, de même
que le lecteur de cédérom. Dans la suite je suppose que la carte
réseau en question est eth0.</p>
<h3>Monter la disquette et le cédérom</h3>
<p>Une fois que le système est démarré, vous n'avez plus besoin des
disquette boot/root, le système étant complètement installé en
disque mémoire. Remplacez la disquette root par la disquette
supplémentaire, et montez la :</p>
<p><code>mount /dev/fd0 /floppy</code></p>
<p>Ceci fonctionne pour une disquette avec un système de fichiers
ext2. J'imagine que la disquette pourrait utiliser un système de
fichiers MSDOS mais je n'ai pas essayé. Je suppose que cela serait
plus simple que de faire une image disque. Dans ce cas, il faudrait
utiliser <code>mount -t msdos ...etc</code>.</p>
<p>Montez le cédérom :</p>
<p><code>mount -t iso9660 /dev/hdc /cdrom</code></p>
<p>J'ai utilisé les périphériques disquette et cédérom, on peut en
utiliser d'autres selon ce que l'on veut faire. Les points de
montage /floppy et /cdrom doivent exister sur l'image de la
disquette root. Si ce n'est pas le cas, créez-les, ou bien vous
pouvez utiliser n'importe quels autres points de montage.</p>
<h3>Configurer le réseau sur le serveur provisoire</h3>
<p>Il faut maintenant configurer le serveur NFS et le réseau. Il
n'y a que quelques commandes à lancer, et quelques informations
qu'il vous faudra rassembler auparavant (je donne ici des valeurs
d'exemple) :</p>
<p>IPADDR:172.16.5.100 #L'adresse du serveur temporaire.</p>
<p>NETMASK:255.255.255.0 #Le masque de réseau (netmask).</p>
<p>BROADCAST:172.16.5.255 #L'adresse de diffusion sur le réseau</p>
<p>ETHNETWORK:172.16.5.0 #L'adresse réseau</p>
<p>GATEWAY:172.16.5.251 #Nécessaire seulement si vous avez une
passerelle. Si c'est le cas, vous le savez. La plupart des réseau
``à la maison'' n'en ont pas.</p>
<p>Les commandes pour se connecter au réseau (utiliser les valeurs
données ci-dessus) :</p>
<p><code>ifconfig eth0 inet IPADDR arp netmask NETMASK broadcast
BROADCAST</code></p>
<p><code>route add -net ETHNETWORK netmask NETMASK eth0</code></p>
<p>Celle-ci uniquement si vous avez une passerelle et que vous
devrez la traverser :</p>
<p><code>route add default gw GATEWAY netmask 0.0.0.0
eth0</code></p>
<p>Si tout va bien, vous êtes maintenant sur le réseau et devriez
pouvoir faire des <code>ping</code> sur les autres machines.</p>
<h3>Configurer le volume NFS</h3>
<p>Choisissez le répertoire à partager. Dans mon exemple, c'était
<code>/cdrom/slakware</code>. Placez-le dans le fichier
<code>/etc/exports</code> :</p>
<p><code>echo "/cdrom/slakware" > /etc/exports</code></p>
<h2><a name="ss11.5">11.5 Lancer le serveur NFS</a></h2>
<p>Allez dans <code>/floppy/usr/bin</code> et lancez :</p>
<p><code>./rpc.portmap</code></p>
<p><code>./rpc.mountd</code></p>
<p><code>./rpc.nfsd</code></p>
<h3>Prêt, commencez l'installation</h3>
<p>Normalement, le répertoire <code>/cdrom/slakware</code> est
maintenant partageable. Démarrez votre machine (celle à installer)
depuis les disquettes boot/root (j'ai utilisé les mêmes qui ont
servi à démarrer le serveur) et commencez l'installation.</p>
<p>Quand il faut choisir le média source à utiliser, choisissez
``serveur NFS''. Il vous demandera l'adresse IP du serveur, qui est
celle que vous avez appelé IPADDR pour le serveur. Il vous faut
aussi donner le répertoire à monter, qui est celui que vous avez
indiqué dans le fichier <code>/etc/exports</code> du serveur.</p>
<p>Le volume NFS devrait maintenant être monté, surveillez
l'apparition de messages d'erreur. Si tout va bien, continuez
l'installation.</p>
<h2><a name="ss11.6">11.6 Problèmes</a></h2>
<h3>Rien ici pour l'instant</h3>
<p>Je n'ai rien à dire à ce sujet pour le moment. Peut être si des
gens utilisent cette procédure, on aura des choses à ajouter.</p>
<h2><a name="ss11.7">11.7 À faire</a></h2>
<h3>Disquette DOS</h3>
<p>Voir si la disquette supplémentaire peut être au format DOS.</p>
<h3>Commandes RPC</h3>
<p>Vérifiez l'ordre dans lequel lancer les commandes rpc.* et si
toutes sont nécessaires.</p>
<h2><a name="s12">12. PC-NFS</a></h2>
<p>Vous ne voulez pas utiliser PC-NFS, mais plutôt samba.</p>
<p>Samba est bien meilleur que PC-NFS, il fonctionne avec
``Windows3 for Workgroups'' et les versions suivantes de Windows.
Il est plus rapide et plus sur. Utilisez plutôt samba.</p>
</body>
</html>
|