NFS HOWTO <author>Nicolai Langfeldt <tt/janl@linpro.no/ <date>v1.0, 1 Οκτωβρίου 1999 <abstract> Πώς να στήνουμε NFS servers και clients. </abstract> <toc> <sect>Προλεγόμενα <sect1>Νομικά θέματα <p>(C)opyright 1997-1999 Nicolai Langfeldt και Ron Peters. Μην τροποποιείτε το copyright. Διανείμετε ελεύθερα το κείμενο, αλλά διατηρήστε αυτήν εδώ την παράγραφο. Η ενότητα με τις FAQ (συχνές ερωτήσεις) βασίζεται σε NFS FAQs, που συγκέντρωσε o Alan Cox. Η ενότητα με τη λίστα ελέγχου βασίζεται σε μιά λίστα προβλημάτων στο mount, που επιμελήθηκε η IBM Corporation. Η ενότητα nfs-server-on-a-floppy γράφηκε από τον by Ron Peters. <sect1>Αποκήρυξη <p>Ούτε οι Nicolai Langfeldt και Ron Peters, ούτε οι εργοδότες τους, ή οποιοσδήποτε άλλος, μπορούν ν' αναλάβουν οποιαδήποτε ευθύνη γιά το τί θα μπορούσε να συμβεί, εάν ακολουθήσετε τις οδηγίες αυτού του κειμένου. Εάν σε οποιαδήποτε περίπτωση προτιμήσετε ν' ακολουθήσετε τις οδηγίες, καλή τύχη! <sect1>Ανάδραση <p>Επειδή αυτό ποτέ δεν θα είναι ένα οριστικό κείμενο, παρακαλώ στείλτε μου e-mail σχετικά με τα προβλήματά σας και τις επιτυχείς λύσεις σας, διότι μπορούν να κάνουν αυτό το κείμενο ένα καλύτερο HOWTO. Παρακαλώ, στείλτε χρήματα, σχόλια, και/ή ερωτήσεις στο <htmlurl url="mailto:janl@math.uio.no" name="janl@math.uio.no">, ή το <htmlurl url="mailto:rpeters@hevanet.com" name="rpeters@hevanet.com"> , σχετικά με τον NFS server επάνω σε μιά δισκέτα. Αν στείλετε e-mail και επιθυμείτε απάντηση, παρακαλώ δείξτε ευγενικά κατανόηση στο ότι η διεύθυνσή σας πρέπει να είναι σωστή και να δουλεύει. Δεν έχετε ιδέα πόσες απαντήσεις μας επιστράφηκαν από τον e-mail server. <sect1>Άλλα θέματα <p>Αν θέλετε να μεταφράσετε αυτό το HOWTO, παρακαλώ ειδοποιήστε με, ώστε να κρατήσω σημείωση σε πόσες γλώσσες με διαβάζουν! :-) <p>Κατάρες και ευχαριστίες στον Olaf Kirch, που πρώτα μ' έβαλε να γράψω τούτο εδώ, και μετά έδωσε καλές συμβουλές γιά το κείμενο! :-) <sect1>Αφιέρωση <p>Αυτό το HOWTO αφιερώνεται στην Anne Line Norheim Langfeldt. Αν και μάλλον δεν πρόκειται να το διαβάσει ποτέ, διότι δεν είναι τέτοιος τύπος γυναίκας. - Nicolai <sect>README.first<label id="intro"> <p>Το NFS, δηλ. το Network File System, έχει τρία σημαντικά χαρακτηριστικά : <itemize> <item>Καθιστά δυνατή την κοινή χρήση (sharing) των αρχείων σ' ένα δίκτυο. <item>Τον περισσότερο χρόνο δουλεύει αρκετά καλά. <item>Ανοίγει μιά κονσέρβα κινδύνων γιά την ασφάλεια του συστήματος, τους οποίους γνωρίζουν πολύ καλά οι crackers, και τους εκμεταλλεύονται εύκολα γιά να κερδίσουν πρόσβαση (ανάγνωσης, εγγραφής, σβησίματος) σε όλα τα αρχεία σας. </itemize> <p>Θα πω κάτι επάνω και στα δύο θέματα, σ' αυτό το HOWTO. Παρακαλώ, βεβαιωθείτε ότι διαβάσατε την ενότητα αυτού του κειμένου που μιλάει γιά την ασφάλεια, και θα είσαστε τρωτοί σε λιγότερους ανόητους κινδύνους γιά την ασφάλεια του συστήματος. Το κείμενο γιά την ασφάλεια μερικές φορές θα είναι αρκετά γεμάτο με τεχνικούς όρους, και θ' απαιτεί κάποιες γνώσεις γιά IP's, δικτύωση, και τη σχετική ορολογία. Αν δεν αναγνωρίζετε τους όρους, είτε ρίξτε μιά ματιά στο Networking HOWTO, ή βρείτε κάποιο βιβλίο γιά administration δικτύου με TCP/IP, ώστε να εξοικειωθείτε με το TCP/IP. Ούτως ή άλλως, αυτό είναι μιά καλή ιδέα, αν είσαστε SysAdmin σε Η/Υ με UNIX/Linux. Ένα πολύ καλό βιβλίο γιά το θέμα είναι το <em>TCP/IP Network Administration</em> του Craig Hunt, έκδοση O'Reilly & Associates, Inc. Και αφού το διαβάσετε και το κατανοήσετε, η αξία σας στην αγορά εργασίας θα είναι υψηλότερη - θα δείτε ότι δεν θα χάσετε! ;-) <p>Υπάρχουν δύο ενότητες του κειμένου, που θα σας βοηθήσουν να λύσετε προβλήματα του NFS, που τιτλοφορούνται <em/Mount Checklist/ και <em/FAQs/. Παρακαλώ, ξαναδιαβάστε τα, αν κάτι δεν δουλεύει όπως περιμένετε. <p>Το site του nfsd γιά το Linux 2.0 είναι το : <htmlurl name="ftp.mathematik.th-darmstadt.de:/pub/linux/okir" url="ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/">, σε περίπτωση που θέλετε να το πάρετε και να το κάνετε compile εσείς. <p>Γιά πληροφορίες σχετικά με το NFS σε Linux 2.2, παρακαλούμε διαβάστε το : <ref id="linuxtwotwo" name="Το NFS στο Linux 2.2">. <sect>Στήνοντας έναν NFS server<label id="nfs-server"> <sect1>Προαπαιτούμενα <p>Πριν συνεχίσετε την ανάγνωση αυτού εδώ του HOWTO, θα χρειαστεί να γνωρίζετε πώς να κάνετε telnet μεταξύ server και client, και προς τις δύο κατευθύνσεις. Αν το telnet δεν δουλεύει, ξανακοιτάξτε το Networking/NET-3 HOWTO, και στήστε τη δικτύωση σωστά. <sect1>Πρώτο βήμα <p>Πριν μπορέσουμε να κάνουμε ο,τιδήποτε, χρειαζόμαστε ένα στήσιμο γιά τον NFS server. Αν είσαστε μέλος ενός εταιρικού ή πανεπιστημιακού δικτύου, πιθανότατα θα βρείτε κάμποσους NFS servers ήδη στημένους. Αν οι SysAdmins σας αφήσουν να έχετε πρόσβαση σ' αυτούς τους Η/Υ, ή αν διαβάζετε αυτό το HOWTO γιά ν' αποκτήσετε πρόσβαση σ' έναν τέτοιο Η/Υ, προφανώς δεν χρειάζεται να διαβάσετε αυτό το κομμάτι, και μπορείτε απλά να πάτε πιο κάτω, στο <ref id="nfs-client" name="Ρυθμίζοντας τον NFS client"> . <p>Αν θέλετε να στήσετε έναν Η/Υ που δεν βασίζεται στο Linux σαν server, πρέπει να διαβάσετε τα εγχειρίδιά του, γιά ν' ανακαλύψετε πώς ενεργοποιείται το NFS serving και το export των filesystems μέσω του NFS. Υπάρχει μιά χωριστή ενότητα σ' αυτό εδώ το HowTo, γιά το πώς γίνεται αυτή η δουλειά σε διαφορετικά ΛΣ. Αφού, λοιπόν, έχετε ξεκαθαρίσει όλα τα παραπάνω, μπορείτε να συνεχίσετε με την ανάγνωση της επόμενης ενότητας του παρόντος HowTo. 'Η να διαβάσετε περισσότερα σ' αυτό το κομμάτι, αφού κάποια από τα πράγματα που θα πω είναι σχετικά με το θέμα, αδιάφορο τί Η/Υ χρησιμοποιείτε γιά server. <p>Αν βιάζεστε, παρακαλώ διαβάστε το <ref id="linuxtwotwo" name="Το NFS στο Linux 2.2"> , πριν συνεχίσετε να διαβάζετε εδώ. <p>Όσοι συνεχίζετε το διάβασμα, θα χρειαστεί να ρυθμίσετε μερικά προγράμματα. <sect1>Ο portmapper<label id="portmapper"> <p>Ο portmapper στο Linux ονομάζεται είτε <tt/portmap/ , ή <tt/rpc.portmap/. Η σχετική σελίδα της εντολής man στον Η/Υ μου λέει ότι πρόκειται γιά έναν &dquot;χάρτη θυρών DARPA προς αριθμούς προγραμμάτων RPC&dquot;. Είναι η πρώτη τρύπα ασφάλειας που θ' ανοίξετε μ' αυτό εδώ το HowTo. Η περιγραφή γιά το πώς θα την κλείσετε, βρίσκεται στο <ref id="nfs-security" name="Ασφάλεια και NFS">. Το οποίο και σας παροτρύνω ξανά να διαβάσετε. <p>Ξεκινήστε τον portmapper. Ονομάζεται είτε <tt/portmap/ , ή <tt/rpc.portmap/ , και πρέπει να βρίσκεται μέσα στο directory <tt>/usr/sbin</tt> (που σε μερικούς Η/Υ λέγεται rpcbind). Μπορείτε να τον ξεκινήσετε με το χέρι τώρα, αλλά πρέπει να τον ξεκινάτε και κάθε φορά που bootάρετε τον Η/Υ σας, άρα πρέπει να φτιάξετε ή να διορθώσετε τα rc scripts. Αυτά τα scripts εξηγούνται λεπτομερέστερα στη σελίδα man γιά την εντολή init, και συνήθως βρίσκονται στα dirs <tt>/etc/rc.d</tt>, <tt>/etc/init.d</tt> , ή <tt>/etc/rc.d/init.d</tt>. Εάν υπάρχει ένα script με όνομα κάτι σαν <tt/inet/ , είναι πιθανότατα το script που ζητάτε γιά διόρθωση. Αλλά, όσα θα γράψετε ή θα κάνετε, βρίσκονται έξω από τα όρια του παρόντος HowTo. Ξεκινήστε τον portmap, και ελέγξτε ότι δουλεύει, τρέχοντας : <tt/ps aux/ και μετά <tt/rpcinfo -p/. Δουλεύει; Καλώς. <p>Α, κάτι ακόμη : Η από μακριά πρόσβαση στον portmapper σας ρυθμίζεται από τα περιεχόμενα των αρχείων <tt>/etc/hosts.allow</tt> και <tt>/etc/hosts.deny</tt> . Αν αποτύχει το <tt/rpcinfo -p/ , αλλά ο portmapper σας τρέχει, παρακαλώ εξετάστε τα συγκεκριμένα αρχεία. Δες το <ref id="nfs-security" name="Ασφάλεια και NFS"> , γιά λεπτομέρειες επάνω σ' αυτά τα αρχεία. <sect1>Οι mountd και nfsd<label id="nfsd"> <p>Τα επόμενα προγράμματα που πρέπει να βάλουμε να τρέχουν είναι οι mountd και nfsd. Αλλά πρώτα, θα διορθώσουμε ένα άλλο αρχείο, αυτή η φορά το <tt>/etc/exports</tt> . Ας πούμε ότι θέλω το filesystem <tt>/mn/eris/local</tt> , το οποίο υπάρχει επάνω στον Η/Υ <tt>eris</tt> , να είναι διαθέσιμο στον Η/Υ <tt/apollon/. Τότε, θα έβαζα την εξής γραμμή στο αρχείο <tt>/etc/exports</tt> της eris : <code>/mn/eris/local apollon(rw)</code> Η παραπάνω γραμμή δίνει στον apollon πρόσβαση read/write στο <tt>/mn/eris/local</tt>. Αντί γιά <tt/rw/ , θα μπορούσε και να λέει <tt/ro/, που σημαίνει &dquot;μόνο γιά διάβασμα&dquot; (read only - αν δεν γράψετε τίποτε, το default είναι read only). Υπάρχουν κι άλλες επιλογές που μπορείτε να δώσετε, και παρακάτω θα συζητήσω μερικές σχετιζόμενες με την ασφάλεια. Πάντως, όλες απαριθμούνται στη σελίδα man γιά το <tt/exports/ , την οποία πρέπει να διαβάσετε τουλάχιστον μία φορά στη ζωή σας. Επίσης, υπάρχουν καλύτεροι τρόποι, από το να γράψετε στο αρχείο exports ολόκληρη τη λίστα των hosts. Πχ μπορείτε να χρησιμοποιήσετε ομάδες (groups) στο δίκτυο, αν τρέχετε το NIS (ή NYS - το NIS ήτανε γνωστό ως &dquot;Κίτρινες Σελίδες&dquot;, Yellow Pages, YP), και πάντα να βάλετε wildcards γιά τα domains και τα υποδίκτυα (subnets) των IP's, περιγράφοντας τους hosts που επιτρέπεται να φορτώσουν κάτι. Αλλά πρέπει και να σκεφθείτε ποιός είναι πιθανό να αποκτήσει μη εξουσιοδοτημένη πρόσβαση στον server, σε περίπτωση που χρησιμοποιείτε ομαδικές εξουσιοδοτήσεις. <bf/Σημείωση : Το αρχείο exports δεν συντάσσεται με τον ίδιο τρόπο, όπως σε άλλα *nix's./ Υπάρχει ξεχωριστή ενότητα στο παρόν HOWTO σχετικά με τα αρχεία <tt/exports/ των άλλων *nix's. <p>Τώρα, πρέπει να ξεκινήσουμε τον mountd (που ίσως λέγεται και <tt/rpc.mountd/), και μετά τον nfsd (ίσως λέγεται και <tt/rpc.nfsd/). Και οι δύο θα διαβάσουν το αρχείο exports. <p>Αν διορθώσετε το <tt>/etc/exports</tt> , θα πρέπει να βεβαιωθείτε ότι οι nfsd και mountd γνωρίζουν ότι το αρχείο άλλαξε. Ο παραδοσιακός τρόπος είναι να τρέξετε το <tt/exportfs/, όμως πολλές διανομές του Linux δεν διαθέτουν πρόγραμμα exportfs. Αν ούτε η δική σας διανομή διαθέτει, μπορείτε να εγκαταστήσετε το εξής script στον Η/Υ σας : <code> #!/bin/sh killall -HUP /usr/sbin/rpc.mountd killall -HUP /usr/sbin/rpc.nfsd echo re-exported file systems </code> <p>Σώστε το πχ στο <tt>/usr/sbin/exportfs</tt>, και μην ξεχάσετε να δώσετε <tt/chmod a+rx/ . Τώρα, κάθε φορά που αλλάζετε το exports αρχείο σας, μετά τρέξτε το exportfs ως root. <p>Τώρα, ελέγξτε ότι οι mountd και nfsd τρέχουν σωστά. Πρώτα με το <tt/rpcinfo -p/. Αυτό πρέπει να δείξει κάτι, όπως το παρακάτω : <code> 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 </code> Όπως βλέπετε, ο portmapper έχει αναγγείλει τις υπηρεσίες (services) του, όπως και οι mountd και nfsd. <p>Αν λάβετε μήνυμα <tt>rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused</tt>, <tt>RPC_PROG_NOT_REGISTERED</tt>, ή κάτι παρόμοιο, τότε ο portmapper δεν τρέχει. 'Η, έχετε κάποιες γραμμές στα αρχεία <tt>/etc/hosts.{allow,deny}</tt> , που απαγορεύουν στον portmapper ν' απαντήσει. Παρακαλώ διαβάστε το <ref id="nfs-security" name="Ασφάλεια και NFS"> γιά λεπτομέρειες επάνω σ' αυτά τα αρχεία. Αν λάβετε το μήνυμα <tt>No remote programs registered.</tt> , τότε είτε ο portmapper δεν θέλει κουβέντα με σας, ή κάποια σύνδεση έσπασε. Κάντε kill στους nfsd και mountd, καθώς και στον portmapper, και ξαναπροσπαθήστε απ' την αρχή. <p>Αφού ελέγξετε το ότι ο portmapper αναφέρει τις υπηρεσίες (services) του, μπορείτε να δοκιμάσετε και με το ps. Ο portmapper θα συνεχίσει ν' αναφέρει υπηρεσίες, ακόμη και αφού έχουν κρασάρει τα προγράμματα που τις επεκτείνουν. Αρα, ένας έλεγχος στο ps είναι κάτι απαραίτητο, αν φανεί ότι κάποια σύνδεση δεν δουλεύει. <p>Φυσικά, πρέπει να τροποποιήσετε τα αρχεία rc του Η/Υ σας, γιά να ξεκινήσουν με το bootάρισμα οι mountd και nfsd, καθώς και ο portmapper. Είναι πολύ πιθανό ότι τα σχετικά scripts ήδη υπάρχουν στον Η/Υ σας, απλά πρέπει να βγάλετε τα σχόλια από τις σημαντικές γραμμές, ή να ενεργοποιήσετε τον Η/Υ στα σωστά επίπεδα init run. <p>Οι σελίδες man, με τις οποίες πρέπει να είσαστε εξοικειωμένοι σ' αυτό το σημείο : portmap, mountd, nfsd, και exports. <p>Λοιπόν, αν τα κάνατε όλα ακριβώς όπως σας τα είπα, είσαστε έτοιμοι να ξεκινήσετε τον NFS client. <sect>Ρυθμίζοντας τον NFS client<label id="nfs-client"> <p>Πρώτα θα χρειαστείτε έναν πυρήνα με το NFS filesystem είτε compiled μέσα του, ή διαθέσιμο σαν module. Αυτό κανονίζεται πριν κάνετε compile στον πυρήνα. Εάν ποτέ δεν έχετε κάνει compile έναν πυρήνα, πιθανόν να χρειαστεί να διαβάσετε και να κατανοήσετε το Kernel HOWTO. Αν χρησιμοποιείτε κάποια cool distribution (σαν την RedHat) και ποτέ δεν ανακατευτήκατε με τον πυρήνα, ή με τα modules (και άρα δεν την καταστρέψατε ;-) ), το nfs πολύ πιθανόν να είναι αυτόματα διαθέσιμο. <p>Μπορείτε τώρα, στο root prompt, να δώσετε μιά κατάλληλη εντολή mount, και θα εμφανιστεί το filesystem. Συνεχίζοντας το παράδειγμα της προηγούμενης ενότητας, θέλουμε να κάνουμε mount το directory <tt>/mn/eris/local</tt> από τον Η/Υ eris. Αυτό γίνεται με την εξής εντολή : <code>mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt</code> <p>(Θα επιστρέψουμε στις παραμέτρους rsize και wsize.) Το filesystem είναι τώρα διαθέσιμο στο dir <tt>/mnt</tt> , και μπορείτε να κάνετε <tt/cd/ σ' αυτό, και μετά <tt/ls/ , και να δείτε τα αρχεία ένα-ένα. Θα παρατηρήσετε ότι το nfs δεν είναι τόσο γρήγορο, όσο ένα τοπικό file system, αλλά είναι πολύ βολικότερο από το ftp. Εάν, αντί να κάνετε επιτυχές mount στο filesystem, το mount δίνει ένα μήνυμα λάθους, σαν αυτό : <tt>mount: eris:/mn/eris/local failed, reason given by server: Permission denied</tt> , τότε ή το αρχείο exports έχει λάθη, ή ξεχάσατε να τρέξετε το exportfs αφού διορθώσατε το αρχείο exports. Αν το μήνυμα λέει : <tt>mount clntudp_create: RPC: Program not registered</tt> , αυτό σημαίνει ότι ο nfsd ή ο mountd δεν τρέχουνε στον server. 'Η, ότι έχετε το πρόβλημα που αναφέραμε παραπάνω, με τα αρχεία <tt/hosts.{allow,deny}/ . <p>Γιά ν' απαλλαγείτε από το filesystem, μπορείτε να δώσετε : <code>umount /mnt</code> <p>Γιά να κάνει ο Η/Υ mount ένα nfs filesystem με το bootάρισμα, διορθώστε το <tt>/etc/fstab</tt> με τον συνηθισμένο τρόπο. Στο παράδειγμά μας, απαιτείται μιά γραμμή όπως η παρακάτω : <code> # device mountpoint fs-type options dump fsckorder ... eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0 ... </code> <p>Σχεδόν τελειώσαμε. Όμως, θα παρακαλούσα να συνεχίσετε το διάβασμα. <sect1>Επιλογές στο mount <p>Υπάρχουν μερικές επιλογές, που πρέπει να σκεφθείτε αν θα τις προσθέσετε. Αυτές ρυθμίζουν τον τρόπο, με τον οποίο ένας NFS client χειρίζεται ένα κρασάρισμα του server, ή μιά ξαφνική πτώση του δικτύου. Ένα από τα όμορφα πράγματα σχετικά με το NFS, είναι ότι μπορεί άνετα να χειριστεί τέτοιες καταστάσεις, αν ρυθμίσετε σωστά τους clients. Υπάρχουν δύο διαφορετικοί τρόποι χειρισμού σφάλματος : <descrip> <tag/soft/ Ο NFS client θα δώσει μήνυμα λάθους στη διεργασία (process) που πάει να διαβάσει ένα αρχείο σ' ένα NFS filesystem. Μερικά προγράμματα το χειρίζονται αυτό με ψυχραιμία, μερικά όχι. Δεν μπορώ να σας συστήσω να χρησιμοποιήσετε τη συγκεκριμένη ρύθμιση, διότι είναι συνταγή γιά να πάρετε χαλασμένα αρχεία και χαμένα δεδομένα. Αυτή τη ρύθμιση πρέπει να την αποφεύγετε ειδικά σε δίσκους e-mail servers - εννοώ, αν εκτιμάτε τα e-mails σας. <tag/hard/ Το πρόγραμμα που πάει να διαβάσει ένα αρχείο σε NFS filesystem, θα κρεμάσει, όταν κρασάρει ο server. Η διεργασία αυτή δεν μπορεί να διακοπεί, ή να της κάνετε kill, εκτός κι αν επίσης προσδιορίσετε το <tt/intr/. Τη στιγμή που ο NFS server επανέλθει on-line, το πρόγραμμα θα συνεχίσει απερίσπαστο από εκεί, όπου ήταν, και πιθανότατα αυτό είναι ό,τι ακριβώς επιθυμείτε. Συνιστώ να χρησιμοποιείτε <tt/hard,intr/ σε όλα τα NFS filesystems. </descrip> <p>Συνεχίζοντας με το προηγούμενο παράδειγμα, η νέα γραμμή στο fstab σας είναι κάπως έτσι : <code> # device mountpoint fs-type options dump fsckorder ... eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0 ... </code> <sect1>Βελτιστοποιώντας το NFS<label id="optimizing"> <p>Συνήθως, αν δεν καθορίζονται οι παράμετροι rsize και wsize, το NFS διαβάζει και γράφει σε κομμάτια των 4096 ή 8192 bytes. Μερικοί συνδυασμοί πυρήνων Linux και καρτών δικτύου δεν μπορούν να χειριστούν τόσο μεγάλα κομμάτια, και σε κάποιες περιπτώσεις αυτή μπορεί απλά να μην είναι η βέλτιστη ρύθμιση. Έτσι, πρέπει να πειραματιστούμε, γιά να βρούμε τα rsize και wsize που δουλεύουνε, και είναι τα ταχύτερα δυνατά. Μπορείτε να δοκιμάσετε την ταχύτητα των ρυθμίσεών σας με μερικές απλές εντολές. Με δεδομένα την παραπάνω εντολή mount, και το ότι μπορείτε να γράψετε στον δίσκο, μπορείτε να κάνετε το εξής γιά δοκιμή της απόδοσης σειριακής εγγραφής : <code>time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096</code> <p>Αυτό παράγει ένα αρχείο 64MB με μηδενικά bytes (αρκετά μεγάλο, ώστε το κρασάρισμα να μη συνεισφέρει σημαντικά στην απόδοση που μετράμε - χρησιμοποιείστε μεγαλύτερο αρχείο, αν έχετε πολλή μνήμη). Επαναλάβετε μιά-δυο (5-10;) φορές, και βγάλτε τον μέσο όρο των χρόνων. Εδώ μας ενδιαφέρει περισσότερο ο &dquot;ωρολογιακός&dquot; χρόνος που πέρασε. Αμέσως μετά, μπορείτε να δοκιμάσετε την απόδοση ανάγνωσης, διαβάζοντας το ίδιο αρχείο : <code>time dd if=/mnt/testfile of=/dev/null bs=16k</code> Επαναλάβετε καναδυό φορές, και βγάλτε μέσο όρο. Μετά κάντε umount, και mount ξανά με μεγαλύτερα rsize και wsize. Πιθανότατα πρέπει να είναι πολλαπλάσια του 1024 και όχι μεγαλύτερα των 16384 bytes, αφού αυτό είναι το μέγιστο μέγεθος στη version 2 του NFS. Αμέσως μετά το mount με μεγαλύτερες τιμές, κάντε cd στο mounted filesystem, και κάντε πχ ls. Εξερευνήστε λιγάκι το filesystem, γιά να βεβαιωθείτε ότι όλα είναι όπως πρέπει. Αν τα rsize/wsize είναι πολύ μεγάλα, τα συμπτώματα είναι <em/πολύ/ παράξενα, και όχι 100% εμφανή. Ένα τυπικό σύμπτωμα είναι οι μη πλήρεις λίστες αρχείων όταν κάνουμε ls, και ταυτόχρονα κανένα μήνυμα λάθους. 'Η, να αποτυγχάνει μυστηριωδώς η ανάγνωση αρχείων, πάλι χωρίς μήνυμα λάθους. Αφού βεβαιωθείτε ότι τα συγκεκριμένα rsize/wsize δουλεύουν απροβλημάτιστα, μπορείτε να ξανακάνετε τις δοκιμές ταχύτητας. Οι διαφορετικές πλατφόρμες server είναι πιθανό να έχουν διαφορετικές βέλτιστες τιμές. Το SunOS και το Solaris φημίζονται ότι είναι πολύ ταχύτερα με κομμάτια των 4096 bytes, παρά με ο,τιδήποτε άλλο. <p>Οι νεώτεροι πυρήνες του Linux (από τον 1.3 και μετά) κάνουν προανάγνωση γιά rsizes μεγαλύτερα ή ίσα με τη &dquot;σελίδα&dquot; μνήμης του Η/Υ. (Σε CPUs της Intel, το μέγεθος σελίδας μνήμης είναι 4096 bytes.) Η προανάγνωση αυξάνει <em/σημαντικά/ την απόδοση ανάγνωσης του NFS. Αρα, σε Η/Υ με CPU Intel, θα χρειαστείτε - εάν αυτό, βέβαια, είναι δυνατόν - rsize των 4096 bytes. <p>Θυμηθείτε να διορθώσετε το <tt>/etc/fstab</tt> , ώστε να περάσετε μέσα τα βέλτιστα rsize/wsize που βρήκατε. <p>Ένα κολπάκι γιά ν' αυξήσετε την απόδοση εγγραφής του NFS, είναι να απενεργοποιήσετε τις σύγχρονες (synchronous) εγγραφές στον server. Οι προδιαγραφές του NFS λένε ότι οι απαιτήσεις γιά κατά NFS εγγραφές δεν θεωρούνται τελειωμένες, πριν τα εγγραφόμενα δεδομένα βρεθούν σε μέσο που τα κρατάει διαρκώς (συνήθως τον δίσκο). Αυτό περιορίζει κάπως την απόδοση εγγραφής, άρα οι ασύγχρονες (asynchronous) εγγραφές θα επιταχύνουν λιγάκι τη διαδικασία της κατά NFS εγγραφής. Ο nfsd του Linux δεν κάνει σύγχρονες εγγραφές, επειδή δεν του το επιτρέπει το filesystem του Linux. Όμως, σε servers που δεν στηρίζονται στο Linux, μπορείτε ν' αυξήσετε την απόδοση μ' αυτόν τον τρόπο, εισάγοντας στο exports αρχείο σας τη γραμμή : <code>/dir -async,access=linuxbox</code> <p>ή κάποια παρόμοια. Παρακαλώ, διαβάστε την τεκμηρίωση (ίσως στη σελίδα man;) του Η/Υ σας γιά το exports. Μόνο σημειώστε ότι έτσι αυξάνεται και ο κίνδυνος απώλειας δεδομένων. <sect>Το NFS μέσω αργών γραμμών<label id="slow-lines"> <p>Οι αργές γραμμές περιλαμβάνουν τα modems, το ISDN, και πιθανότατα άλλες συνδέσεις μακρών αποστάσεων. <p>Αυτό το τμήμα βασίζεται σε γνώσεις σχετικά με τα χρησιμοποιούμενα πρωτόκολλα, αλλά όχι σε πραγματικές πειραματικές δοκιμές. Παρακαλώ, ενημερώστε με, αν δοκιμάσετε τα παρακάτω! ;-) <p>Το πρώτο πράγμα που πρέπει να θυμάστε, είναι πως το NFS είναι αργό πρωτόκολλο. Έχει μεγάλη εισαγωγή. Το να χρησιμοποιείς το NFS γιά να μεταφέρεις αρχεία, είναι σχεδόν σα να χρησιμοποιείς το πρωτόκολλο kermit. Είναι <em/αργό/. Σχεδόν οποιοδήποτε άλλο είναι ταχύτερο του NFS. Το FTP είναι ταχύτερο. Το HTTP είναι ταχύτερο. Τα rcp και ssh είναι ταχύτερα. <p>Ακόμη αποφασισμένοι να δοκιμάσετε; Ok. <p>Οι default παράμετροι του NFS είναι γιά σχετικά γρήγορες γραμμές, με μικρό χρόνο αναμονής. Αν χρησιμοποιήσετε αυτές τις default παραμέτρους σε αργές γραμμές υψηλής αναμονής, θα κάνουν το NFS να βγάζει μηνύματα λαθών σχετικά με τις εργασίες του, να σας λέει ότι τα αρχεία είναι μικρότερα απ' όσο πραγματικά είναι, και να κάνει διάφορα άλλα μυστήρια πράγματα. <p>Το πρώτο πράγμα που πρέπει να κάνετε, είναι να <em/μην/ χρησιμοποιήσετε την επιλογή <tt/soft/ mount. Αυτή θα κάνει τα timeouts να επιστρέφουν κώδικες λαθών στο software, πράγμα που πιθανότατα δεν θα είναι καθόλου καλός χειρισμός της κατάστασης. Αυτός είναι ωραίος τρόπος γιά να κερδίσετε μυστηριώδη κολλήματα. αντίθετα, χρησιμοποιείστε την <tt/hard/ mount option. Όταν η <tt/hard/ είναι ενεργοποιημένη, τα timeouts προκαλούν άπειρες προσπάθειες επαναλειτουργίας, αντί να παρατήσουν ό,τι προσπαθούσε το software να κάνει. Και πραγματικά, αυτό είναι αυτό ακριβώς που θέλετε. <p>Το επόμενο πράγμα που πρέπει να κάνετε, είναι να σκαλίσετε τις επιλογές του mount <tt/timeo/ και <tt/retrans/ . Αυτές περιγράφονται στη man σελίδα nfs(5), αλλά πάρτε κι ένα αντίγραφο εδώ : <code> timeo=n Η τιμή σε δέκατα του δευτερολέπτου, πριν σταλεί η πρώτη επανεκπομπή μετά από ένα RPC timeout. Η default τιμή είναι 7 δέκατα του δευτερολέπτου. Μετά το πρώτο timeout, το timeout διπλασιάζεται διαδοχικά, μέχρις ότου φτάσουμε σ' ένα μέγιστο timeout των 60 δευτερολέπτων, ή έχουν συμβεί αρκετές επανεκπομπές, ώστε να προκαλέσουν ένα μείζον time- out. Τότε, αν το filesystem είναι hard mounted, κάθε νέα διαδοχή timeouts ξαναρχίζει με διπλάσια αρχική τιμή της προηγούμενης σειράς, και ξανά διπλασιάζεται με κάθε επανεκπομπή. Το μέγιστο timeout είναι πάντα 60 δευτερόλεπτα. Μπορούμε να επιτύχουμε καλύτερη συνολική απόδοση, αυξάνοντας το timeout σ' ένα δίκτυο με φόρτο εργασίας, σ' έναν αργό server, ή μέσω πολλών routers ή gateways. retrans=n Ο αριθμός των μικρών timeouts και επανεκπομπών που πρέπει να συμβούν, πριν εμφανιστεί ένα μείζον timeout. Η default τιμή είναι 3 timeouts. Όταν εμφανιστεί ένα μείζον timeout, είτε εγκαταλείπεται η εργασία που γίνεται πάνω στο αρχείο, ή εμφανίζεται στην κονσόλα ένα μήνυμα &dquot;server not responding&dquot; (ο server δεν αποκρίνεται). </code> <p>Μ' άλλα λόγια : Αν μιά απάντηση δεν έρθει μέσα στον χρόνο του timeout των 0.7 δευτερολέπτων (700ms), ο NFS client θα επαναλάβει την αίτηση, και θα διπλασιάσει το timeout σε 1.4 δευτερόλεπτα. Εάν η απάντηση δεν φανεί μέσα σε 1.4 δευτερόλεπτα, η αίτηση θα επαναληφθεί, και το timeout θα επαναδιπλασιαστεί στα 2.8 δευτερόλεπτα. <p>Η ταχύτητα μιας γραμμής μπορεί να μετρηθεί με ping ενός πακέτου με το ίδιο μέγεθος με τα rsize/wsize. <code> $ 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 </code> <p>Εδώ, ο χρόνος αναφέρεται στο πόσο έκανε το πακέτο του ping, γιά να πάει μπρος-πίσω στο lugulbanda. (Τα 15ms είναι αρκετά γρήγορα.) Σε μιά γραμμή 28 kbps μπορείτε να περιμένετε κάτι σαν 4000-5000ms, και αν η γραμμή είναι φορτωμένη, αυτός ο χρόνος θα είναι ακόμη μεγαλύτερος - πολύ εύκολα φτάνει στη διπλάσια τιμή. Όταν αυτός ο χρόνος είναι μεγάλος, τότε λέμε ότι υπάρχει &dquot;υψηλή αναμονή&dquot;. Γενικά, γιά μεγαλύτερα πακέτα και γιά περισσότερο φορτωμένες γραμμές, η αναμονή αυξάνεται. Αυξήστε κατάλληλα το <tt/timeo/ γιά τη γραμμή και το φορτίο σας. Και, μιά που η αναμονή αυξάνεται, όταν χρησιμοποιείτε τη γραμμή και γιά άλλες δουλειές : Αν ποτέ θελήσετε να χρησιμοποιήσετε τα FTP και NFS ταυτόχρονα, πρέπει να δοκιμάσετε να μετρήσετε τους χρόνους ping ενώ χρησιμοποιείτε το FTP γιά μεταφορά αρχείων, και ν' αυξήσετε το <tt/timeo/ ώστε να ταιριάζει με την αναμονή της γραμμής σας. <!-- <p>Ας δούμε ένα σενάριο. Αν έχετε χρόνο ping περίπου 5000ms γιά πακέτο 8k, αυτός είναι ο χρόνος που κάνει να πάει μπρος-πίσω. Προς μία κατεύθυνση, θα ήταν 2500ms. Αυτός είναι ο χρόνος από τότε που το μεγάλο πακέτο στέλνεται από το ένα άκρο, μέχρι να φτάσει στο άλλο άκρο. Γιά ένα μικρό πακέτο 512 bytes, το ταξίδι μετ' επιστροφής είναι ~400ms. Προς μία κατεύθυνση, ~200ms. Προσθέτοντας ~2500ms και ~200ms, παίρνουμε ~2700ms, δηλ. τον χρόνο να πάει ένα μικρό πακέτο αίτησης, και να έρθει ένα μεγάλο πακέτο απάντησης. Τα πράγματα εξελίσσονται κάπως έτσι : <code> χρόνος timeout γεγονός 0 700 Ο client ζητάει δεδομένα. 300 Ο server παίρνει την αίτηση. 300 Ο server αρχίζει την απάντηση (είμαστε αισιόδοξοι! :-) ) Θυμηθείτε : Ο client δεν θα δει την απάντηση, μέχρις ότου αυτή συμπληρωθεί - περίπου σε 2.7 δευτερόλεπτα, εκτός αν συμβεί τίποτε άλλο. 700 Ο client κάνει timeout. 700 1400 Ο client ξαναζητάει δεδομένα. 1000 Ο server λαμβάνει την αίτηση. 1000 Ο server αρχίζει ν' απαντάει στην αίτηση. </code> <p>Σ' αυτό το σημείο, έχουνε περάσει περίπου 700ms από τα απαιτούμενα 2700 ms του χρόνου εκπομπής. Μ' άλλα λόγια, μένουν 2000ms. Ο server απαντάει στην αίτηση, αλλά το πακέτο δεν μπορεί να σταλεί... --> <sect>Ασφάλεια και NFS<label id="nfs-security"> <p>Δεν είμαι καθόλου ειδικός στην ασφάλεια των Η/Υ. Αλλά μπορώ να δώσω μερικές <em/μικρές/ συμβουλές σε όσους ενδιαφέρονται γιά την ασφάλεια. Όμως, με μιά επιφύλαξη : Η παρακάτω δεν είναι καθόλου μιά πλήρης λίστα των προβλημάτων που σχετίζονται με το NFS, και αν νομίζετε ότι είσαστε ασφαλείς, αφού διαβάσατε και υλοποιήσατε όλα τούτα εδώ, έχω μιά γέφυρα να σας πουλήσω. (Σ.τ.μ. : Εννοεί &dquot;bridge&dquot; δικτύων.) <p>Αυτή η ενότητα προφανώς δεν σας ενδιαφέρει, αν έχετε ένα <em/κλειστό/ δίκτυο, όπου εμπιστεύεστε όλους τους χρήστες, και κανένα μη έμπιστο άτομο δεν μπορεί να βρει πρόσβαση στους Η/Υ του δικτύου. Δηλαδή, δεν υπάρχει κανένας τρόπος να συνδεθούν μέσω τηλεφώνου στο δίκτυό σας, και δεν υπάρχει σύνδεση με άλλα δίκτυα, όπου δεν είναι ο κάθε χρήστης άτομο εμπιστοσύνης, ούτε η ασφάλεια του δικτύου. Νομίζετε ότι είμαι παρανοϊκός; Δεν είμαι καθόλου. Τα παραπάνω είναι απλά οι <em/βασικές/ συμβουλές ασφάλειας. Και θυμηθείτε, τα πράγματα που γράφω εδώ είναι απλά η αρχή των συμβουλών. Ένα <em/ασφαλές/ δίκτυο χρειάζεται έναν επιμελή και ειδήμονα SysAdmin, που γνωρίζει πού να βρει πληροφορίες αντιμετώπισης των τωρινών και των πιθανών προβλημάτων. <p>Το NFS έχει ένα βασικό πρόβλημα, δηλαδή ο client (αν δεν του πούμε να κάνει διαφορετικά) εμπιστεύεται τον NFS server, και αντίστροφα. Αυτό μπορεί ν' αποβεί κακό : Σημαίνει πως, αν ο root account του server hackευτεί, είναι αρκετά εύκολο να hackευτεί και ο root account του client, και αντίστροφα. Υπάρχουν καναδυό τρόποι αντιμετώπισης, στους οποίους θα επανέλθουμε. <p>Κάτι που πρέπει να διαβάσετε, είναι τα συμβουλευτικά κείμενα του CERT (σ.τ.μ. : site γιά την ασφάλεια στο Internet, <htmlurl url="http://www.cert.org/" name ="www.cert.org">) γιά το NFS. Το μεγαλύτερο κομμάτι του κειμένου παρακάτω, ασχολείται με θέματα, γιά τα οποία το CERT έχει γράψει συμβουλές. Δες το <htmlurl url="ftp://ftp.cert.org/01-README" name="ftp.cert.org:/01-README"> γιά μιά ενημερωμένη λίστα των συμβουλών του CERT. Εδώ σας δίνω μερικές τέτοιες συμβουλές, σχετικές με το NFS : <code> 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. </code> <sect1>Η ασφάλεια του client <p>Γιά τον client, μπορούμε ν' αποφασίσουμε με καναδυό τρόπους (και με τις αντίστοιχες επιλογές στο mount) ότι δεν εμπιστευόμαστε και πολύ τον server. Πχ, μπορούμε ν' απαγορεύσουμε σε προγράμματα suid να δουλεύουν εκτός NFS filesystem, με την επιλογή <tt/nosuid/. (Αυτή είναι μιά καλή ιδέα, και θα' πρεπε να κάνετε το ίδιο με όλους τους δίσκους επάνω στο NFS.) Σημαίνει πως ο root user του server δεν μπορεί να τρέξει ένα suid-root πρόγραμμα επάνω στο filesystem, να κάνει login στον client ως κανονικός χρήστης, και μετά να χρησιμοποιήσει το suid-root πρόγραμμα αυτό, γιά να γίνει και root στον client. Θα μπορούσαμε επίσης να απαγορεύσουμε τελείως το τρέξιμο αρχείων επάνω στο mounted filesystem, με την επιλογή <tt/noexec/. Αλλά αυτό μάλλον δεν είναι πρακτικό, επειδή ένα filesystem πιθανότατα περιέχει τουλάχιστον <em/μερικά/ scripts ή προγράμματα, που πρέπει να τρέξουν. Αυτές τις επιλογές τις βάζουμε στις στήλες επιλογών των <tt/rsize/ και <tt/wsize/, και τις χωρίζουμε με κόμμα. <sect1>Η ασφάλεια του server : Ο nfsd <p>Στον server, μπορούμε ν' αποφασίσουμε ότι δεν εμπιστευόμαστε τον root account του client. Συνεπώς, μπορούμε να χρησιμοποιήσουμε την επιλογή the root_squash στα exports : <code>/mn/eris/local apollon(rw,root_squash)</code> Τώρα, αν ένας χρήστης με userID 0 στον client προσπαθήσει να βρει πρόσβαση (ανάγνωσης, εγγραφής, σβησίματος) στο filesystem, ο server υποκαθιστά την UID του χρήστη με την αντίστοιχη του &dquot;nobody account&dquot; του server. Που σημαίνει ότι ο root χρήστης του client δεν μπορεί να δει ή ν' αλλάξει αρχεία, που μόνο ο root του server μπορεί. Αυτό είναι καλό, και πιθανότατα πρέπει να βάζετε <tt/root_squash/ σε όλα τα filesystems που κάνετε export. &dquot;- Αλλά ο root user του client εξακολουθεί να μπορεί να χρησιμοποιεί την εντολή su, γιά να γίνει οποιοσδήποτε άλλος χρήστης, άρα να μπορεί να βλέπει και ν' αλλάζει τα αρχεία!&dquot;, λέτε. Στο οποίο, η απάντηση είναι : Ναι, έτσι ακριβώς είναι, και πρέπει να είναι με τα *nix's και με το NFS. Αυτό, όμως, έχει μιά σημαντική συνέπεια : Όλα τα σημαντικά binaries και γενικότερα αρχεία πρέπει να τα έχει own ο <tt/root/, όχι το <tt/bin/, ή οποιοσδήποτε άλλος μη-root account, μιά που ο μόνος account, στον οποίο δεν μπορεί να βρει πρόσβαση ο root user του client, είναι ο root account του server. Στη σελίδα man του NFSd υπάρχουν καταχωρημένες πολλές άλλες επιλογές γιά squash, ώστε ν' αποφασίσετε μόνοι σας ποια (δεν) θα εμπιστευθείτε γιά τους clients. Επίσης, σας δίνονται επιλογές να κάνετε squash σ' οποιοδήποτε σύνολο UID και GID θέλετε. Αυτά όλα περιγράφονται στη man σελίδα του Linux NFSd. <p>Στην πραγματικότητα, η επιλογή root_squash είναι η default με τον Linux NFSd. Γιά να δώσετε πρόσβαση root σ' ένα filesystem, βάλτε <tt/no_root_squash/. <p>Ακόμη κάτι σημαντικό, είναι να βεβαιωθούμε ότι ο nfsd ελέγχει πως όλες οι αιτήσεις του έρχονται μόνο από μία προνομιούχο θύρα (privileged port). Αν δεχθεί αιτήσεις από οποιοδήποτε port, ένας οποιοσδήποτε χρήστης χωρίς ιδιαίτερα προνόμια μπορεί να τρέξει ένα πρόγραμμα, που θα βρει κάπου στο Internet, που &dquot;μιλάει&dquot; στο πρωτόκολλο του nfs, και που ισχυρίζεται ότι ο χρήστης είναι αυτός που ο ίδιος θέλει να είναι. Τρομακτικό! Ο nfsd του Linux κάνει εξ ορισμού τέτοιον έλεγχο, όμως σε άλλα ΛΣ πρέπει να ενεργοποιήσετε αυτόν τον έλεγχο εσείς. Το πώς, πρέπει να γράφεται στη σελίδα βοήθειας γιά τον nfsd το συγκεκριμένου ΛΣ. <p>Ακόμη κάτι : Ποτέ μην κάνετε export ένα filesystem στον localhost, ή στο 127.0.0.1 . Εμπιστευθείτε με! <sect1>Η ασφάλεια του server : Ο portmapper <p>Ο βασικός portmapper, σε συνδυασμό με τον nfsd, έχουνε ένα σχεδιαστικό πρόβλημα, που καθιστά δυνατό το να παίξουμε με τα αρχεία σε NFS servers, χωρίς να έχουμε προνόμια (privileges). Ευτυχώς, ο portmapper τον οποίο χρησιμοποιούν οι περισσότερες Linux distributions, είναι σχετικά ασφαλής εναντίον τέτοιων επιθέσεων, και μπορεί να γίνει ασφαλέστερος, αν ρυθμίσουμε σε δύο συγκεκριμένα αρχεία τις λίστες πρόσβασης. <p>Δεν πλάσθηκαν ίσες όλες οι Linux distributions! Μερικές φαινομενικά σύγχρονες <em/δεν/ περιλαμβάνουν ασφαλή portmapper, ακόμη και σήμερα, πολλά χρόνια αφ' ότου αυτή η τρύπα ασφάλειας έγινε κοινή γνώση. Τουλάχιστον μία ακόμη διανομή περιέχει τη σελίδα man γιά ασφαλή portmapper, αλλά ο ίδιος ο portmapper <em>δεν</em> είναι ασφαλής. Ο εύκολος τρόπος να ελέγξετε αν ο portmapper σας είναι ασφαλής ή όχι, είναι να τρέξετε την εντολή strings(1) και να δείτε αν διαβάζει τα σχετικά αρχεία <tt>/etc/hosts.deny</tt> και <tt>/etc/hosts.allow</tt>. Υποθέτοντας ότι ο portmapper σας είναι ο <tt>/usr/sbin/portmap</tt>, μπορείτε να τον ελέγξετε με την εντολή : <tt>strings /usr/sbin/portmap | grep hosts</tt>. Στον δικό μου Η/Υ, απαντάει κάπως έτσι : <code> /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 </code> <p>Πρώτα διορθώνουμε το αρχείο <tt>/etc/hosts.deny</tt>. Πρέπει να περιέχει τη γραμμή : <code>portmap: ALL</code> που θα αρνηθεί την πρόσβαση σε <em/όλους/. Ενώ έχουμε κλείσει την πρόσβαση μ' αυτόν τον τρόπο, τρέχουμε την εντολή <tt>rpcinfo -p</tt> γιά να ελέγξουμε ότι ο portmapper πραγματικά διαβάζει και κάνει ό,τι του λέει το αρχείο αυτό. (Η rpcinfo δεν πρέπει να δίνει έξοδο, ή, πιθανά, ένα μήνυμα λάθους.) <em>Δεν</em> θα έπρεπε να είναι απαραίτητο να επανεκκινήσουμε τον portmapper. <p>Το να κλείσουμε τον portmapper γιά όλους είναι πολύ δραστικό μέτρο. Συνεπώς τον ξανανοίγουμε, διορθώνοντας το αρχείο <tt>/etc/hosts.allow</tt>. Αλλά πρώτα, πρέπει να ξεκαθαρίσουμε τί θέλουμε να γράψουμε μέσα του. Βασικά, θα έπρεπε να περιέχει όλους τους Η/Υ που πρέπει να έχουν πρόσβαση στον portmapper μας. Στον τυπικό Η/Υ με Linux, ελάχιστοι άλλοι Η/Υ θα ήθελαν πρόσβαση root γιά οποιονδήποτε λόγο. Ο portmapper διευθύνει τα : nfsd, mountd, ypbind/ypserv, pcnfsd, και τις &dquot;r&dquot; services, όπως η ruptime και η rusers. Από τα παραπάνω, μόνο τα nfsd, mountd, ypbind/ypserv, και ίσως και ο pcnfsd, έχουν κάποια σημασία. Όλοι οι Η/Υ που χρειάζονται πρόσβαση στον δικό σας, θα έπρεπε να μπορούν. Ας πούμε ότι η διεύθυνση του Η/Υ σας είναι 129.240.223.254 , και ότι είναι συνδεδεμένος στο υποδίκτυο 129.240.223.0 , αν κάποιος άλλος Η/Υ θέλει πρόσβαση σ' αυτόν. (Αυτούς τους όρους του εισήγαγε το Networking HOWTO. Αν χρειαστεί, επιστρέψτε σ' αυτό γιά να φρεσκάρετε τη μνήμη σας.) Τότε, εισάγουμε τη γραμμή : <code>portmap: 129.240.223.0/255.255.255.0</code> στο αρχείο <tt/hosts.allow/. Είναι το ίδιο με την διεύθυνση δικτύου που δίνουμε στο αρχείο route, και τη μάσκα υποδικτύου (subnet mask) που δίνουμε στο ifconfig. Γιά τη συσκευή <tt/eth0/ στον Η/Υ μας, το <tt/ifconfig/ πρέπει να δείχνει : <code> ... 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 ... </code> και η εντολή <tt/netstat -rn/ πρέπει να βγάζει : <code> 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 ... </code> (Η διεύθυνση δικτύου βρίσκεται στην πρώτη στήλη.) Τα αρχεία <tt/hosts.deny/ και <tt/hosts.allow/ περιγράφονται στις αντίστοιχες man σελίδες με τα ίδια ονόματα. <p><bf/ΣΗΜΑΝΤΙΚΟ :/ <em/Μην/ βάζετε ο,τιδήποτε, εκτός από <em/αριθμούς IP/ στις σχετικές με τον portmapper γραμμές αυτών των αρχείων. Τυχόν πίνακες αντιστοιχιών με ονόματα Η/Υ, μπορούν έμμεσα να προκαλέσουν δραστηριότητα του portmapper, που θα ξεκινήσει ψάξιμο στους πίνακες αντιστοιχιών, που έμμεσα μπορούν να προκαλέσουν δραστηριότητα του portmapper, που... <p>Τα παραπάνω λογικά πρέπει να κάνουν ασφαλέστερο τον server σας. Το μόνο (ναι, σιγά!) πρόβλημα που παραμένει, είναι κάποιος που μπαίνει ως root σε &dquot;έμπιστο&dquot; μηχάνημα (ή κάνει εκκίνηση με MS-DOS), και χρησιμοποιεί αυτό το προνόμιο γιά να στείλει αιτήσεις από ένα ασφαλισμένο (secure) port, ως οποιοσδήποτε χρήστης θα ήθελε να παρουσιάζεται ο ίδιος. <sect1>Το NFS και τα firewalls<label id="security-firewalls"> <p>Είναι πολύ καλή ιδέα να βάλετε firewall στο nfs, και να κατευθύνετε με portmap τα ports στον router ή στο firewall σας. Ο nfsd δρα στο port 2049, και με το udp και με το tcp πρωτόκολλο. Ο portmapper δρα στο port 111 (και με tcp και με udp), και ο mountd στα ports 745 και 747 (tcp και udp). Συνήθως. Φυσικά, πρέπει να ελέγξετε τα ports με την εντολή <tt/rpcinfo -p/. <p>Αν, από την άλλη πλευρά, θέλετε το NFS να περνάει από firewall, υπάρχουν επιλογές στους νεώτερους NFSds και mountds, που τους κάνουν να χρησιμοποιούν μιά ειδική (όχι, όμως, πρότυπη) θύρα, που μπορεί να μένει ανοιχτή σε firewall. <sect1>Περίληψη<label id="security-summary"> <p>Αν χρησιμοποιείτε τα : hosts.allow/deny, root_squash, nosuid, και διάφορα προνομιούχα (privileged) χαρακτηριστικά των ports στο software των portmapper/nfs, θ' αποφύγετε πολλά από τα σήμερα γνωστά bugs του nfs, και θα μπορέσετε να αισθανθείτε σχεδόν σίγουροι τουλάχιστον γι' <em/αυτά/. Αλλά, ακόμη και μετά απ' όλ' αυτά : Όταν ένας εισβολέας έχει πρόσβαση στο δίκτυό σας, μπορεί να εμφανίσει περίεργες εντολές στο <tt/.forward/ σας, ή να διαβάσει το ταχυδρομείο σας, όταν γίνει export κατά NFS στο <tt>/home</tt>, ή το <tt>/var/spool/mail</tt>. Γιά τον ίδιο λόγο, ποτέ δεν θα 'πρεπε να δίνετε πρόσβαση στο ιδιωτικό σας κλειδί του PGP με το nfs. 'Η, τουλάχιστον, πρέπει να γνωρίζετε τον κίνδυνο που συνεπάγεται μιά τέτοια ενέργεια. Και τώρα γνωρίζετε ήδη μιά πλευρά αυτού του κινδύνου! <p>Το NFS και ο portmapper συναποτελούν ένα σύνθετο υποσύστημα, και άρα δεν είναι εντελώς απίθανο ν' ανακαλυφθούν νέα bugs, είτε στη βασική σχεδίαση, είτε στην υλοποίηση του συστήματος που χρησιμοποιούμε εμείς. Ακόμη και τρύπες ασφάλειας μπορεί να είναι ήδη γνωστές σήμερα, τις οποίες κάποιος χρησιμοποιεί με κακό σκοπό. Όμως, έτσι είναι η ζωή! Γιά να βρίσκεστε, λοιπόν, σε απόσταση ασφαλείας από τέτοια πράγματα, πρέπει τουλάχιστον να διαβάζετε τα newsgroups <htmlurl url="news:comp.os.linux.announce" name="comp.os.linux.announce"> και <htmlurl url="news:comp.security.announce" name="comp.security.announce">, ως το ελάχιστο δυνατόν που μπορείτε να κάνετε. <sect>Η λίστα πιθανών προβλημάτων στο mounting του NFS <p>Αυτή η ενότητα βασίζεται στην : &dquot;Λίστα ελέγχου γιά προβλήματα στο mounting του NFS&dquot;, της IBM Corporation. Πολλές ευχαριστίες στην IBM, που μας έδωσε τη λίστα να την χρησιμοποιήσουμε σ' αυτό εδώ το HOWTO. Αν σας τύχει κάποιο πρόβλημα, όταν πάτε να κάνετε mount σ' ένα NFS filesystem, παρακαλώ ρίξτε μιά ματιά σ' αυτή τη λίστα, πριν γράψετε κάπου γιά το πρόβλημά σας. Κάθε σειρά στη λίστα περιγράφει έναν τρόπο δυσλειτουργίας, και τη διόρθωσή του. <enum>Το mount συνέχεια βγάζει : <tt/RPC: Program not registered/ (το πρόγραμμα δεν έχει καταγραφεί / κατοχυρωθεί). <p>Τρέχει ο portmapper; <p><bf/Διόρθωση :/ Ξεκινήστε τον. <p>Τρέχει ο mountd; <p><bf/Διόρθωση :/ Ξεκινήστε τον. <p>Τρέχει ο nfsd; <p><bf/Διόρθωση :/ Ξεκινήστε τον. <p>Μήπως το αρχείο <tt>/etc/hosts.deny</tt> απαγορεύει στον portmapper ν' απαντήσει; <p><bf/Διόρθωση :/ Είτε σβήστε την απαγόρευση στο αρχείο <tt/hosts.deny/, ή προσθέστε μιά γραμμή στο <tt/hosts.allow/, ώστε ο portmapper να μπορεί να επικοινωνήσει μαζί σας. <item>Δεν έγινε export στο filesystem, ή δεν έγινε export προς τον συγκεκριμένο client. <p><bf/Διόρθωση :/ Κάντε export. <item>Τα ονόματα των Η/Υ δεν ταιριάζουν με την αντίστοιχη λίστα γιά τα exports. <p>Πχ : Η λίστα γιά τα exports γράφει να γίνει export προς τον Η/Υ <tt/johnmad/, αλλά το όνομα του Η/Υ <tt/johnmad/ αντιστοιχεί στο <tt/johnmad.austin.ibm.com/. Φυσικά, δεν δίνεται άδεια γιά mount. <p><bf/Διόρθωση :/ Κάντε export και προς τις δύο μορφές του ονόματος. <p>Αυτό μπορεί επίσης να συμβεί, αν ο client έχει δύο διασυνδέσεις (interfaces) με διαφορετικά ονόματα, και το αρχείο export αναφέρεται μόνο στη μία. <p><bf/Διόρθωση :/ Κάντε export και προς τις δύο διασυνδέσεις. <p>Αυτό επίσης μπορεί να συμβεί, αν ο server δεν μπορεί να κάνει lookuphostbyname ή lookuphostbyaddr (αυτές είναι library functions) στον client. Βεβαιωθείτε ότι ο client μπορεί να κάνει <tt/host <name>/;, <tt/host <ip_addr>/;, και ότι και τα δύο δείχνουν τον ίδιο Η/Υ. <p><bf/Διόρθωση :/ Τακτοποιείστε τα ονόματα των Η/Υ. <item>Το filesystem έγινε mount μετά το ξεκίνημα του NFS (στον συγκεκριμένο server). Σ' αυτή την περίπτωση, ο server κάνει export στο αντίστοιχο mount point, όχι στο mounted filesystem. <p><bf/Διόρθωση :/ Σταματήστε τον NFSd, και μετά επανεκκινήστε τον. <p><bf/Σημείωση :/ Οι clients που είχαν mounted το αντίστοιχο mount point, θα έχουν πρόβλημα στο να δουν τον server μετά την επανεκκίνησή του. <item>Η ημερομηνία είναι πολύ διαφορετική σε server και client (αυτό μπορεί να κάνει θάλασσα το make). <p><bf/Διόρθωση :/ Διορθώστε την ημερομηνία. <p>Ο συγγραφέας του HOWTO συνιστά τη χρήση του NTP γιά συγχρονισμό των ρολογιών. Μιά που στις ΗΠΑ υπάρχουν περιορισμοί στην εξαγωγή του NTP από τη χώρα, μπορείτε να βρείτε το NTP γιά τις διανομές Debian, RedHat, Slackware, από το <tt>ftp://ftp.hacktic.nl/pub/replay/pub/linux</tt>, ή ένα mirror του. <item>Ο server δεν μπορεί να δεχθεί mount από χρήστη, που μετέχει σε περισσότερες από 8 ομάδες (groups). <p><bf/Διόρθωση :/ Ελατώστε τον αριθμό των ομάδων, στις οποίες συμμετέχει ο χρήστης, ή κάντε mount μέσω ενός διαφορετικού χρήστη. </enum> <sect>FAQs <p>Εδώ βρισκόμαστε στην ενότητα των συχνών ερωτήσεων (FAQs). Η ενότητα αυτή βασίζεται κατά ένα μέρος σε ένα παλιό κείμενο του Alan Cox, με FAQs γιά το NFS. <p>Αν έχετε κάποιο πρόβλημα στο να κάνετε mount ένα filesystem, παρακαλώ κοιτάξτε μήπως το πρόβλημά σας περιέχεται στην προηγούμενη ενότητα, τη &dquot;λίστα πιθανών προβλημάτων στο mounting του NFS&dquot;. <enum> <item>Παίρνω πολλά μηνύματα λάθους, του τύπου : &dquot;stale nfs handle&dquot; ( = παλιό πρόγραμμα χειρισμού του nfs), όταν χρησιμοποιώ το Linux σε nfs server. <p>Αυτά τα προξενεί κάποιο bug μερικών παλιών εκδόσεων του nfsd. Το πρόβλημα διορθώθηκε από τον nfs-server2.2beta16 και μετά. <item>Όταν προσπαθώ να κάνω mount ένα filesystem, παίρνω : <tscreen><verb> can't register with portmap: system error on send </verb></tscreen> <p>(Δηλ. &dquot;Δεν συμφωνεί η καταγραφή στον portmapper, σφάλμα κατά την αποστολή&dquot;) <p>Πιθανότατα χρησιμοποιείτε τη διανομή Caldera. Υπάρχει ένα bug στα rc scripts. Παρακαλώ, επικοινωνήστε με την Caldera, γιά να σας δώσει τα διορθωμένα αρχεία. <item>Γιατί δεν μπορώ να εκτελέσω ένα αρχείο, αφού το αντέγραψα στον NFS server; <p>Η αιτία είναι ότι ο nfsd βάζει στη μνήμη cache τα &dquot;ανοιχτά&dquot; χρησιμοποιούμενα αρχεία (open file handles), γιά να επιτύχει καλύτερη απόδοση (και θυμηθείτε, τρέχει στον χώρο του χρήστη). Όσο ο nfsd κρατάει ένα αρχείο ανοιχτό (όπως πχ στην περίπτωση που μόλις έχει γράψει κάτι σ' αυτό), ο πυρήνας δεν θα σας αφήσει να το εκτελέσετε. Οι nfsds που είναι νεώτεροι από εκδόσεις (περίπου) άνοιξης του 1995, ελευθερώνουν τα ανοιχτά αρχεία μετά από λίγα δευτερόλεπτα. Οι παλιότεροι κολλάνε σ' αυτά γιά μέρες. <item>Τα αρχεία μου στο NFS είναι όλα μόνο γιά ανάγνωση (read only) <p>Ο NFS server με Linux πάει εξ ορισμού σε κατάσταση μόνον ανάγνωσης. Παρακαλώ, διαβάστε τις ενότητες &dquot;Οι mountd και nfsd&dquot;, και &dquot;Κάνοντας export σε filesystems&dquot;, σ' αυτό εδώ το HOWTO, και δείτε τις σελίδες man γιά τα exports και τον nfsd. Θα χρειαστεί ν' αλλάξετε το αρχείο <tt>/etc/exports</tt>. <item>Κάνω mount από έναν NFS server με Linux, και ενώ η εντολή <tt>ls</tt> δουλεύει, δεν μπορώ να διαβάσω ή να γράψω αρχεία. <p>Σε παλιότερες εκδόσεις του Linux, πρέπει να φορτώσετε τον NFS server με : <tt/rsize=1024,wsize=1024/. <item>Κάνω mount από έναν NFS server με Linux, με μέγεθος block μεταξύ 3500 και 4000, και ο Η/Υ κρασάρει συχνά. <p>Επομένως, μην το κάνετε. Αυτό δεν συμβαίνει με τους πυρήνες 2.0 και 2.2 . Και, αν δεν με απατά η μνήμη μου, δεν υπάρχει πρόβλημα ούτε με τον πυρήνα 1.2 . <item>Μπορεί το Linux να κάνει NFS επάνω σε TCP; <p>Όχι προς το παρόν. <item>Παίρνω πολλά περίεργα μηνύματα λάθους, όταν προσπαθώ να κάνω mount από έναν Η/Υ με Linux. <p>Βεβαιωθείτε ότι οι χρήστες σας μετέχουν σε 8 ή λιγότερες ομάδες. Οι παλιότεροι servers το ζητάνε αυτό οπωσδήποτε. <item>Όταν επανεκκινώ τον Η/Υ μου, μερικές φορές κρεμάει, όταν προσπαθεί να κάνει unmount ένα κολλημένο NFS (ως server). <p><bf/ΜΗΝ/ κάνετε unmount σε NFS servers μετά την επανεκκίνηση ή τον τερματισμό λειτουργίας του Η/Υ, απλά αγνοήστε τους. Δεν θα πειράξει τίποτε, αν δεν τους κάνετε unmount. Η σχετική εντολή είναι : <tt/umount -avt nonfs/. <item>Οι NFS clients με Linux αργούν πολύ, όταν επικοινωνούν με Η/Υ Sun και BSD. <p>Οι εγγραφές στο NFS συνήθως είναι σύγχρονες. (Αυτό, βέβαια, μπορείτε να το απενεργοποιήσετε, αν δεν σας πειράζει να κινδυνέψετε να χάσετε δεδομένα.) Ακόμη χειρότερα, οι πυρήνες που βασίζονται στο BSD μάλλον αδυνατούν να δουλεύουν σε μικρά blocks. Έτσι, όταν γράφετε 4 kB δεδομένων (από έναν Η/Υ με Linux) σε πακέτα του 1 kB που χρησιμοποιεί το BSD, το τελευταίο κάνει το εξής : <tscreen><verb> διάβασε τη σελίδα των 4 kB άλλαξε το 1 kB ξαναγράψε τα 4 kB στον δίσκο διάβασε τη σελίδα των 4 kB άλλαξε το 1 kB ξαναγράψε τα 4 kB στον δίσκο κ. ο. κ. </verb></tscreen> <item>Όταν συνδέω πολλούς clients σε NFS server με Linux, η απόδοση πέφτει ξαφνικά. <p>Το πρωτόκολλο NFS χρησιμοποιεί τμηματικά (fragmented) πακέτα UDP. Ο πυρήνας έχει ένα όριο στο πόσα τμήματα ανολοκλήρωτων πακέτων μπορεί να σηκώσει, πριν αρχίσει να τα αγνοεί. Στον πυρήνα 2.2, αυτό ρυθμίζεται σε χρόνο runtime μέσω του /proc filesystem : <tt>/proc/sys/net/ipv4/ipfrag_high_thresh</tt> και <tt>ipfrag_low_thresh</tt>. Στον 2.0 , αυτές οι παράμετροι είναι σταθερές κατά την compilation του πυρήνα, και ορίζονται στα : <tt>.../linux/net/ipv4/ip_fragment.c</tt>, <tt>IPFRAG_HIGH_THRESH</tt>, και <tt>IPFRAG_LOW_THRESH</tt>. Η σημασία αυτών των τιμών, είναι ότι άπαξ και η απαιτούμενη μνήμη των ανολοκλήρωτων κομματιών UDP φτάσει το άνω όριό της (&dquot;ipfrag_high_thresh&dquot;) σε bytes (256 kB εξ ορισμού στους πυρήνες 2.2.3 και 2.0.36), αυτόματα πέφτει στο κάτω της όριο (&dquot;ipfrag_low_tresh&dquot;). Αυτό γίνεται με σβήσιμο κομματιών. Αυτή η κατάσταση ισοδυναμεί σχεδόν με απώλεια κομματιών, και τη στιγμή που η μνήμη φτάνει το άνω της όριο, η απόδοση του server σας πέφτει πολύ. <p>Τα 256 kB είναι αρκετά γιά περίπου 30 clients. Αν έχετε 60, διπλασιάστε τα. Και διπλασιάστε επίσης το κάτω όριο. <item>Χρησιμοποιώ το Linux 2.2 (ή μεταγενέστερο) με τον knfsd, και δεν μπορώ να κάνω mount στον Η/Υ μου, τύπου AIX, IRIX, Solaris, DEC-Unix... <p>Ο knfsd ανακοινώνει ότι υλοποιεί την έκδοση 3 του NFS, αλλά δεν το κάνει. Υπάρχει μιά επιλογή, να τον σταματήσετε να βγάζει αυτό το μήνυμα. Χρησιμοποιείστε την. 'Η, μπορείτε να θέσετε <tt/&dquot;vers=2&dquot;/ στη λίστα με τις παραμέτρους του mount στους clients. <item>Ο τύπου AIX 4 Η/Υ μου δεν μπορεί να κάνει mount τον NFS server μου με Linux. Μου λέει : <tscreen><verb> 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. </verb></tscreen> <p>(Δηλ. : &dquot;Δεν δίδεται άδεια γιά τον server&dquot;, &dquot;εγκαταλείπω το server:/dir&dquot;, &dquot;Οι άδειες πρόσβασης στα αρχεία δεν επιτρέπουν τη δραστηριότητα που ζητάτε.&dquot;) ή κάτι παρόμοιο. <p>Το AIX 4.2 χρησιμοποιούσε ρεζερβέ ports (κάτω από το 1024) γιά το NFS. Τα AIX 4.2.1 και 4.3 δεν περιορίζονται στα ρεζερβέ ports. Επίσης, τα AIX AIX 4.2.1 και 4.3 προσπαθούν να κάνουν mount με χρήση του NFS3, μετά του NFS/TCP, και τελικά του NFS/UDP. <p>Προσθέτοντας <code>nfso -o nfs_use_reserved_ports=1</code> <p>στο τέλος του <tt/rc.tcpip/, θα το αναγκάσει να ξαναχρησιμοποιήσει τα ρεζερβέ ports. (Αυτό το κόλπο μου το έδωσε ο Brian Gorka.) </enum> <sect>Κάνοντας export σε filesystems <p>Φυσικά, ο τρόπος του να κάνουμε export σε filesytems με το NFS, δεν είναι πλήρως συμβατός στις διάφορες πλατφόρμες εργασίας. Σ' αυτή την περίπτωση, αυτά που ξεφεύγουν απ' τον κανόνα, είναι τα Linux και Solaris 2. Αυτή εδώ η ενότητα θέτει πρόχειρα σε σειρά τους τρόπους του export γιά τα περισσότερα ΛΣ. Αν το δικό σας δεν καλύπτεται, πρέπει να ψάξετε την τεκμηρίωσή του. Λέξεις-κλειδιά μπορούν να είναι : nfsd, system administration tool ( = εργαλείο διεύθυνσης συστήματος), rc scripts, boot scripts, boot sequence ( = διαδικασία εκκίνησης), /etc/exports, exportfs. Θα δώσω ένα παράδειγμα σ' αυτήν την ενότητα : Πώς να κάνουμε export το /mn/eris/local στον Η/Υ apollon, με επιλογή read/write. <sect1>IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX <p>Αυτά τα ΛΣ χρησιμοποιούν το παραδοσιακό format της Sun γιά export. Στο <tt>/etc/exports</tt>, γράψτε : <code>/mn/eris/local -rw=apollon</code> Η πλήρης τεκμηρίωση βρίσκεται στη σελίδα man γιά το αρχείο <tt/exports/. Αφού διορθώσετε το αρχείο, τρέξτε <tt/exportfs -av/, γιά να γίνει export στα filesystems. <p>Το πόσο αυστηρή είναι η σύνταξη της εντολής exportfs, συζητιέται. Σε μερικά ΛΣ θα βρείτε ότι η προηγούμενη γραμμή διατυπώνεται ως : <code>/mn/eris/local apollon</code> ή κάτι εντελώς εκφυλισμένο, σαν αυτό εδώ : <code>/mn/eris/local rw=apollon</code> Συνιστώ να είσαστε τυπικοί. Με το να κόβετε δρόμο, ρισκάρετε το να δείτε την επόμενη έκδοση του <tt/exportfs/ να γίνεται πολύ αυστηρότερη στη διατύπωση, και ξαφνικά ό,τι ξέρατε να μη δουλεύει πλέον. <sect1>Solaris 2 <p>Η Sun ξαναεφεύρε απ' την αρχή τον τροχό, όταν έφτιαξε το Solaris 2. Επομένως, αυτό διαφέρει εντελώς απ' όλα τα άλλα ΛΣ. Αυτό που κάνετε εδώ, είναι να διορθώσετε το αρχείο <tt>/etc/dfs/dfstab</tt>. Μέσα σ' αυτό, τοποθετήστε εντολές κοινής χρήσης (share), όπως αυτές αναγράφονται στη σελίδα man του <tt/share/(1M). Όπως παρακάτω : <code>share -o rw=apollon -d "Eris Local" /mn/eris/local</code> Μετά τις διορθώσεις, τρέξτε το πρόγραμμα <tt/shareall/, γιά να κάνετε export στα filesystems. <sect>Το NFS στο Linux 2.2<label id="linuxtwotwo"> <p>Καθώς γράφω το HowTo, η παρούσα έκδοση του πυρήνα του Linux είναι η 2.2.12 , και η χρήση NFS σ' αυτήν μπορεί να γίνει λίγο αγγαρεία. Μπορεί και όχι. <p>Δεν ξέρω τί θα γίνει με το NFS στο Linux 2.4 . <p>Το νέο σπουδαίο πράγμα με το Linux 2.2 είναι η υποστήριξη ενός nfs server demon που βρίσκεται μέσα στον πυρήνα, και ονομάζεται knfsd. Αυτός ο τρόπος υλοποίησης του nfsd έχει μερικά πλεονεκτήματα, το κυριότερο των οποίων είναι η ταχύτητα. Ένας Η/Υ με Linux 2.2 με τον knfsd είναι ένας αξιοσέβαστος nfs server. Ωστόσο, πάντα μπορείτε να χρησιμοποιήσετε τον παλιό nfsd με το Linux 2.2, και υπάρχουν επίσης μερικά πλεονεκτήματα σ' αυτή τη χρήση, το κυριότερο των οποίων είναι η απλότητα. <p>Αν χρησιμοποιείτε source πυρήνα ή binary πακέτο, φτιαγμένα από κάποια εταιρία σαν πχ την RedHat (έκδοση 6.0 και μετά), την SuSE (έκδοση 6.1 και μετά, νομίζω), ή κάποιον άλλον επαγγελματία κατασκευαστή διανομών, πιθανότατα έχουν συμπεριλάβει πλήρη λειτουργικότητα &dquot;knfsd&dquot; στον πυρήνα τους. Και δεν χρειάζεται να προβληματίζεστε, στις περισσότερες περιπτώσεις θα δουλέψει. Μέχρις ότου να σας έρθει να κάνετε compile έναν πυρήνα μόνοι σας. Αν χρησιμοποιείτε κάποιον από τους διαθέσιμους πυρήνες 2.2 του Linux (τουλάχιστον μέχρι και τον 2.2.12), ο knfsd θα σταματήσει να δουλεύει. <p>Γιά να τα καταφέρετε μόνοι σας να ξεπεράσετε το εμπόδιο, χρειάζεστε να βρείτε το πακέτο knfsd του H. J. Lu. Αυτό είναι μιά συλλογή patches και απαραίτητων utilities γιά τον πυρήνα 2.2, που ο Lu επιμελείται στον ελεύθερο χρόνο του. Μπορείτε να τη βρείτε από τον πλησιέστερο mirror γιά τους πυρήνες του Linux, με το κυρίως site να είναι το : <htmlurl url="ftp://ftp.kernel.org/pub/linux/devel/gcc/" name="ftp.kernel.org:/pub/linux/devel/gcc/">. <bf/Τα παραπάνω δεν τα γράφω γιά &dquot;λαϊκή κατανάλωση&dquot;/. Αν αυτό το πακέτο σας μπερδέψει, μην προσπαθείτε να κάνετε compile τον πυρήνα μόνοι σας. Περιμένετε μέχρι να βγει ένα σχετικό πακέτο από τον αγαπημένο σας διανομέα του Linux (πχ RedHat, SuSE, κλπ). <p>Επίσης, μη μου στέλνετε e-mails με ερωτήσεις γι' αυτό το θέμα. Δεν μπορώ να σας βοηθήσω. Δεν έχω διαθέσιμους servers να τρέχουνε knfsd. Αν βρείτε σφάλματα ή παραλείψεις στην παρούσα τεκμηρίωση, παρακαλώ γράψτε μου, και θα διορθώσω αυτό το HOWTO και θα το ξαναδώσω στο αναγνωστικό κοινό. <p>Εξακολουθείτε να διαβάζετε; Ok. Ο H. J. Lu στέλνει τις νέες εκδόσεις του πακέτου του στη mailing list γιά τον πυρήνα του Linux. Επίσης, εκεί στέλνονται και άλλα θέματα σχετικά με το NFS σε πυρήνες 2.2 . Διαβάστε τα. <p>Υπάρχει ένα αξιοσημείωτο χαρακτηριστικό του πακέτου του knfsd : Ανακοινώνει ότι υποστηρίζει την έκδοση 3 του NFS. Ωστόσο, δεν την υποστηρίζει. Μπορείτε να δώσετε μία παράμετρο, γιά να σταματήσετε αυτήν την ανακοίνωση, ή να δώσετε <tt/&dquot;vers=2&dquot;/ στη λίστα επιλογών mount των clients. <sect1>Ο client <p>Ο client είναι σχετικά απλός. Γιά καλό locking, πρέπει να κάνουμε compile τον <tt/statd/ (από το πακέτο του knfsd), να τον εγκαταστήσουμε, και να τον εκκινήσουμε από τα scripts εκκίνησης. Κάντε ακριβώς έτσι. Γιά να δουλέψει ο statd, χρειάζεται ένα directory με όνομα <tt>/var/lib/nfs</tt>, διαφορετικά σταματάει χωρίς κανένα μήνυμα λάθους, άρα πριν τον τρέξουμε, πρέπει να φτιάξουμε το συγκεκριμένο dir. <p>Όταν ξεκινήσει ο statd να τρέχει, μπορείτε να χρησιμοποιήσετε το πρόγραμμα <tt/testlk/ (στο <tt>tools/locktest</tt>), γιά να δοκιμάσετε αν δουλεύει το locking ενός αρχείου σ' ένα NFS filesystem. Λογικά, δουλεύει. Αν δείτε μήνυμα <em/No locks available/, ο statd δεν δουλεύει. <p>Στην πραγματικότητα, μπορείτε ν' αποφύγετε τελείως το locking (όχι πως συνιστώ κάτι τέτοιο), δίνοντας <tt/&dquot;nolock&dquot;/ στη λίστα επιλογών του mount. <p>Σύμφωνα με όσα γνωρίζω, αυτά είναι όλα όσα χρειάζονται, γιά να δουλέψει ένας client. <p>Εάν έχετε Sparc ή Alpha NFS server, θα διαπιστώσετε ότι ο nfs client του Linux 2.2 είναι τελείως χάλια. Ο ρυθμός μετάδοσης δεδομένων από και προς τον server είναι τόσο ελεεινός, που δεν μπορείτε να φανταστείτε. Είναι πολύ χειρότερος απ' ό,τι στο Linux 2.0 . Πολύ. Αλλά, φυσικά, υπάρχει και η θεραπεία της κατάστασης αυτής : Η σειρά πυρήνων 2.2 του Alan Cox (που είναι λιγάκι πιο πειραματικοί από τους νορμάλ πυρήνες 2.2 του Linus) έχει ένα patch γιά ανέβασμα της απόδοσης του Linux 2.2 με τους Alpha και Sparc servers. Αν θέλετε να χρησιμοποιήσετε τους πυρήνες 2.2 του Alan Cox, πρέπει να παρακολουθείτε τη mailing list γιά τους πυρήνες του Linux. Και αν το κάνετε αυτό, ήδη θα ξέρετε πού μπορεί να βρεθεί το συγκεκριμένο patch : Το home site του είναι το <url url="http://www.uio.no/~trondmy/src/">, σε περίπτωση που θέλετε να δοκιμάσετε να το βάλετε σε διαθέσιμο πυρήνα 2.2 . Αυτό το patch πιθανότατα δεν θα περιλαμβάνεται ούτε στο Linux 2.4, επειδή απαιτεί πάρα πολλές αλλαγές στον πυρήνα, γιά να γίνει αποδεκτό στον παρόντα κύκλο ανάπτυξης. Να περιμένετε το Linux 2.5 . <p>Το <tt/trondmy/ επίσης διαθέτει patches που κάνουν το Linux να χρησιμοποιεί την έκδοση 3 του NFS, κι επίσης θα σας δώσει τη δυνατότητα να χρησιμοποιείτε το tcp γιά μεταφορά αρχείων, αντί του UDP. Ο NFS v. 3 είναι πολύ καλός γιά μεγάλα δίκτυα, ή δίκτυα όπου η απώλεια πακέτων δεν είναι μηδενική, ή οι χρόνοι αναμονής είναι μεγάλοι. <p>Ο λόγος που πρέπει να παρακολουθείτε τη mailing list γιά τους πυρήνες του Linux, προκειμένου να χρησιμοποιήσετε αυτά τα patches, είναι ότι μερικές φορές υπάρχουν άσχημα bugs μέσα τους. Bugs που διαλύουν τα αρχεία σας. Συνεπώς, παρακαλώ <bf/να προσέχετε/. <sect1>Ο server <p>Ο nfs server demon του Linux 2.2 και των μεταγενεστέρων ονομάζεται <tt/&dquot;knfsd&dquot;/, και θέλει πονηρές ρυθμίσεις. Λυπάμαι, αλλά αυτές πρέπει ή να τις βρείτε μόνοι σας, ή να μείνετε προσκολλημένοι σε ό,τι βγάζουν η SuSE, η RedHat, και οι υπόλοιποι, σαν πακέτα του πυρήνα 2.2 . Ωστόσο, και με το Linux 2.2 μπορείτε πάντα να χρησιμοποιήσετε τον παλιό nfsd. Είναι αργός, αλλά εύκολος να τον ρυθμίσεις. <sect>NFS server σε μιά δισκέτα <p>Αυτή η ενότητα γράφηκε από τον Ron Peters, <htmlurl url="mailto:rpeters@hevanet.com" name="rpeters@hevanet.com">. Εξηγεί πώς να στήσουμε έναν NFS server, όταν bootάρουμε από δισκέτα. Αρχικά η ενότητα σχεδιάστηκε με σκοπό να δείξει πώς μπορούμε να έχουμε (μέσω NFS) κοινή χρήση του cd-rom ενός άλλου Η/Υ (που δεν στηρίζεται σε Linux/UNIX), ώστε να εγκαταστήσουμε το Linux στον πρώτο Η/Υ, που δεν διαθέτει cd-rom. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <sect1>Εισαγωγή <p>Αυτό το κείμενο γράφτηκε γιά όσους συναντήσουν το ίδιο πρόβλημα, που είχα κι εγώ πρόσφατα : Έστηνα έναν Linux server σ' έναν Η/Υ που δεν διέθετε cd-rom, και δεν μπορούσα να του προσθέσω ένα, εκτός ίσως εξωτερικό SCSI, ή κάτι παρόμοιο. Τώρα, που είναι όλο και πιο απίθανο να εγκαταστήσετε το Linux σ' ένα τέτοιο μηχάνημα, αυτό το κείμενο μπορεί να μην είναι πλέον τόσο πολύτιμο. Ωστόσο, προσωπικά θα το εκτιμούσα, αν το διέθετα όταν προσπαθούσα να φτιάξω τον Η/Υ μου. <p>Μιά που ο Η/Υ μου δεν διέθετε cd-rom, σκέφτηκα να βρω έναν NFS server γιά τα Win95, και να κρατήσω κοινή χρήση του cd-rom γιά όσο χρειαστεί να φτιάξω τον Η/Υ με το Linux, και να τον βάλω στο δίκτυο. Από τα δύο προϊόντα που βρήκα (δεν αναφέρω ονόματα, αλλά το ένα ήτανε freeware και το άλλο με περιορισμένη άδεια χρήσης 14 ημερών), το ένα δεν δούλεψε καθόλου, και το άλλο δεν μπόρεσε να χειριστεί αρκετά καλά τα σύμφωνα με το Linux ονόματα των Η/Υ, ώστε να ολοκληρώσει την εγκατάσταση. <p>Μετά απ' αυτά, προσπάθησα να ξεκινήσω τον Η/Υ μου των Win95 με τις δύο δισκέτες boot/root, και μετά να βάλω μιά βοηθητική δισκέτα, ώστε να στήσω τον NFS server. <p>Αυτό αποδείχτηκε πολύ απλό, και η όλη διαδικασία είναι πιθανότατα ευκολότερη από το να διαβάσετε αυτήν την εισαγωγή, αλλά πιστεύω ότι θα βοηθήσει το να τα γράψω όλα μαζί κάπου. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <p> <sect1>Προσδοκίες <p>Αυτό το κείμενο βγήκε από τη χρήση των δισκετών boot/root μιας από τις τωρινές διανομές του Slackware Linux από την InfoMagic. Χρησιμοποίησα την έκδοση 2.0.34 του πυρήνα στις δισκέτες boot/root, αλλά τα προγράμματα του NFS server πάρθηκαν από έναν server έκδοσης 2.0.30 . Πάντα χρησιμοποιούσα τη μέθοδο εγκατάστασης του Slackware, όχι επειδή είναι ευκολότερη, ή καλύτερη, ή χειρότερη, αλλά απλά επειδή αισθάνομαι άνετα μαζί της, και δεν έχω βρει τον χρόνο να δοκιμάσω κάποια άλλη. <p>Δεν πιστεύω να υπάρξουν πολλά προβλήματα κατά τη χρήση αυτού του κειμένου, σε σχέση με την έκδοση του Linux. Πάντως, θα συνιστούσα να χρησιμοποιήσετε κάποια σχετικά σύγχρονη. Μιά που είναι πιθανό ότι θα χρησιμοποιηθεί γιά εγκατάσταση, είναι εξ ίσου πιθανό να χρησιμοποιηθεί ένα σύγχρονο σετ boot/root δισκετών. <p>Όλοι οι συνδυασμοί συζητιόνται. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <p> <sect1>Απαιτήσεις <p> <itemize> <item>Ένας Η/Υ με δυνατότητες δικτύωσης και με δισκέτα εκκίνησης. Ο Η/Υ που θα γίνει NFS server, πρέπει να έχει κάρτα δικτύου, που ν' αναγνωρίζεται κατά τη διάρκεια της διαδικασίας εκκίνησης. Περισσότερα απάνω σ' αυτό μπορείτε να διαβάσετε στο Networking HOWTO. <item>Μιά ακόμη δισκέτα, που περιέχει τα : rpc.portmap, rpc.mountd, και rpc.nfsd . (Αυτά τα αρχεία βρίσκονται εύκολα με ψάξιμο μέσω ftp στο Internet.) <item>Διανομή Slackware, ή κάποια άλλη. (Υποθέτουμε επάνω σε cd's). </itemize> <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <sect1>Στήσιμο του server <p> <sect2>Εκκίνηση του προσωρινού NFS server <p>Ξεκινάμε με την δισκέτα εκκίνησης τον Η/Υ που είναι NFS server, και βεβαιωνόμαστε ότι αναγνωρίζεται η κάρτα δικτύου. Επίσης, πρέπει ν' αναγνωριστεί και το cd-rom. Θα χρησιμοποιήσω το eth0 γιά την περιγραφή της κάρτας δικτύου. <p> <sect2>Κάνουμε mount στη δισκέτα και στο cd-rom <p>Αφού ξεκινήσει ο Η/Υ, δεν χρειαζόμαστε τις δισκέτες boot/root. Το ΛΣ βρίσκεται στη RAM. <p>Αντικαθιστούμε τη δισκέτα εκκίνησης με τη βοηθητική δισκέτα. Κάνουμε mount στη δισκέτα : <p><tt>mount /dev/fd0 /floppy</tt> <p>Αυτό προϋποθέτει ότι η δισκέτα είναι τύπου ext2 filesystem. Φαντάζομαι ότι μπορεί και να είναι και τύπου DOS, με τα απαραίτητα αρχεία επάνω της, αλλά δεν το έχω δοκιμάσει αυτό ακόμη. Πιστεύω ότι κάτι τέτοιο είναι ευκολότερο από το να ασχολείσαι με disk image. Σ' αυτή την περίπτωση, θα ήταν : <tt>mount -t msdos ...etc</tt>. Πιθανόν να πρέπει να τα γράψω αυτά στην ενότητα &dquot;προς ενέργεια&dquot;. <p>Κάνουμε mount στο cd-rom : <p><tt>mount -t iso9660 /dev/hdc /cdrom</tt> <p>Τα devices δισκέτας και cd-rom είναι αυτά που χρησιμοποίησα κι εγώ. Μπορεί να διαφέρουν, ανάλογα την εφαρμογή. Τα mount points /floppy και /cdrom υπάρχουν ήδη στο image της root δισκέτας, άρα μπορούμε να τα χρησιμοποιήσουμε. Αν δεν υπάρχουν, φτιάξτε τα, ή χρησιμοποιείστε όποια mount points σας αρέσουν. <p><sect2>Στήνουμε τη δικτύωση στον προσωρινό server <p>Σ' αυτό το σημείο, στήνουμε τον προσωρινό NFS server, γιά να μιλήσει στο δίκτυο. Θα δώσουμε ελάχιστες εντολές. Υπάρχουν, όμως, κάμποσα πράγματα, που πρέπει να γνωρίζετε, πριν δώσετε τις εντολές αυτές (οι τιμές μπαίνουν απλά ως παραδείγματα) : <p>IPADDR:172.16.5.100 #Αυτή είναι η διεύθυνση δικτύου του προσωρινού server. <p>NETMASK:255.255.255.0 #Αυτή είναι η μάσκα δικτύου. <p>BROADCAST:172.16.5.255 #Ο τελευταίος αριθμός (255) είναι σημαντικός γιά την IPADDR. <p>ETHNETWORK:172.16.5.0 #Ακόμη μιά φορά, ένας αριθμός ελάχιστα διαφορετικός από την IPADDR. <p>GATEWAY:172.16.5.251 #Χρειάζεται μόνον αν διαθέτετε gateway. Τα περισσότερα σπιτικά δίκτυα δεν διαθέτουν. <p>Οι εντολές γιά να συνδεθούμε με το δίκτυο. Βάζουμε τις τιμές, όπως τις βλέπουμε παραπάνω : <p><tt>ifconfig eth0 inet IPADDR arp netmask NETMASK broadcast BROADCAST</tt> <p><tt>route add -net ETHNETWORK netmask NETMASK eth0</tt> <p>Χρησιμοποιείστε την επόμενη εντολή, μόνο αν διαθέτετε gateway και πρέπει να περάσετε από μέσα της : <p><tt>route add default gw GATEWAY netmask 0.0.0.0 eth0</tt> <p>Αν όλα πάνε καλά, τώρα βρίσκεστε στο δίκτυο, και θα πρέπει να μπορείτε να κάνετε ping σ' άλλους Η/Υ. <p><sect2>Ρυθμίζουμε την κοινή χρήση του NFS <p>Καθορίζουμε το directory που θέλουμε να έχουμε κοινό μέσω του NFS. (Στην περίπτωση του παραδείγματός μου, χρησιμοποίησα το /cdrom/slakware.) Βάζουμε αυτό το directory στο αρχείο /etc/exports : <p><tt>echo "/cdrom/slakware" > /etc/exports</tt> <p><sect1>Τρέχουμε τον NFS server <p>Πάμε στο /floppy/usr/sbin και τρέχουμε : <p>Τον <tt>./rpc.portmap</tt> <p>Τον <tt>./rpc.mountd</tt> <p>Τον <tt>./rpc.nfsd</tt> <p><sect2>Εντάξει, ξεκινάμε την εγκατάσταση <p>Τώρα, λογικά πρέπει να έχουμε κοινή χρήση του directory &dquot;/cdrom/slakware&dquot;, που γράψαμε στο αρχείο /etc/exports. Αφού γίνει αυτό, μπορούμε να εκκινήσουμε τον Η/Υ, όπου θα κάνουμε την εγκατάσταση, με τις δισκέτες boot/root (προσωπικά, χρησιμοποίησα τις ίδιες, με τις οποίες ξεκίνησα και τον NFS server), και ν' αρχίσουμε την εγκατάσταση. <p>Όταν θα είσαστε έτοιμοι να διαλέξετε την πηγή των αρχείων εγκατάστασης, διαλέξτε τον NFS server. Θα ερωτηθείτε γιά την διεύθυνση ip του server. Δώστε τη διεύθυνση που βάλατε ως IPADDR του server. Επίσης, θα ερωτηθείτε και γιά το directory το οποίο θα γίνει mount. Αυτό είναι το directory που γράψατε στο αρχείο /etc/exports του NFS server. <p>Μετά απ' αυτά, ο Η/Υ θα κάνει mount τον NFS server. Δώστε προσοχή γιά τυχόν μηνύματα λάθους. Μέχρις εδώ, λογικά είναι όλα σωστά, και μπορείτε να συνεχίσετε την εγκατάσταση. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <p> <sect1>Επίλυση προβλημάτων <p><sect2>Τίποτε εδώ ακόμη <p>Δεν έχω ακόμη υλικό γιά επίλυση προβλημάτων. Ίσως, όσο οι αναγνώστες χρησιμοποιούν τη διαδικασία που περιγράφεται, να βρεθούν περισσότερα βοηθήματα και υποδείξεις. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <p> <sect1>Προς ενέργεια <p><sect2>Δισκέτα DOS <p>Δοκιμάστε μιά δισκέτα DOS γιά βοηθητική δισκέτα. <p><sect2>Εντολές rpc <p>Δοκιμάστε ν' αλλάξετε σειρά στην εκτέλεση των εντολών rpc.* , και εάν χρειάζεται να τρέξουν μερικές, ή όλες τους. <!-- S e c t i o n - - - - - - - - - - - - - - - B r e a k e r --> <p> <sect>PC-NFS <p>Δεν θέλετε να τρέξετε το PC-NFS. Θέλετε να τρέξετε το samba. <p>Το samba είναι πολύ καλύτερο από το PC-NFS, και δουλεύει με τα Windows 3.xx for Workgroups, καθώς και με μεταγενέστερες εκδόσεις των Windows. Είναι επίσης ταχύτερο και ασφαλέστερο. Χρησιμοποιείστε το. Πραγματικά! </article>