Penguin
Diff: HowToNFSHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and previous revision of HowToNFSHOWTO.

Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Friday, October 29, 2004 10:10:14 am by StuartYeates
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:10 am by perry Revert
@@ -1,2620 +1 @@
-Linux NFS-HOWTO  
-!!!Linux NFS-HOWTO  
-!Tavis Barr  
-  
- tavis@mahler.econ.columbia.edu  
-  
-  
-  
-!Nicolai Langfeldt  
-  
- janl@linpro.no  
-  
-  
-  
-!Seth Vidal  
-  
- skvidal@phy.duke.edu  
-  
-  
-  
-  
-2000-12-28  
-  
-----; __Table of Contents__; 1. Preamble: ; 1.1. Legal stuff; 1.2. Disclaimer; 1.3. Feedback; 1.4. Translation; 1.5. Dedication; 2. Introduction: ; 2.1. What is NFS?; 2.2. What is this HOWTO and what is it not?; 2.3. Knowledge Pre-Requisites; 2.4. Software Pre-Requisites: Kernel Version and nfs-utils; 2.5. Where to get help and further information; 3. Setting Up an NFS Server: ; 3.1. Introduction to the server setup; 3.2. Setting up the Configuration Files; 3.3. Getting the services started; 3.4. Verifying that NFS is running; 3.5. Making changes to /etc/exports later on; 4. Setting up an NFS Client: ; 4.1. Mounting remote directories; 4.2. Getting NFS File Systems to Be Mounted at Boot Time; 4.3. Mount options; 5. Optimizing NFS Performance: ; 5.1. Setting Block Size to Optimize Transfer Speeds; 5.2. Packet Size and Network Drivers; 5.3. Number of Instances of NFSD; 5.4. Memory Limits on the Input Queue; 5.5. Overflow of Fragmented Packets; 5.6. Turning Off Autonegotiation of NICs and Hubs; 5.7. Non-NFS-Related Means of Enhancing Server Performance; 6. Security and NFS: ; 6.1. The portmapper; 6.2. Server security: nfsd and mountd; 6.3. Client Security; 6.4. NFS and firewalls (ipchains and netfilter); 6.5. Summary; 7. Troubleshooting: ; 7.1. Unable to See Files on a Mounted File System; 7.2. File requests hang or timeout waiting for access to the file.; 7.3. Unable to mount a file system; 7.4. I do not have permission to access files on the mounted volume.; 7.5. When I transfer really big files, NFS takes over  
-all the CPU cycles on the server and it screeches to a halt.; 7.6. Strange error or log messages; 7.7. Real permissions don't match what's in /etc/exports.; 7.8. Flaky and unreliable behavior; 7.9. nfsd won't start; 8. Using Linux NFS with Other OSes: ; 8.1. AIX; 8.2. BSD; 8.3. Compaq Tru64 Unix; 8.4. HP-UX; 8.5. IRIX; 8.6. Solaris; 8.7. SunOS  
-!!!1. Preamble  
-!!1.1. Legal stuff  
-  
-Copyright (c) `2001b by Tavis Barr, Nicolai Langfeldt, and Seth Vidal.  
-This material may be distributed only subject to the terms and conditions set  
-forth in the Open Publication License, v1.0 or later (the latest version  
-is presently available at http://www.opencontent.org/openpub/).  
-  
-----  
-!!1.2. Disclaimer  
-  
-This document is provided without any guarantees, including  
-merchantability or fitness for a particular use. The maintainers  
-cannot be responsible if following instructions in this document  
-leads to damaged equipment or data, angry neighbors, strange habits,  
-divorce, or any other calamity.  
-  
-----  
-!!1.3. Feedback  
-  
-This will never be a finished document; we welcome feedback about  
-how it can be improved. As of October 2000, the Linux NFS home  
-page is being hosted at http://nfs.sourceforge.net. Check there  
-for mailing lists, bug fixes, and updates, and also to verify  
-who currently maintains this document.  
-  
-  
-----  
-!!1.4. Translation  
-  
-If you are able to translate this document into another language,  
-we would be grateful and we will also do our best to assist you.  
-Please notify the maintainers.  
-  
-----  
-!!1.5. Dedication  
-  
-NFS on Linux was made possible by a collaborative effort of many  
-people, but a few stand out for special recognition. The original  
-version was developed by Olaf Kirch and Alan Cox. The version 3  
-server code was solidified by Neil Brown, based on work from  
-Saadia Khan, James Yarbrough, Allen Morris, H.J. Lu, and others  
-(including himself). The client code was written by Olaf Kirch and  
-updated by Trond Myklebust. The version 4 lock manager was developed  
-by Saadia Khan. Dave Higgen and H.J. Lu both have undertaken the  
-thankless job of extensive maintenance and bug fixes to get the  
-code to actually work the way it was supposed to. H.J. has also  
-done extensive development of the nfs-utils package. Of course this  
-dedication is leaving many people out.  
-  
-  
-  
-The original version of this document was developed by Nicolai  
-Langfeldt. It was heavily rewritten in 2000 by Tavis Barr  
-and Seth Vidal to reflect substantial changes in the workings  
-of NFS for Linux developed between the 2.0 and 2.4 kernels.  
-Thomas Emmel, Neil Brown, Trond Myklebust, Erez Zadok, and Ion Badulescu  
-also provided valuable comments and contributions.  
-  
-----  
-!!!2. Introduction  
-!!2.1. What is NFS?  
-  
- The Network File System (NFS) was developed to allow machines  
-to mount a disk partition on a remote machine as if it were on  
-a local hard drive. This allows for fast, seamless sharing of  
-files across a network.  
-  
-  
-  
-  
- It also gives the potential for unwanted people to access your  
-hard drive over the network (and thereby possibly read your email  
-and delete all your files as well as break into your system) if  
-you set it up incorrectly. So please read the Security section of  
-this document carefully if you intend to implement an NFS setup.  
-  
-  
-  
-  
- There are other systems that provide similar functionality to NFS.  
-Samba provides file services to Windows clients. The Andrew File  
-System from IBM (http://www.transarc.com/Product/EFS/AFS/index.html),  
-recently open-sourced, provides a file sharing mechanism with some  
-additional security and performance features. The Coda File System  
-(http://www.coda.cs.cmu.edu/) is still in development as of this writing  
-but is designed to work well with disconnected clients. Many of the  
-features of the Andrew and Coda file systems are slated for inclusion  
-in the next version of NFS (Version 4) (http://www.nfsv4.org). The  
-advantage of NFS today is that it is mature, standard, well understood,  
-and supported robustly across a variety of platforms.  
-  
-  
-----  
-!!2.2. What is this HOWTO and what is it not?  
-  
- This HOWTO is intended as a complete, step-by-step guide to setting  
-up NFS correctly and effectively. Setting up NFS involves two steps,  
-namely configuring the server and then configuring the client. Each  
-of these steps is dealt with in order. The document then offers  
-some tips for people with particular needs and hardware setups, as  
-well as security and troubleshooting advice.  
-  
-  
-  
-  
- This HOWTO is not a description of the guts and  
-underlying structure of NFS. For that you may wish to read  
-''Managing NFS and NIS'' by Hal Stern, published by O'Reilly 8  
-Associates, Inc. While that book is severely out of date, much  
-of the structure of NFS has not changed, and the book describes it  
-very articulately. A much more advanced and up-to-date technical  
-description of NFS is available in ''NFS Illustrated'' by Brent Callaghan.  
-  
-  
-  
-  
- This document is also not intended as a complete reference manual,  
-and does not contain an exhaustive list of the features of Linux  
-NFS. For that, you can look at the man pages for ''nfs(5)'',  
-''exports(5)'', ''mount(8)'', ''fstab(5)'',  
-''nfsd(8)'', ''lockd(8)'', ''statd(8)'',  
-''rquotad(8)'', and ''mountd(8)''.  
-  
-  
-  
-  
- It will also not cover PC-NFS, which is considered obsolete (users  
-are encouraged to use Samba to share files with PC's) or NFS  
-Version 4, which is still in development.  
-  
-  
-----  
-!!2.3. Knowledge Pre-Requisites  
-  
- You should know some basic things about TCP/IP networking before  
-reading this HOWTO; if you are in doubt, read the  
-Networking-  
-Overview-HOWTO.  
-  
-  
-----  
-!!2.4. Software Pre-Requisites: Kernel Version and nfs-utils  
-  
- The difference between Version 2 NFS and version 3 NFS will be  
-explained later on; for now, you might simply take the suggestion  
-that you will need NFS Version 3 if you are installing a dedicated  
-or high-volume file server. NFS Version 2 should be fine for  
-casual use.  
-  
-  
-  
-  
- NFS Version 2 has been around for quite some time now (at least  
-since the 1.2 kernel series) however you will need a kernel version  
-of at least 2.2.18 if you wish to do any of the following:  
-  
-  
-  
-  
-  
-*  
-  
-Mix Linux NFS with other operating systems' NFS  
-  
-  
-*  
-*  
-  
-Use file locking reliably over NFS  
-  
-  
-*  
-*  
-  
-Use NFS Version 3.  
-  
-  
-*  
-  
-  
-  
-  
- There are also patches available for kernel versions above 2.2.14  
-that provide the above functionality. Some of them can be downloaded  
-from the Linux NFS homepage. If your kernel version is 2.2.14-  
-2.2.17 and you have the source code on hand, you can tell if these  
-patches have been added because NFS Version 3 server support will be  
-a configuration option. However, unless you have some particular  
-reason to use an older kernel, you should upgrade because many bugs  
-have been fixed along the way.  
-  
-  
-  
-  
- Version 3 functionality will also require the nfs-utils package of  
-at least version .1.6, and mount version 2.10m or newer. However  
-because nfs-utils and mount are fully backwards compatible, and because  
-newer versions have lots of security and bug fixes, there is no good  
-reason not to install the newest nfs-utils and mount packages if you  
-are beginning an NFS setup.  
-  
-  
-  
-  
- All 2.4 and higher kernels have full NFS Version 3 functionality.  
-  
-  
-  
-  
- All kernels after 2.2.18 support NFS over TCP on the client side.  
-As of this writing, server-side NFS over TCP only exists in the  
-later 2.2 series (but not yet in the 2.4 kernels), is considered  
-experimental, and is somewhat buggy.  
-  
-  
-  
-  
- Because so many of the above functionalities were introduced in  
-kernel version 2.2.18, this document was written to be consistent  
-with kernels above this version (including 2.4.x). If you have an  
-older kernel, this document may not describe your NFS system  
-correctly.  
-  
-  
-  
-  
- As we write this document, NFS version 4 is still in development  
-as a protocol, and it will not be dealt with here.  
-  
-  
-----  
-!!2.5. Where to get help and further information  
-  
- As of November 2000, the Linux NFS homepage is at  
-http://nfs.sourceforge.net. Please check there for NFS related  
-mailing lists as well as the latest version of nfs-utils, NFS  
-kernel patches, and other NFS related packages.  
-  
-  
-  
-  
- You may also wish to look at the man pages for ''nfs(5)'',  
-''exports(5)'', ''mount(8)'', ''fstab(5)'',  
-''nfsd(8)'', ''lockd(8)'', ''statd(8)'',  
-''rquotad(8)'', and ''mountd(8)''.  
-  
-  
-----  
-!!!3. Setting Up an NFS Server  
-!!3.1. Introduction to the server setup  
-  
- It is assumed that you will be setting up both a server and a  
-client. If you are just setting up a client to work off of  
-somebody else's server (say in your department), you can skip  
-to Section 4. However, every client that is set up requires  
-modifications on the server to authorize that client (unless  
-the server setup is done in a very insecure way), so even if you  
-are not setting up a server you may wish to read this section to  
-get an idea what kinds of authorization problems to look out for.  
-  
-  
-  
-  
- Setting up the server will be done in two steps: Setting up the  
-configuration files for NFS, and then starting the NFS services.  
-  
-  
-----  
-!!3.2. Setting up the Configuration Files  
-  
- There are three main configuration files you will need to edit to  
-set up an NFS server: /etc/exports,  
-/etc/hosts.allow, and /etc/hosts.deny.  
-Strictly speaking, you only need to edit /etc/exports to get  
-NFS to work, but you would be left with an extremely insecure setup. You may also need  
-to edit your startup scripts; see Section 3.3.3 for more on that.  
-  
-  
-----  
-!3.2.1. /etc/exports  
-  
- This file contains a list of entries; each entry indicates a volume  
-that is shared and how it is shared. Check the man pages (__man  
-exports__) for a complete description of all the setup options for  
-the file, although the description here will probably satistfy  
-most people's needs.  
-  
-  
-  
-  
- An entry in /etc/exports will typically look like this:  
-  
- directory machine1(option11,option12) machine2(option21,option22)  
-  
-  
-  
- where  
-; __directory__:  
-  
- the directory that you want to share. It may be an  
-entire volume though it need not be. If you share a directory,  
-then all directories under it within the same file system will  
-be shared as well.  
-  
-  
-; __machine1 and machine2__:  
-  
- client machines that will have access to the directory. The machines  
-may be listed by their IP address or their DNS address  
-(e.g., ''machine.company.com'' or ''192.168..8'').  
-Using IP addresses is more reliable and more secure.  
-  
-  
-; __optionxx__:  
-  
- the option listing for each machine will describe what kind of  
-access that machine will have. Important options are:  
-  
-  
-  
-  
-  
-*  
-  
- __ro__: The directory is shared read only; the client machine  
-will not be able to write to it. This is the default.  
-  
-  
-  
-*  
-*  
-  
- __rw__: The client machine will have read and write access to the  
-directory.  
-  
-  
-  
-*  
-*  
-  
- __no_root_squash__: By default, any file request made by user root  
-on the client machine is treated as if it is made by user  
-nobody on the server. (Excatly which UID the request is  
-mapped to depends on the UID of user "nobody" on the server,  
-not the client.) If no_root_squash is selected, then  
-root on the client machine will have the same level of access  
-to the files on the system as root on the server. This  
-can have serious security implications, although it may be  
-necessary if you want to perform any administrative work on  
-the client machine that involves the exported directories.  
-You should not specify this option without a good reason.  
-  
-  
-  
-*  
-*  
-  
- __no_subtree_check__: If only part of a volume is exported, a  
-routine called subtree checking verifies that a file that is  
-requested from the client is in the appropriate part of the  
-volume. If the entire volume is exported, disabling this check  
-will speed up transfers.  
-  
-  
-  
-*  
-*  
-  
- __sync__: By default, a Version 2 NFS server will tell a client  
-machine that a file write is complete when NFS has finished  
-handing the write over to the filesysytem; however, the file  
-system may not sync it to the disk, even if the client makes  
-a sync() call on the file system. The default behavior may  
-therefore cause file corruption if the server reboots. This  
-option forces the filesystem to sync to disk every time NFS  
-completes a write operation. It slows down write times  
-substantially but may be necessary if you are running NFS  
-Version 2 in a production environment. Version 3 NFS has  
-a commit operation that the client can call that  
-actually will result in a disk sync on the server end.  
-  
-  
-  
-*  
-  
-  
-  
-  
-  
-  
- Suppose we have two client machines, ''slave1'' and ''slave2'', that have IP  
-addresses ''192.168..1'' and ''192.168..2'', respectively. We wish to share  
-our software binaries and home directories with these machines.  
-A typical setup for /etc/exports might look like this:  
-  
- /usr/local 192.168..1(ro) 192.168..2(ro)  
-/home 192.168..1(rw) 192.168..2(rw)  
-  
-  
-  
-  
- Here we are sharing /usr/local read-only to slave1 and slave2,  
-because it probably contains our software and there may not be  
-benefits to allowing slave1 and slave2 to write to it that outweigh  
-security concerns. On the other hand, home directories need to be  
-exported read-write if users are to save work on them.  
-  
-  
-  
- If you have a large installation, you may find that you have a bunch  
-of computers all on the same local network that require access to  
-your server. There are a few ways of simplifying references  
-to large numbers of machines. First, you can give access to a range  
-of machines at once by specifying a network and a netmask. For  
-example, if you wanted to allow access to all the machines with IP  
-addresses between ''192.168..'' and  
-''192.168..255'' then you could have the entries:  
-  
- /usr/local 192.168../255.255.255.(ro)  
-/home 192.168../255.255.255.(rw)  
-  
-  
-  
-  
- See the Networking-Overview HOWTO  
-for further information about how netmasks work, and you may also wish to  
-look at the man pages for init and hosts.allow.  
-  
-  
-  
- Second, you can use NIS netgroups in your entry. To specify a  
-netgroup in your exports file, simply prepend the name of the  
-netgroup with an "@". See the NIS HOWTO  
-for details on how netgroups work.  
-  
-  
-  
- Third, you can use wildcards such as ''*.foo.com'' or  
-''192.168.'' instead of hostnames.  
-  
-  
-  
- However, you should keep in mind that any of these simplifications  
-could cause a security risk if there are machines in your netgroup  
-or local network that you do not trust completely.  
-  
-  
-  
- A few cautions are in order about what cannot (or should not) be  
-exported. First, if a directory is exported, its parent and child  
-directories cannot be exported if they are in the same filesystem.  
-However, exporting both should not be necessary because listing the  
-parent directory in the /etc/exports file will cause all underlying  
-directories within that file system to be exported.  
-  
-  
-  
- Second, it is a poor idea to export a FAT or VFAT (i.e., MS-DOS or  
-Windows 95/98) filesystem with NFS. FAT is not designed for use on a  
-multi-user machine, and as a result, operations that depend on  
-permissions will not work well. Moreover, some of the underlying  
-filesystem design is reported to work poorly with NFS's expectations.  
-  
-  
-  
- Third, device or other special files may not export correctly to non-Linux  
-clients. See Section 8 for details on particular operating systems.  
-  
-----  
-!3.2.2. /etc/hosts.allow and /etc/hosts.deny  
-  
- These two files specify which computers on the network can use  
-services on your machine. Each line of the file is an entry listing  
-a service and a set of machines. When the server gets a request  
-from a machine, it does the following:  
-  
-  
-  
-  
-  
-*  
-  
- It first checks hosts.allow to see if the machine  
-matches a description listed in there. If it does, then the machine  
-is allowed access.  
-  
-  
-  
-*  
-*  
-  
- If the machine does not match an entry in hosts.allow, the  
-server then checks hosts.deny to see if the client matches a  
-listing in there. If it does then the machine is denied access.  
-  
-  
-  
-*  
-*  
-  
- If the client matches no listings in either file, then it  
-is allowed access.  
-  
-  
-  
-*  
-  
-  
-  
-  
- In addition to controlling access to services handled by inetd (such  
-as telnet and FTP), this file can also control access to NFS  
-by restricting connections to the daemons that provide NFS services.  
-Restrictions are done on a per-service basis.  
-  
-  
-  
-  
- The first daemon to restrict access to is the portmapper. This daemon  
-essentially just tells requesting clients how to find all the NFS  
-services on the system. Restricting access to the portmapper is the  
-best defense against someone breaking into your system through NFS  
-because completely unauthorized clients won't know where to find the  
-NFS daemons. However, there are two things to watch out for. First,  
-restricting portmapper isn't enough if the intruder already knows  
-for some reason how to find those daemons. And second, if you are  
-running NIS, restricting portmapper will also restrict requests to NIS.  
-That should usually be harmless since you usually want  
-to restrict NFS and NIS in a similar way, but just be cautioned.  
-(Running NIS is generally a good idea if you are running NFS, because  
-the client machines need a way of knowing who owns what files on the  
-exported volumes. Of course there are other ways of doing this such  
-as syncing password files. See the NIS HOWTO for information on  
-setting up NIS.)  
-  
-  
-  
-  
- In general it is a good idea with NFS (as with most internet services)  
-to explicitly deny access to hosts that you don't need to allow access  
-to.  
-  
-  
-  
-  
- The first step in doing this is to add the followng entry to  
-/etc/hosts.deny:  
-  
-  
-  
-  
-  
- portmap:ALL  
-  
-  
-  
-  
-  
- Starting with nfs-utils .2., you can be a bit more careful by  
-controlling access to individual daemons. It's a good precaution  
-since an intruder will often be able to weasel around the portmapper.  
-If you have a newer version of NFS-utils, add entries for each of the  
-NFS daemons (see the next section to find out what these daemons are;  
-for now just put entries for them in hosts.deny):  
-  
-  
-  
-  
-  
- lockd:ALL  
-mountd:ALL  
-rquotad:ALL  
-statd:ALL  
-  
-  
-  
-  
-  
-  
-Even if you have an older version of ''nfs-utils'', adding these entries  
-is at worst harmless (since they will just be ignored) and at best  
-will save you some trouble when you upgrade. Some sys admins choose  
-to put the entry __ALL:ALL__ in the file /etc/hosts.deny,  
-which causes any service that looks at these files to deny access to all  
-hosts unless it is explicitly allowed. While this is more secure  
-behavior, it may also get you in trouble when you are installing new  
-services, you forget you put it there, and you can't figure out for  
-the life of you why they won't work.  
-  
-  
-  
-  
- Next, we need to add an entry to hosts.allow to give any hosts  
-access that we want to have access. (If we just leave the above  
-lines in hosts.deny then nobody will have access to NFS.) Entries  
-in hosts.allow follow the format  
-  
-  
-  
-  
-  
- service: host [[or network/netmask] , host [[or network/netmask]  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Here, host is IP address of a potential client; it may be possible  
-in some versions to use the DNS name of the host, but it is strongly  
-deprecated.  
-  
-  
-  
-  
- Suppose we have the setup above and we just want to allow access  
-to ''slave1.foo.com'' and ''slave2.foo.com'',  
-and suppose that the IP addresses of these machines are ''192.168..1''  
-and ''192.168..2'', respectively. We could add the following entry to  
-/etc/hosts.allow:  
-  
-  
-  
-  
-  
- portmap: 192.168..1 , 192.168..2  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- For recent nfs-utils versions, we would also add the following  
-(again, these entries are harmless even if they are not supported):  
-  
-  
-  
-  
-  
- lockd: 192.168..1 , 192.168..2  
-rquotad: 192.168..1 , 192.168..2  
-mountd: 192.168..1 , 192.168..2  
-statd: 192.168..1 , 192.168..2  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- If you intend to run NFS on a large number of machines in a local  
-network, /etc/hosts.allow also allows for network/netmask style  
-entries in the same manner as /etc/exports above.  
-  
-  
-----  
-!!3.3. Getting the services started  
-!3.3.1. Pre-requisites  
-  
- The NFS server should now be configured and we can start it running.  
-First, you will need to have the appropriate packages installed.  
-This consists mainly of a new enough kernel and a new enough version  
-of the nfs-utils package. See Section 2.4 if you are in doubt.  
-  
-  
-  
-  
- Next, before you can start NFS, you will need to have TCP/IP  
-networking functioning correctly on your machine. If you can use  
-telnet, FTP, and so on, then chances are your TCP networking is fine.  
-  
-  
-  
-  
- That said, with most recent Linux distributions you may be able to  
-get NFS up and running simply by rebooting your machine, and the  
-startup scripts should detect that you have set up your /etc/exports  
-file and will start up NFS correctly. If you try this, see Section 3.4  
-Verifying that NFS is running. If this does not work, or if  
-you are not in a position to reboot your machine, then the following  
-section will tell you which daemons need to be started in order to  
-run NFS services. If for some reason nfsd was already running when  
-you edited your configuration files above, you will have to flush  
-your configuration; see Section 3.5 for details.  
-  
-  
-----  
-!3.3.2. Starting the Portmapper  
-  
- NFS depends on the portmapper daemon, either called __portmap__ or  
-__rpc.portmap__. It will need to be started first. It should be  
-located in /sbin but is sometimes in /usr/sbin.  
-Most recent Linux distributions start this daemon in the boot scripts, but it is  
-worth making sure that it is running before you begin working with  
-NFS (just type __ps aux | grep portmap__).  
-  
-  
-----  
-!3.3.3. The Daemons  
-  
- NFS serving is taken care of by five daemons: rpc.nfsd, which does  
-most of the work; rpc.lockd and rpc.statd, which handle file locking;  
-rpc.mountd, which handles the initial mount requests, and  
-rpc.rquotad, which handles user file quotas on exported volumes.  
-Starting with 2.2.18, lockd is called by nfsd upon demand, so you do  
-not need to worry about starting it yourself. statd will need to be  
-started separately. Most recent Linux distributions will  
-have startup scripts for these daemons.  
-  
-  
-  
-  
- The daemons are all part of the nfs-utils package, and may be either  
-in the /sbin directory or the /usr/sbin directory.  
-  
-  
-  
-  
- If your distribution does not include them in the startup scripts,  
-then then you should add them, configured to start in the following  
-order:  
-  
-  
-  
-  
-  
-rpc.portmaprpc.mountd, rpc.nfsdrpc.statd, rpc.lockd (if necessary), rpc.rquotad  
-  
-  
-  
-  
-  
-  
-  
-  
- The nfs-utils package has sample startup scripts for !RedHat and  
-Debian. If you are using a different distribution, in general you  
-can just copy the !RedHat script, but you will probably have to take  
-out the line that says:  
-  
- . ../init.d/functions  
-  
-to avoid getting error messages.  
-  
-  
-----  
-!!3.4. Verifying that NFS is running  
-  
- To do this, query the portmapper with the command __rpcinfo -p__ to  
-find out what services it is providing. You should get something  
-like this:  
-  
- program vers proto port  
-100000 2 tcp 111 portmapper  
-100000 2 udp 111 portmapper  
-100011 1 udp 749 rquotad  
-100011 2 udp 749 rquotad  
-100005 1 udp 759 mountd  
-100005 1 tcp 761 mountd  
-100005 2 udp 764 mountd  
-100005 2 tcp 766 mountd  
-100005 3 udp 769 mountd  
-100005 3 tcp 771 mountd  
-100003 2 udp 2049 nfs  
-100003 3 udp 2049 nfs  
-300019 1 tcp 830 amd  
-300019 1 udp 831 amd  
-100024 1 udp 944 status  
-100024 1 tcp 946 status  
-100021 1 udp 1042 nlockmgr  
-100021 3 udp 1042 nlockmgr  
-100021 4 udp 1042 nlockmgr  
-100021 1 tcp 1629 nlockmgr  
-100021 3 tcp 1629 nlockmgr  
-100021 4 tcp 1629 nlockmgr  
-  
-  
-  
-  
-  
- This says that we have NFS versions 2 and 3, rpc.statd version 1,  
-network lock manager (the service name for rpc.lockd) versions 1, 3,  
-and 4. There are also different service listings depending on  
-whether NFS is travelling over TCP or UDP. Linux systems use UDP  
-by default unless TCP is explicitly requested; however other OSes  
-such as Solaris default to TCP.  
-  
-  
-  
-  
- If you do not at least see a line that says "portmapper", a line  
-that says "nfs", and a line that says "mountd" then you will need  
-to backtrack and try again to start up the daemons (see Section 7,  
-Troubleshooting, if this still doesn't work).  
-  
-  
-  
-  
- If you do see these services listed, then you should be ready to  
-set up NFS clients to access files from your server.  
-  
-  
-----  
-!!3.5. Making changes to /etc/exports later on  
-  
- If you come back and change your /etc/exports file, the changes you  
-make may not take effect immediately. You should run the command  
-__exportfs -ra__ to force nfsd to re-read the /etc/exports  
-  file. If you can't find the __exportfs__ command, then you can kill nfsd with the  
-__ -HUP__ flag (see the man pages for kill for details).  
-  
-  
-  
-  
- If that still doesn't work, don't forget to check hosts.allow to  
-make sure you haven't forgotten to list any new client machines  
-there. Also check the host listings on any firewalls you may have  
-set up (see Section 7 for more details on firewalls  
-and NFS).  
-  
-  
-----  
-!!!4. Setting up an NFS Client  
-!!4.1. Mounting remote directories  
-  
- Before beginning, you should double-check to make sure your mount  
-program is new enough (version 2.10m if you want to use Version 3  
-NFS), and that the client machine supports NFS mounting, though most  
-standard distributions do. If you are using a 2.2 or later kernel  
-with the /proc filesystem you can check the latter by reading the  
-file /proc/filesystems and making sure there is a line containing  
-nfs. If not, you will need to build (or download) a kernel that has  
-NFS support built in.  
-  
-  
-  
-  
- To begin using machine as an NFS client, you will need the portmapper  
-running on that machine, and to use NFS file locking, you will  
-also need rpc.statd and rpc.lockd  
-running on both the client and the server. Most recent distributions  
-start those services by default at boot time; if yours doesn't, see  
-Section 3.2 for information on how to start them up.  
-  
-  
-  
-  
- With portmapper, lockd, and statd running, you should now be able to  
-mount the remote directory from your server just the way you mount  
-a local hard drive, with the mount command. Continuing our example  
-from the previous section, suppose our server above is called  
-''master.foo.com'',and we want to mount the /home directory on  
-''slave1.foo.com''. Then, all we have to do, from the root prompt on  
-''slave1.foo.com'', is type:  
-  
- # mount master.foo.com:/home /mnt/home  
-  
-and the directory /home on master will appear as the directory  
-/mnt/home on ''slave1''.  
-  
-  
-  
-  
- If this does not work, see the Troubleshooting section (Section 7).  
-  
-  
-  
-  
- You can get rid of the file system by typing  
-  
- # umount /mnt/home  
-  
-just like you would for a local file system.  
-  
-  
-----  
-!!4.2. Getting NFS File Systems to Be Mounted at Boot Time  
-  
- NFS file systems can be added to your /etc/fstab file the same way  
-local file systems can, so that they mount when your system starts  
-up. The only difference is that the file system type will be  
-set to __nfs__ and the dump and fsck order (the last two entries) will  
-have to be set to zero. So for our example above, the entry in  
-/etc/fstab would look like:  
-  
- # device mountpoint fs-type options dump fsckorder  
-...  
-master.foo.com:/home /mnt nfs rw 0  
-...  
-  
-  
-  
-  
-  
- See the man pages for fstab if you are unfamiliar  
-with the syntax of this file. If you are using an automounter such as  
-amd or autofs, the options in the corresponding fields of your mount  
-listings should look very similar if not identical.  
-  
-  
-  
-  
- At this point you should have NFS working, though a few tweaks  
-may still be necessary to get it to work well. You should also  
-read Section 6 to be sure your setup is reasonably secure.  
-  
-  
-----  
-!!4.3. Mount options  
-!4.3.1. Soft vs. Hard Mounting  
-  
- There are some options you should consider adding at once. They  
-govern the way the NFS client handles a server crash or network  
-outage. One of the cool things about NFS is that it can handle this  
-gracefully. If you set up the clients right. There are two distinct  
-failure modes:  
-  
-  
-  
-  
- ; __soft__:  
-  
- If a file request fails, the NFS client will report an  
-error to the process on the client machine requesting the file  
-access. Some programs can handle this with composure, most  
-won't. We do not recommend using this setting; it is a recipe  
-for corrupted files and lost data. You should especially not  
-use this for mail disks --- if you value your mail, that is.  
-  
-  
-; __hard__:  
-  
- The program accessing a file on a NFS mounted file system  
-will hang when the server crashes. The process cannot be  
-interrupted or killed (except by a "sure kill") unless you also  
-specify intr. When the NFS server is back online the program will  
-continue undisturbed from where it was. We recommend using hard,  
-intr on all NFS mounted file systems.  
-  
-  
-  
-  
-  
-  
-  
- Picking up the from previous example, the fstab entry would now  
-look like:  
-  
- # device mountpoint fs-type options dump fsckord  
-...  
-master.foo.com:/home /mnt/home nfs rw,hard,intr 0  
-...  
-  
-  
-  
-----  
-!4.3.2. Setting Block Size to Optimize Transfer Speeds  
-  
- The __rsize__ and __wsize__ mount  
-options specify the size of the chunks of data that the client and  
-server pass back and forth to each other.  
-  
-  
-  
-  
- The defaults may be too big or to small; there is no size that works  
-well on all or most setups. On the one hand, some combinations of  
-Linux kernels and network cards (largely on older machines) cannot  
-handle blocks that large. On the other hand, if they can handle  
-larger blocks, a bigger size might be faster.  
-  
-  
-  
-  
- Getting the block size right is an important factor in performance and  
-is a must if you are planning to use the NFS server in a production  
-environment. See Section 5 for details.  
-  
-  
-----  
-!!!5. Optimizing NFS Performance  
-  
- Getting network settings right can improve NFS performance many times  
-over -- a tenfold increase in transfer speeds is not unheard of.  
-The most important things to get right are the __rsize__  
-and __wsize__ __mount__ options. Other factors listed below  
-may affect people with particular hardware setups.  
-  
-  
-----  
-!!5.1. Setting Block Size to Optimize Transfer Speeds  
-  
- The __rsize__ and __wsize__  
-__mount__ options specify the size of the chunks of data  
-that the client and server pass back and forth to each other. If no  
-__rsize__ and __wsize__ options  
-are specified, the default varies by which version of NFS we are using.  
-4096 bytes is the most common default, although for TCP-based mounts  
-in 2.2 kernels, and for all mounts beginning with 2.4 kernels, the  
-server specifies the default block size.  
-  
-  
-  
-  
- The defaults may be too big or too small. On the one hand, some  
-combinations of Linux kernels and network cards (largely on older  
-machines) cannot handle blocks that large. On the other hand, if they  
-can handle larger blocks, a bigger size might be faster.  
-  
-  
-  
-  
- So we'll want to experiment and find an rsize and wsize that works  
-and is as fast as possible. You can test the speed of your options  
-with some simple commands.  
-  
-  
-  
-  
- The first of these commands transfers 16384 blocks of 16k each from  
-the special file /dev/zero (which if you read it  
-just spits out zeros _really_ fast) to the mounted partition. We will  
-time it to see how long it takes. So, from the client machine, type:  
-  
- # time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384  
-  
-  
-  
-  
-  
- This creates a 256Mb file of zeroed bytes. In general, you should  
-create a file that's at least twice as large as the system RAM  
-on the server, but make sure you have enough disk space! Then read  
-back the file into the great black hole on the client machine  
-(/dev/null) by typing the following:  
-  
- # time dd if=/mnt/home/testfile of=/dev/null bs=16k  
-  
-  
-  
-  
-  
- Repeat this a few times and average how long it takes. Be sure to  
-unmount and remount the filesystem each time (both on the client and,  
-if you are zealous, locally on the server as well), which should clear  
-out any caches.  
-  
-  
-  
-  
- Then unmount, and mount again with a larger and smaller block size.  
-They should probably be multiples of 1024, and not larger than  
-8192 bytes since that's the maximum size in NFS version 2. (Though  
-if you are using Version 3 you might want to try up to 32768.)  
-Wisdom has it that the block size should be a power of two since most  
-of the parameters that would constrain it (such as file system block  
-sizes and network packet size) are also powers of two. However, some  
-users have reported better successes with block sizes that are not  
-powers of two but are still multiples of the file system block size  
-and the network packet size.  
-  
-  
-  
-  
- Directly after mounting with a larger size, cd into the mounted  
-file system and do things like ls, explore the fs a bit to make  
-sure everything is as it should. If the rsize/wsize is too large  
-the symptoms are very odd and not 100% obvious. A typical symptom  
-is incomplete file lists when doing 'ls', and no error messages.  
-Or reading files failing mysteriously with no error messages. After  
-establishing that the given rsize/wsize works you can do the speed  
-tests again. Different server platforms are likely to have different  
-optimal sizes. SunOS and Solaris is reputedly a lot faster with 4096  
-byte blocks than with anything else.  
-  
-  
-  
-  
- ''Remember to edit /etc/fstab to reflect the rsize/wsize you found.''  
-  
-  
-----  
-!!5.2. Packet Size and Network Drivers  
-  
- There are many shoddy network drivers available for Linux,  
-including for some fairly standard cards.  
-  
-  
-  
-  
- Try pinging back and forth between the two machines with large  
-packets using the -f and -s  
-options with __ping__ (see __man ping__)  
-for more details and see if a lot of packets get or if they  
-take a long time for a reply. If so, you may have a problem  
-with the performance of your network card.  
-  
-  
-  
-  
- To correct such a problem, you may wish to reconfigure the packet  
-size that your network card uses. Very often there is a constraint  
-somewhere else in the network (such as a router) that causes a  
-smaller maximum packet size between two machines than what the  
-network cards on the machines are actually capable of. TCP should  
-autodiscover the appropriate packet size for a network, but UDP  
-will simply stay at a default value. So determining the appropriate  
-packet size is especially important if you are using NFS over UDP.  
-  
-  
-  
-  
- You can test for the network packet size using the tracepath command:  
-From the client machine, just type __tracepath [[server] 2049__  
-and the path MTU should be reported at the bottom. You can then set the  
-MTU on your network card equal to the path MTU, by using the MTU option  
-to __ifconfig__, and see if fewer packets get dropped.  
-See the __ifconfig__ man pages for details on how to reset the MTU.  
-  
-  
-----  
-!!5.3. Number of Instances of NFSD  
-  
- Most startup scripts, Linux and otherwise, start 8 instances of nfsd.  
-In the early days of NFS, Sun decided on this number as a rule of thumb,  
-and everyone else copied. There are no good measures of how many  
-instances are optimal, but a more heavily-trafficked server may require  
-more. If you are using a 2.4 or higher kernel and you want to see how  
-heavily each nfsd thread is being used, you can look at the file  
-/proc/net/rpc/nfsd. The last ten numbers on the  
-''th'' line in that file indicate the number of seconds  
-that the thread usage was at that percentage of the maximum allowable.  
-If you have a large number in the top three deciles, you may wish to  
-increase the number of __nfsd__ instances. This is done  
-upon starting __nfsd__ using the number of instances as  
-the command line option. See the __nfsd__ man page for  
-more information.  
-  
-  
-----  
-!!5.4. Memory Limits on the Input Queue  
-  
- On 2.2 and 2.4 kernels, the socket input queue, where requests  
-sit while they are currently being processed, has a small default  
-size limit of 64k. This means that if you are running 8 instances of  
-__nfsd__, each will only have 8k to store requests while it processes  
-them.  
-  
-  
-  
-  
- You should consider increasing this number to at least 256k for __nfsd__.  
-This limit is set in the proc file system using the files  
-/proc/sys/net/core/rmem_default and /proc/sys/net/core/rmem_max.  
-It can be increased in three steps; the following method is a bit of  
-a hack but should work and should not cause any problems:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-Increase the size listed in the file:  
-  
- echo 262144 b /proc/sys/net/core/rmem_default  
-echo 262144 b /proc/sys/net/core/rmem_max  
-  
-  
-  
-  
-#  
-#  
-  
-  
-Restart __nfsd__, e.g., type __/etc/rc.d/init.d/nfsd restart__ on Red Hat  
-  
-  
-  
-#  
-#  
-  
- Return the size limits to their normal size in case other kernel systems depend on it:  
-  
-  
-echo 65536 b /proc/sys/net/core/rmem_default  
-echo 65536 b /proc/sys/net/core/rmem_max  
-  
-  
-  
-  
-  
- '' Be sure to perform this last step because machines have been reported  
-to crash if these values are left changed for long periods of time.  
-''  
-  
-  
-  
-#  
-  
-----  
-!!5.5. Overflow of Fragmented Packets  
-  
- The NFS protocol uses fragmented UDP packets. The kernel has  
-a limit of how many fragments of incomplete packets it can  
-buffer before it starts throwing away packets. With 2.2 kernels  
-that support the /proc filesystem, you can  
-specify how many by editing the files  
-/proc/sys/net/ipv4/ipfrag_high_thresh and  
-/proc/sys/net/ipv4/ipfrag_low_thresh.  
-  
-  
-  
-  
- Once the number of unprocessed, fragmented packets reaches the  
-number specified by __ipfrag_high_thresh__ (in bytes), the kernel  
-will simply start throwing away fragmented packets until the number  
-of incomplete packets reaches the number specified  
-by __ipfrag_low_thresh__. (With 2.2 kernels, the default is usually 256K).  
-This will look like packet loss, and if the high threshold is  
-reached your server performance drops a lot.  
-  
-  
-  
-  
- One way to monitor this is to look at the field IP: !ReasmFails in the  
-file /proc/net/snmp; if it goes up too quickly during heavy file  
-activity, you may have problem. Good alternative values for  
-__ipfrag_high_thresh__ and __ipfrag_low_thresh__  
-have not been reported; if you have a good experience with a  
-particular value, please let the maintainers and development team know.  
-  
-  
-----  
-!!5.6. Turning Off Autonegotiation of NICs and Hubs  
-  
- Sometimes network cards will auto-negotiate badly with  
-hubs and switches and this can have strange effects.  
-Moreover, hubs may lose packets if they have different  
-ports running at different speeds. Try playing around  
-with the network speed and duplex settings.  
-  
-  
-----  
-!!5.7. Non-NFS-Related Means of Enhancing Server Performance  
-  
- Offering general guidelines for setting up a well-functioning  
-file server is outside the scope of this document, but a few  
-hints may be worth mentioning: First, RAID 5 gives you good  
-read speeds but lousy write speeds; consider RAID 1/0 if both  
-write speed and redundancy are important. Second, using a  
-journalling filesystem will drastically reduce your reboot  
-time in the event of a system crash; as of this writing, ext3  
-(ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/) was the only  
-journalling filesystem that worked correctly with  
-NFS version 3, but no doubt that will change soon.  
-In particular, it looks like Reiserfs  
-should work with NFS version 3 on 2.4 kernels, though not yet  
-on 2.2 kernels. Finally, using an automounter (such as autofs  
-or amd) may prevent hangs if you cross-mount files  
-on your machines (whether on purpose or by oversight) and one of those  
-machines goes down. See the  
-Automount Mini-HOWTO  
-for details.  
-  
-  
-----  
-!!!6. Security and NFS  
-  
- This list of security tips and explanations will not make your site  
-completely secure. ''NOTHING'' will make your site completely secure. This  
-may help you get an idea of the security problems with NFS. This is not  
-a comprehensive guide and it will always be undergoing changes. If you  
-have any tips or hints to give us please send them to the HOWTO  
-maintainer.  
-  
-  
-  
-  
- If you're on a network with no access to the outside world (not even a  
-modem) and you trust all the internal machines and all your users then  
-this section will be of no use to you. However, its our belief that  
-there are relatively few networks in this situation so we would suggest  
-reading this section thoroughly for anyone setting up NFS.  
-  
-  
-  
-  
- There are two steps to file/mount access in NFS. The first step is mount  
-access. Mount access is achieved by the client machine attempting to  
-attach to the server. The security for this is provided by the  
-/etc/exports file. This file lists the names or ip addresses for machines  
-that are allowed to access a share point. If the client's ip address  
-matches one of the entries in the access list then it will be allowed to  
-mount. This is not terribly secure. If someone is capable of spoofing or  
-taking over a trusted address then they can access your mount points. To  
-give a real-world example of this type of "authentication": This is  
-equivalent to someone introducing themselves to you and you believe they  
-are who they claim to be because they are wearing a sticker that says  
-"Hello, My Name is ...."  
-  
-  
-  
-  
- The second step is file access. This is a function of normal file system  
-access controls and not a specialized function of NFS. Once the drive is  
-mounted the user and group permissions on the files take over access  
-control.  
-  
-  
-  
-  
- An example: bob on the server maps to the UserID 9999. Bob  
-makes a file on the server that is only accessible the user (0600 in  
-octal). A client is allowed to mount the drive where the file is stored.  
-On the client mary maps to UserID 9999. This means that the client  
-user mary can access bob's file that is marked as only accessible by him.  
-It gets worse, if someone has root on the client machine they can  
-__su - [[username]__ and become ANY user. NFS will be none  
-the wiser.  
-  
-  
-  
-  
- Its not all terrible. There are a few measures you can take on the server  
-to offset the danger of the clients. We will cover those shortly.  
-  
-  
-  
-  
- If you don't think the security measures apply to you, you're probably  
-wrong. In Section 6.1 we'll cover securing the portmapper,  
-server and client security in Section 6.2 and Section 6.3 respectively.  
-Finally, in Section 6.4 we'll briefly talk about proper firewalling for  
-your nfs server.  
-  
-  
-  
-  
- Finally, it is critical that all of your nfs daemons and client programs  
-are current. If you think that a flaw is too recently announced for it to  
-be a problem for you, then you've probably already been compromised.  
-  
-  
-  
-  
- A good way to keep up to date on security alerts is to subscribe to the  
-bugtraq mailinglists. You can read up on how to subscribe and various  
-other information about bugtraq here:  
-http://www.securityfocus.com/forums/bugtraq/faq.html  
-  
-  
-  
-  
- Additionally searching for ''NFS'' at  
-securityfocus.com's search engine will  
-show you all security reports pertaining to NFS.  
-  
-  
-  
-  
- You should also regularly check CERT advisories. See the CERT web page  
-at www.cert.org.  
-  
-  
-----  
-!!6.1. The portmapper  
-  
- The portmapper keeps a list of what services are running on what ports.  
-This list is used by a connecting machine to see what ports it wants to  
-talk to access certain services.  
-  
-  
-  
-  
-  
-The portmapper is not in as bad a shape as a few years ago but it is  
-still a point of worry for many sys admins. The portmapper, like NFS and  
-NIS, should not really have connections made to it outside of a trusted  
-local area network. If you have to expose them to the outside world -  
-be careful and keep up diligent monitoring of those systems.  
-  
-  
-  
-  
- Not all Linux distributions were created equal. Some seemingly up-to-  
-date distributions do not include a securable portmapper.  
-The easy way to check if your portmapper is good or not is to run  
-''strings(1)'' and see if it reads the relevant files, /etc/hosts.deny and  
-/etc/hosts.allow. Assuming your portmapper is /sbin/portmap you can  
-check it with this command:  
-  
- strings /sbin/portmap | grep hosts.  
-  
-  
-  
-  
-  
- On a securable machine it comes up something like this:  
-  
- /etc/hosts.allow  
-/etc/hosts.deny  
-@(#) hosts_ctl.c 1.4 94/12/28 17:42:27  
-@(#) hosts_access.c 1.21 97/02/12 02:13:22  
-  
-  
-  
-  
-  
- First we edit /etc/hosts.deny. It should contain the line  
-  
-  
-  
-  
-  
- portmap: ALL  
-  
-  
-  
-  
-  
- which will deny access to everyone. While it is closed run:  
-  
- rpcinfo -p  
-  
-just to check that your portmapper really reads and obeys  
-this file. Rpcinfo should give no output, or possibly an error message.  
-The files /etc/hosts.allow and /etc/hosts.deny  
-take effect immediately after you save them. No daemon needs to be restarted.  
-  
-  
-  
-  
- Closing the portmapper for everyone is a bit drastic, so we open it  
-again by editing /etc/hosts.allow. But first  
-we need to figure out what to put in it. It should basically list  
-all machines that should have access to your portmapper. On a run of  
-the mill Linux system there are very few machines that need any access  
-for any reason. The portmapper administers __nfsd__,  
-__mountd__, __ypbind__/__ypserv__,  
-__pcnfsd__, and 'r' services like __ruptime__ and __rusers__.  
-Of these only __nfsd__, __mountd__,  
-__ypbind__/__ypserv__ and perhaps  
-__pcnfsd__ are of any consequence. All machines that need  
-to access services on your machine should be allowed to do that. Let's  
-say that your machine's address is ''192.168..254'' and  
-that it lives on the subnet ''192.168..'', and that all  
-machines on the subnet should have access to it (those are terms introduced  
-by the Networking-Overview-HOWTO,  
-go back and refresh your memory if you need to). Then we write:  
-  
- portmap: 192.168../255.255.255.  
-  
-in /etc/hosts.allow. This is the same as the network  
-address you give to route and the subnet mask you give to __ifconfig__. For the  
-device eth0 on this machine __ifconfig__ should show:  
-  
-  
-  
-  
-  
- ...  
-eth0 Link encap:Ethernet HWaddr 00:60:8C:96:D5:56  
-inet addr:192.168..254 Bcast:192.168..255 Mask:255.255.255.  
-UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  
-RX packets:360315 errors:0 dropped:0 overruns:  
-TX packets:179274 errors:0 dropped:0 overruns:  
-Interrupt:10 Base address:0x320  
-...  
-  
-and __netstat -rn__ should show:  
-  
- Kernel routing table  
-Destination Gateway Genmask Flags Metric Ref Use Iface  
-...  
-192.168..0 ...0 255.255.255.0 U 0 0 174412 eth0  
-...  
-  
-(Network address in first column).  
-  
-  
-  
-  
- The /etc/hosts.deny and /etc/hosts.allow files are  
-described in the manual pages of the same names.  
-  
-  
-  
-  
- '' IMPORTANT: Do not put anything but IP NUMBERS in the portmap lines of  
-these files. Host name lookups can indirectly cause portmap activity  
-which will trigger host name lookups which can indirectly cause  
-portmap activity which will trigger...  
-''  
-  
-  
-  
-  
- Versions .2.0 and higher of the nfs-utils package also use the  
-hosts.allow and hosts.deny  
-files, so you should put in entries for __lockd__,  
-__statd__, __mountd__, and  
-__rquotad__ in these files too.  
-  
-  
-  
-  
- The above things should make your server tighter. The only remaining  
-problem (Yeah, right!) is someone breaking root (or boot MS-DOS) on a  
-trusted machine and using that privilege to send requests from a  
-secure port as any user they want to be.  
-  
-  
-----  
-!!6.2. Server security: nfsd and mountd  
-  
- On the server we can decide that we don't want to trust the client's  
-root account. We can do that by using the __root_squash__ option in  
-/etc/exports:  
-  
- /home slave1(rw,root_squash)  
-  
-  
-  
-  
-  
- This is, in fact, the default. It should always be turned on unless you  
-have a VERY good reason to turn it off. To turn it off use the  
-__no_root_squash__ option.  
-  
-  
-  
-  
- Now, if a user with ''UID'' 0 (i.e., root's user ID number)  
-on the client attempts to access (read, write, delete) the file system,  
-the server substitutes the ''UID'' of the server's 'nobody'  
-account. Which means that the root user on the client can't access or  
-change files that only root on the server can access or change. That's  
-good, and you should probably use __root_squash__ on  
-all the file systems you export. "But the root user on the client can  
-still use __su__ to become any other user and  
-access and change that users files!" say you. To which the answer is:  
-Yes, and that's the way it is, and has to be with Unix and NFS. This  
-has one important implication: All important binaries and files should be  
-owned by root, and not bin or other non-root account, since the only  
-account the clients root user cannot access is the servers root  
-account. In the ''exports(5)'' man page there are several other squash  
-options listed so that you can decide to mistrust whomever you (don't)  
-like on the clients.  
-  
-  
-  
-  
- The TCP ports 1-1024 are reserved for root's use (and therefore sometimes  
-referred to as "secure ports") A non-root user cannot bind these ports.  
-Adding the secure option to an /etc/exports entry forces it to run on a  
-port below 1024, so that a malicious non-root user cannot come along and  
-open up a spoofed NFS dialogue on a non-reserved port. This option is set  
-by default.  
-  
-  
-----  
-!!6.3. Client Security  
-!6.3.1. The nosuid mount option  
-  
- On the client we can decide that we don't want to trust the server too  
-much a couple of ways with options to mount. For example we can  
-forbid suid programs to work off the NFS file system with the nosuid  
-option. Some unix programs, such as passwd, are called "suid" programs:  
-They set the id of the person running them to whomever is the owner of  
-the file. If a file is owned by root and is suid, then the program will  
-execute as root, so that they can perform operations (such as writing to  
-the password file) that only root is allowed to do. Using the nosuid  
-option is a good idea and you should consider using this with all NFS  
-mounted disks. It means that the server's root user cannot make a suid-root  
-program on the file system, log in to the client as a normal user  
-and then use the suid-root program to become root on the client too.  
-One could also forbid execution of files on the mounted file system  
-altogether with the __noexec__ option.  
-But this is more likely to be impractical than nosuid since a file  
-system is likely to at least contain some scripts or programs that need  
-to be executed.  
-  
-  
-----  
-!6.3.2. The broken_suid mount option  
-  
- Some older programs (__xterm__ being one of them) used to rely on the idea  
-that root can write everywhere. This is will break under new kernels on  
-NFS mounts. The security implications are that programs that do this  
-type of suid action can potentially be used to change your apparent uid  
-on nfs servers doing uid mapping. So the default has been to disable this  
-__broken_suid__ in the linux kernel.  
-  
-  
-  
-  
- The long and short of it is this: If you're using an old linux  
-distribution, some sort of old suid program or an older unix of some  
-type you ''might'' have to mount from your clients with the  
-__broken_suid__ option to __mount__.  
-However, most recent unixes and linux distros have __xterm__ and such programs  
-just as a normal executable with no suid status, they call programs to do their setuid work.  
-  
-  
-  
-  
- You enter the above options in the options column, with the __rsize__ and  
-__wsize__, separated by commas.  
-  
-  
-----  
-!6.3.3. Securing portmapper, rpc.statd, and rpc.lockd on the client  
-  
- In the current (2.2.18+) implementation of nfs, full file locking is  
-supported. This means that __rpc.statd__ and __rpc.lockd__  
-must be running on the client in order for locks to function correctly.  
-These services require the portmapper to be running. So, most of the  
-problems you will find with nfs on the server you may also be plagued with  
-on the client. Read through the portmapper section above for information on  
-securing the portmapper.  
-  
-  
-----  
-!!6.4. NFS and firewalls (ipchains and netfilter)  
-  
- IPchains (under the 2.2.X kernels) and netfilter (under the 2.4.x  
-kernels) allow a good level of security - instead of relying on the  
-daemon (or in this case the tcp wrapper) to determine who can connect,  
-the connection attempt is allowed or disallowed at a lower level. In  
-this case you canstop the connection much earlier and more globaly which  
-can protect you from all sorts of attacks.  
-  
-  
-  
-  
- Describing how to set up a Linux firewall is well beyond the scope of  
-this document. Interested readers may wish to read the Firewall-HOWTO  
-or the IPCHAINS-HOWTO.  
-For users of kernel 2.4 and above you might want to visit the netfilter webpage at:  
-http://netfilter.filewatcher.org.  
-If you are already familiar with the workings of ipchains or netfilter  
-this section will give you a few tips on how to better setup your  
-firewall to work with NFS.  
-  
-  
-  
-  
- A good rule to follow for your firewall configuration is to deny all, and  
-allow only some - this helps to keep you from accidentally allowing more  
-than you intended.  
-  
-  
-  
-  
- Ports to be concerned with:  
-  
-  
-  
-  
-  
-#  
-  
-The portmapper is on 111. (tcp and udp)  
-  
-  
-#  
-#  
-  
- nfsd is on 2049 and it can be TCP and UDP. Although NFS over TCP  
-is currently experimental on the server end and you will usually  
-just see UDP on the server, using TCP is quite stable on the  
-client end.  
-  
-  
-  
-#  
-#  
-  
- __mountd__, __lockd__, and __statd__  
-float around (which is why we need the portmapper to begin with) - this causes  
-problems. You basically have two options to deal with it:  
-  
-  
-  
-  
-  
-##  
-  
- You more can more or less do a deny all on connecting ports  
-but explicitly allow most ports certain ips.  
-  
-  
-  
-##  
-##  
-  
- More recent versions of these utilities have a "-p" option  
-that allows you to assign them to a certain port. See the  
-man pages to be sure if your version supports this. You can  
-then allow access to the ports you have specified for your  
-NFS client machines, and seal off all other ports, even for  
-your local network.  
-  
-  
-  
-##  
-  
-  
-  
-#  
-  
-  
-  
-  
- Using IPCHAINS, a simply firewall using the first option would look  
-something like this:  
-  
- ipchains -A input -f -j ACCEPT  
-ipchains -A input -s trusted.net.here/trusted.netmask -d host.ip/255.255.255.255 -j ACCEPT  
-ipchains -A input -s /0 -d /0 -p 6 -j DENY -y -l  
-ipchains -A input -s /0 -d /0 -p 17 -j DENY -l  
-  
-  
-  
-  
-  
- The equivalent set of commands in netfilter (the firewalling tool in 2.4) is:  
-  
-  
-iptables -A INPUT -f -j ACCEPT  
-iptables -A INPUT -s trusted.net.here/trusted.netmask -d \  
-host.ip/255.255.255.255 -j ACCEPT  
-iptables -A INPUT -s /0 -d /0 -p 6 -j DENY --syn --log-level 5  
-iptables -A INPUT -s /0 -d /0 -p 17 -j DENY --log-level 5  
-  
-  
-  
-  
-  
- The first line says to accept all packet fragments (except the first  
-packet fragment which will be treated as a normal packet). In theory  
-no packet will pass through until it is reassembled, and it won't be  
-reassembled unless the first packet fragment is passed. Of course  
-there are attacks that can be generated by overloading a machine  
-with packet fragments. But NFS won't work correctly unless you  
-let fragments through. See Section 7 for details.  
-  
-  
-  
-  
- The other three lines say trust your local networks and deny and log  
-everything else. It's not great and more specific rules pay off, but  
-more specific rules are outside of the scope of this discussion.  
-  
-  
-  
-  
- Some pointers if you'd like to be more paranoid or strict about your  
-rules. If you choose to reset your firewall rules each time __statd__,  
-__rquotad__, __mountd__ or __lockd__  
-move (which is possible) you'll want to make sure you allow fragments to  
-your nfs server FROM your nfs client(s). If you don't you will get some very  
-interesting reports from the kernel regarding packets being denied. The messages  
-will say that a packet from port 65535 on the client to 65535 on the server  
-is being denied. Allowing fragments will solve this.  
-  
-  
-----  
-!!6.5. Summary  
-  
- If you use the hosts.allow, hosts.deny,  
-root_squash, __nosuid__ and privileged  
-port features in the portmapper/nfs software you avoid many of the  
-presently known bugs in nfs and can almost feel secure about that at  
-least. But still, after all that: When an intruder has access to your  
-network, s/he can make strange commands appear in your .forward or  
-read your mail when /home or /var/mail is  
-NFS exported. For the same reason, you should never access your PGP private key  
-over nfs. Or at least you should know the risk involved. And now you know a bit  
-of it.  
-  
-  
-  
-  
- NFS and the portmapper makes up a complex subsystem and therefore it's  
-not totally unlikely that new bugs will be discovered, either in the  
-basic design or the implementation we use. There might even be holes  
-known now, which someone is abusing. But that's life.  
-  
-  
-----  
-!!!7. Troubleshooting  
-  
-  
-  
-  
-  
- This is intended as a step-by-step guide to what to do when  
-things go wrong using NFS. Usually trouble first rears its  
-head on the client end, so this diagnostic will begin there.  
-  
-  
-  
-  
-  
-  
-----  
-!!7.1. Unable to See Files on a Mounted File System  
-  
- First, check to see if the file system is actually mounted.  
-There are several ways of doing this. The most reliable  
-way is to look at the file /proc/mounts,  
-which will list all mounted filesystems and give details about them. If  
-this doesn't work (for example if you don't have the /proc  
-filesystem compiled into your kernel), you can type  
-'mount -f' although you get less information.  
-  
-  
-  
-  
- If the file system appears to be mounted, then you may  
-have mounted another file system on top of it (in which  
-case you should unmount and remount both volumes), or you  
-may have exported the file system on the server before you  
-mounted it there, in which case NFS is exporting the underlying  
-mount point (if so then you need to restart NFS on the  
-server).  
-  
-  
-  
-  
- If the file system is not mounted, then attempt to mount it.  
-If this does not work, see ''Symptom 3''.  
-  
-  
-----  
-!!7.2. File requests hang or timeout waiting for access to the file.  
-  
- This usually means that the client is unable to communicate with  
-the server. See ''Symptom 3'' letter b.  
-  
-  
-----  
-!!7.3. Unable to mount a file system  
-  
- There are two common errors that mount produces when  
-it is unable to mount a volume. These are:  
-  
-  
-  
-  
-  
-#  
-  
- failed, reason given by server: Permission denied  
-  
-  
-  
-  
-  
-This means that the server does not recognize that you  
-have access to the volume.  
-  
-  
-  
-  
-  
-  
-  
-##  
-  
- Check your /etc/exports file and make sure that the  
-volume is exported and that your client has the right  
-kind of access to it. For example, if a client only  
-has read access then you have to mount the volume  
-with the ro option rather than the rw option.  
-  
-  
-  
-##  
-##  
-  
- Make sure that you have told NFS to register any  
-changes you made to /etc/exports since starting nfsd  
-by running the exportfs command. Be sure to type  
-__exportfs -ra__ to be extra certain that the exports are  
-being re-read.  
-  
-  
-  
-##  
-##  
-  
- Check the file /proc/fs/nfs/exports and make sure the  
-volume and client are listed correctly. (You can also  
-look at the file /var/lib/nfs/xtab for an unabridged  
-list of how all the active export options are set.) If they  
-are not, then you have not re-exported properly. If they  
-are listed, make sure the server recognizes your  
-client as being the machine you think it is. For  
-example, you may have an old listing for the client  
-in /etc/hosts that is throwing off the server, or  
-you may not have listed the client's complete address  
-and it may be resolving to a machine in a different  
-domain. Try to ping the client from the server, and try  
-to ping the server from the client. If this doesn't work,  
-or if there is packet loss, you may have lower-level network  
-problems.  
-  
-  
-  
-##  
-#  
-#  
-  
-RPC: Program Not Registered (or another "RPC" error):  
-  
-  
-  
- This means that the client does not detect NFS running  
-on the server. This could be for several reasons.  
-  
-  
-  
-  
-  
-  
-  
-##  
-  
- First, check that NFS actually is running on the  
-server by typing __rpcinfo -p__ on the server.  
-You should see something like this:  
-  
- program vers proto port  
-100000 2 tcp 111 portmapper  
-100000 2 udp 111 portmapper  
-100011 1 udp 749 rquotad  
-100011 2 udp 749 rquotad  
-100005 1 udp 759 mountd  
-100005 1 tcp 761 mountd  
-100005 2 udp 764 mountd  
-100005 2 tcp 766 mountd  
-100005 3 udp 769 mountd  
-100005 3 tcp 771 mountd  
-100003 2 udp 2049 nfs  
-100003 3 udp 2049 nfs  
-300019 1 tcp 830 amd  
-300019 1 udp 831 amd  
-100024 1 udp 944 status  
-100024 1 tcp 946 status  
-100021 1 udp 1042 nlockmgr  
-100021 3 udp 1042 nlockmgr  
-100021 4 udp 1042 nlockmgr  
-100021 1 tcp 1629 nlockmgr  
-100021 3 tcp 1629 nlockmgr  
-100021 4 tcp 1629 nlockmgr  
-  
-This says that we have NFS versions 2 and 3, rpc.statd  
-version 1, network lock manager (the service name for  
-rpc.lockd) versions 1, 3, and 4. There are also different  
-service listings depending on whether NFS is travelling over  
-TCP or UDP. UDP is usually (but not always) the default  
-unless TCP is explicitly requested.  
-  
-  
-  
-  
- If you do not see at least portmapper, nfs, and mountd, then  
-you need to restart NFS. If you are not able to restart  
-successfully, proceed to ''Symptom 9''.  
-  
-  
-  
-##  
-##  
-  
- Now check to make sure you can see it from the client.  
-On the client, type __rpcinfo -p [[server]__ where  
-__[[server]__ is the DNS name or IP address of your server.  
-  
-  
-  
-  
- If you get a listing, then make sure that the type  
-of mount you are trying to perform is supported. For  
-example, if you are trying to mount using Version 3  
-NFS, make sure Version 3 is listed; if you are trying  
-to mount using NFS over TCP, make sure that is  
-registered. (Some non-Linux clients default to TCP).  
-See man rpcinfo for more details on how  
-to read the output. If the type of mount you are  
-trying to perform is not listed, try a different  
-type of mount.  
-  
-  
-  
-  
- If you get the error No Remote Programs Registered,  
-then you need to check your /etc/hosts.allow and  
-/etc/hosts.deny files on the server and make sure  
-your client actually is allowed access. Again, if the  
-entries appear correct, check /etc/hosts (or your  
-DNS server) and make sure that the machine is listed  
-correctly, and make sure you can ping the server from  
-the client. Also check the error logs on the system  
-for helpful messages: Authentication errors from bad  
-/etc/hosts.allow entries will usually appear in  
-/var/log/messages, but may appear somewhere else depending  
-on how your system logs are set up. The man pages  
-for syslog can help you figure out how your logs are  
-set up. Finally, some older operating systems may  
-behave badly when routes between the two machines  
-are asymmetric. Try typing __tracepath [[server]__ from  
-the client and see if the word "asymmetric" shows up  
-anywhere in the output. If it does then this may  
-be causing packet loss. However asymmetric routes are  
-not usually a problem on recent linux distributions.  
-  
-  
-  
-  
- If you get the error Remote system error - No route  
-to host, but you can ping the server correctly,  
-then you are the victim of an overzealous  
-firewall. Check any firewalls that may be set up,  
-either on the server or on any routers in between  
-the client and the server. Look at the man pages  
-for __ipchains__, __netfilter__,  
-and __ipfwadm__, as well as the  
-IPChains-HOWTO  
-and the Firewall-HOWTO for help.  
-  
-  
-  
-##  
-#  
-  
-  
-----  
-!!7.4. I do not have permission to access files on the mounted volume.  
-  
- This could be one of two problems.  
-  
-  
-  
-  
- If it is a write permission problem, check the export  
-options on the server by looking at /proc/fs/nfs/exports  
-and make sure the filesystem is not exported read-only.  
-If it is you will need to re-export it read/write  
-(don't forget to run __exportfs -ra__ after editing  
-/etc/exports). Also, check  
-/proc/mounts and make sure the volume  
-is mounted read/write (although if it is mounted read-only  
-you ought to get a more specific error message). If not then  
-you need to re-mount with the rw option.  
-  
-  
-  
-  
- The second problem has to do with username mappings, and is  
-different depending on whether you are trying to do this  
-as root or as a non-root user.  
-  
-  
-  
-  
- If you are not root, then usernames may not be in sync on  
-the client and the server. Type __id [ [user ]__  
-on both the client and the server and make sure they give the  
-same ''UID'' number. If they don't then  
-you are having problems with NIS, NIS+, rsync, or whatever  
-system you use to sync usernames. Check group names to make  
-sure that they match as well. Also, make sure you are not  
-exporting with the __all_squash__ option.  
-If the user names match then the user has a more general  
-permissions problem unrelated to NFS.  
-  
-  
-  
-  
- If you are root, then you are probably not exporting with  
-the __no_root_squash__ option; check /proc/fs/nfs/exports  
-or /var/lib/nfs/xtab on the server and make sure the option  
-is listed. In general, being able to write to the NFS  
-server as root is a bad idea unless you have an urgent need --  
-which is why Linux NFS prevents it by default. See  
-Section 6 for details.  
-  
-  
-  
-  
- If you have root squashing, you want to keep it, and you're only  
-trying to get root to have the same permissions on the file that  
-the user ''nobody'' should have, then remember that it is the server  
-that determines which uid root gets mapped to. By default, the  
-server uses the ''UID'' and ''GID'' of  
-''nobody'' in the /etc/passwd file,  
-but this can also be overridden with the __anonuid__ and  
-__anongid__ options in the /etc/exports  
-file. Make sure that the client and the server agree about which  
-''UID'' ''nobody'' gets mapped to.  
-  
-  
-----  
-!!7.5. When I transfer really big files, NFS takes over  
-all the CPU cycles on the server and it screeches to a halt.  
-  
- This is a problem with the fsync() function in 2.2 kernels that  
-causes all sync-to-disk requests to be cumulative, resulting  
-in a write time that is quadratic in the file size. If you  
-can, upgrading to a 2.4 kernel should solve the problem.  
-Also, exporting with the __no_wdelay__ option  
-forces the program to use o_sync() instead, which may prove faster.  
-  
-  
-----  
-!!7.6. Strange error or log messages  
-  
-  
-  
-  
-  
-  
-#  
-  
- Messages of the following format:  
-  
-  
-  
-  
-  
- Jan 7 09:15:29 server kernel: fh_verify: mail/guest permission failure, acc=4, error=13  
-Jan 7 09:23:51 server kernel: fh_verify: ekonomi/test permission failure, acc=4, error=13  
-  
-  
-  
-  
-  
- These happen when a NFS setattr operation is attempted on a  
-file you don't have write access to. The messages are  
-harmless.  
-  
-  
-  
-#  
-#  
-  
- The following messages frequently appear in the logs:  
-  
-  
-  
-  
-  
- kernel: nfs: server server.domain.name not responding, still trying  
-kernel: nfs: task 10754 can't get a request slot  
-kernel: nfs: server server.domain.name OK  
-  
-  
-  
-  
-  
- The "can't get a request slot" message means that the client-  
-side RPC code has detected a lot of timeouts (perhaps due to  
-network congestion, perhaps due to an overloaded server), and  
-is throttling back the number of concurrent outstanding  
-requests in an attempt to lighten the load. The cause of  
-these messages is basically sluggish performance. See  
-Section 5 for details.  
-  
-  
-  
-#  
-#  
-  
- After mounting, the following message appears on the client:  
-  
-  
-  
-  
-  
-nfs warning: mount version older than kernel  
-  
-  
-  
-  
-  
- It means what it says: You should upgrade your mount package and/or  
-am-utils. (If for some reason upgrading is a problem, you may be able  
-to get away with just recompiling them so that the newer kernel features  
-are recognized at compile time).  
-  
-  
-  
-#  
-#  
-  
- Errors in startup/shutdown log for lockd  
-  
-  
-  
-  
- You may see a message of the following kind in your boot log:  
-  
-nfslock: rpc.lockd startup failed  
-  
-  
-  
-  
-  
- They are harmless. Older versions of rpc.lockd needed to be  
-started up manually, but newer versions are started automatically  
-by knfsd. Many of the default startup scripts still try to start  
-up lockd by hand, in case it is necessary. You can alter your  
-startup scripts if you want the messages to go away.  
-  
-  
-  
-#  
-#  
-  
- The following message appears in the logs:  
-  
-  
-  
-  
-  
-kmem_create: forcing size word alignment - nfs_fh  
-  
-  
-  
-  
-  
- This results from the file handle being 16 bits instead of a  
-mulitple of 32 bits, which makes the kernel grimace. It is  
-harmless.  
-  
-  
-  
-#  
-  
-  
-----  
-!!7.7. Real permissions don't match what's in /etc/exports.  
-  
- '' /etc/exports is VERY sensitive to whitespace - so the  
-following statements are not the same:  
-''  
-  
-/export/dir hostname(rw,no_root_squash)  
-/export/dir hostname (rw,no_root_squash)  
-  
-The first will grant hostname rw access to /export/dir  
-without squashing root privileges. The second will grant  
-hostname rw privs w/root squash and it will grant EVERYONE  
-else read-write access, without squashing root privileges.  
-Nice huh?  
-  
-  
-----  
-!!7.8. Flaky and unreliable behavior  
-  
- Simple commands such as __ls__ work, but anything that transfers  
-a large amount of information causes the mount point to lock.  
-  
-  
-  
-  
- This could be one of two problems:  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-  
-It will happen if you have ipchains on at the server and/or the  
-client and you are not allowing fragmented packets through the  
-chains. Allow fragments from the remote host and you'll be able  
-to function again. See Section 6.4 for details on how to do this.  
-  
-  
-  
-#  
-#  
-  
- You may be using a larger rsize and wsize in your mount options  
-than the server supports. Try reducing rsize and wsize to 1024 and  
-seeing if the problem goes away. If it does, then increase them  
-slowly to a more reasonable value.  
-  
-  
-  
-#----  
-!!7.9. nfsd won't start  
-  
- Check the file /etc/exports and make sure root has read permission.  
-Check the binaries and make sure they are executable. Make sure  
-your kernel was compiled with NFS server support. You may need  
-to reinstall your binaries if none of these ideas helps.  
-  
-  
-----  
-!!!8. Using Linux NFS with Other OSes  
-  
- Every operating system, Linux included, has quirks and deviations  
-in the behavior of its NFS implementation -- sometimes because  
-the protocols are vague, sometimes because they leave gaping  
-security holes. Linux will work properly with all major vendors'  
-NFS implementations, as far as we know. However, there may be  
-extra steps involved to make sure the two OSes are communicating  
-clearly with one another. This section details those steps.  
-  
-  
-  
-  
- In general, it is highly ill-advised to attempt to use a Linux  
-machine with a kernel before 2.2.18 as an NFS server for non-Linux  
-clients. Implementations with older kernels may work fine as  
-clients; however if you are using one of these kernels and get  
-stuck, the first piece of advice we would give is to upgrade  
-your kernel and see if the problems go away. The user-space NFS  
-implementations also do not work well with non-Linux clients.  
-  
-  
-  
-  
- Following is a list of known issues for using Linux together with  
-major operating systems.  
-  
-  
-----  
-!!8.1. AIX  
-!8.1.1. Linux Clients and AIX Servers  
-  
- The format for the /etc/exports file for our example in Section 3 is:  
-  
- /usr slave1.foo.com:slave2.foo.com,access=slave1.foo.com:slave2.foo.com  
-/home slave1.foo.com:slave2.foo.com,rw=slave1.foo.com:slave2.foo.com  
-  
-  
-  
-----  
-!8.1.2. AIX clients and Linux Servers  
-  
- AIX uses the file /etc/filesystems instead of /etc/fstab.  
-A sample entry, based on the example in Section 4, looks like this:  
-  
-/mnt/home:  
-dev = "/home"  
-vfs = nfs  
-nodename = master.foo.com  
-mount = true  
-options = bg,hard,intr,rsize=1024,wsize=1024,vers=2,proto=udp  
-account = false  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
- Version 4.3.2 of AIX requires that file systems be exported with  
-the insecure option, which causes NFS to listen to requests from  
-insecure ports (i.e., ports above 1024, to which non-root users can  
-bind). Older versions of AIX do not seem to require this.  
-  
-  
-  
-#  
-#  
-  
- AIX clients will default to mounting version 3 NFS over TCP.  
-If your Linux server does not support this, then you may need  
-to specify vers=2 and/or proto=udp in your mount options.  
-  
-  
-  
-#  
-#  
-  
- Using netmasks in /etc/exports seems to sometimes cause clients  
-to lose mounts when another client is reset. This can be fixed  
-by listing out hosts explicitly.  
-  
-  
-  
-#  
-#  
-  
- Apparently automount in AIX 4.3.2 is rather broken.  
-  
-  
-  
-#  
-  
-  
-----  
-!!8.2. BSD  
-!8.2.1. BSD servers and Linux clients  
-  
- BSD kernels tend to work better with larger block sizes.  
-  
-  
-----  
-!8.2.2. Linux servers and BSD clients  
-  
- Some versions of BSD may make requests to the server from insecure ports,  
-in which case you will need to export your volumes with the insecure  
-option. See the man page for ''exports(5)'' for more details.  
-  
-  
-----  
-!!8.3. Compaq Tru64 Unix  
-!8.3.1. Tru64 Unix Servers and Linux Clients  
-  
- In general, Tru64 Unix servers work quite smoothly with Linux clients.  
-The format for the /etc/exports file for our example in Section 3 is:  
-  
-  
-/usr slave1.foo.com:slave2.foo.com \  
--access=slave1.foo.com:slave2.foo.com \  
-/home slave1.foo.com:slave2.foo.com \  
--rw=slave1.foo.com:slave2.foo.com \  
--root=slave1.foo.com:slave2.foo.com  
-  
-  
-  
-  
-  
- Tru64 checks the /etc/exports file every time there is a mount request  
-so you do not need to run the __exportfs__ command; in fact on many  
-versions of Tru64 Unix the command does not exist.  
-  
-  
-----  
-!8.3.2. Linux Servers and Tru64 Unix Clients  
-  
- There are two issues to watch out for here. First, Tru64 Unix mounts  
-using Version 3 NFS by default. You will see mount errors if your  
-Linux server does not support Version 3 NFS. Second, in Tru64 Unix  
-4.x, NFS locking requests are made by daemon. You will therefore  
-need to specify the __insecure_locks__ option on all volumes you export  
-to a Tru64 Unix 4.x client; see the __exports__ man pages for details.  
-  
-  
-----  
-!!8.4. HP-UX  
-!8.4.1. HP-UX Servers and Linux Clients  
-  
- A sample /etc/exports entry on HP-UX looks like this:  
-  
-/usr -ro,access=slave1.foo.com:slave2.foo.com  
-/home -rw=slave1.foo.com:slave2.fo.com:root=slave1.foo.com:slave2.foo.com  
-  
-(The __root__ option is listed in the last entry for informational  
-purposes only; its use is not recommended unless necessary.)  
-  
-  
-----  
-!8.4.2. Linux Servers and HP-UX Clients  
-  
- HP-UX diskless clients will require at least a kernel version 2.2.19  
-(or patched 2.2.18) for device files to export correctly.  
-  
-  
-----  
-!!8.5. IRIX  
-!8.5.1. IRIX Servers and Linux Clients  
-  
- A sample /etc/exports entry on IRIX looks like this:  
-  
-/usr -ro,access=slave1.foo.com:slave2.foo.com  
-/home -rw=slave1.foo.com:slave2.fo.com:root=slave1.foo.com:slave2.foo.com  
-  
-(The __root__ option is listed in the last entry for informational  
-purposes only; its use is not recommended unless necessary.)  
-  
-  
-  
-  
- There are reportedly problems when using the nohide option on  
-exports to linux 2.2-based systems. This problem is fixed in the  
-2.4 kernel. As a workaround, you can export and mount lower-down  
-file systems separately.  
-  
-  
-----  
-!8.5.2. IRIX clients and Linux servers  
-  
- There are no known interoperability issues.  
-  
-  
-----  
-!!8.6. Solaris  
-!8.6.1. Solaris Servers  
-  
- Solaris has a slightly different format on the server end from  
-other operating systems. Instead of /etc/exports, the configuration  
-file is /etc/dfs/dfstab. Entries are of the form of a "share"  
-command, where the syntax for the example in Section 3 would  
-look like  
-  
-share -o rw=slave1,slave2 -d "Master Usr" /usr  
-  
-and instead of running __exportfs__ after editing, you run __shareall__.  
-  
-  
-  
-  
- Solaris servers are especially sensitive to packet size. If you  
-are using a Linux client with a Solaris server, be sure to set  
-__rsize__ and __wsize__ to 32768 at mount time.  
-  
-  
-  
-  
- Finally, there is an issue with root squashing on Solaris: root gets  
-mapped to the user ''noone'', which is not the same as the user ''nobody''.  
-If you are having trouble with file permissions as root on the client  
-machine, be sure to check that the mapping works as you expect.  
-  
-  
-----  
-!8.6.2. Solaris Clients  
-  
- Solaris clients will regularly produce the following message:  
-  
-  
-  
-svc: unknown program 100227 (me 100003)  
-  
-  
- This happens because Solaris clients, when they mount, try to obtain  
-ACL information - which linux obviously does not have. The messages  
-can safely be ignored.  
-  
-  
-  
-  
- There are two known issues with diskless Solaris clients: First, a kernel  
-version of at least 2.2.19 is needed to get /dev/null to export  
-correctly. Second, the packet size may need to be set extremely  
-small (i.e., 1024) on diskless sparc clients because the clients  
-do not know how to assemble packets in reverse order. This can be  
-done from /etc/bootparams on the clients.  
-  
-  
-----  
-!!8.7. SunOS  
-  
- SunOS only has NFS Version 2 over UDP.  
-  
-  
-----  
-!8.7.1. SunOS Servers  
-  
- On the server end, SunOS uses the most traditional format for its  
-/etc/exports file. The example in Section 3 would look like:  
-  
-/usr -access=slave1.foo.com,slave2.foo.com  
-/home -rw=slave1.foo.com,slave2.foo.com, root=slave1.foo.com,slave2.foo.com  
-  
-  
-  
-----  
-!8.7.2. SunOS Clients  
-  
- Be advised that SunOS makes all NFS locking requests as daemon, and  
-therefore you will need to add the __insecure_locks__ option to any  
-volumes you export to a SunOS machine. See the __exports__ man page  
-for details
+Describe [HowToNFSHOWTO ] here.