NFS is well suited for sharing entire file systems with a large number
of known hosts in a transparent manner. However, with ease of use comes
a variety of potential security problems.
The following points should be considered when exporting NFS file
systems on a server or mounting them on a client. Doing so minimizes
NFS security risks and better protects data on the server.
For a concise listing of steps administrators can take to secure NFS
servers, refer the the chapter titled Server
Security in the Red Hat Enterprise Linux Security Guide.
Depending on which version of NFS you plan to implement, depends on your
existing network environment, and your security concerns. The following
sections explain the differences between implementing security measures
with NFSv2, NFSv3, and NFSv4. If at all possible, use of NFSv4 is
recommended over other versions of NFS.
NFS controls who can mount an exported file system based on the host
making the mount request, not the user that actually uses the file
system. Hosts must be given explicit rights to mount the exported file
system. Access control is not possible for users, other than through
file and directory permissions. In other words, once a file system is
exported via NFS, any user on any remote host connected to the NFS
server can access the shared data. To limit the potential risks,
administrators often allow read-only access or squash user permissions
to a common user and group ID. Unfortunately, these solutions prevent
the NFS share from being used in the way it was originally intended.
Additionally, if an attacker gains control of the DNS server used by
the system exporting the NFS file system, the system associated with a
particular hostname or fully qualified domain name can be pointed to
an unauthorized machine. At this point, the unauthorized machine
is the system permitted to mount the NFS share,
since no username or password information is exchanged to provide
additional security for the NFS mount.
Wildcards should be used sparingly when exporting directories via NFS
as it is possible for the scope of the wildcard to encompass more systems
than intended.
It is also possible to restrict access to the
portmap service via TCP wrappers. Access to ports
used by portmap, rpc.mountd, and
rpc.nfsd can also be limited by creating
firewall rules with iptables.
For more information on securing NFS and portmap,
refer to the chapter titled Server Security in
the Red Hat Enterprise Linux Security Guide. Additional information about
firewalls can be found in Chapter 18 iptables.
The release of NFSv4 brought a revolution to authentication and
security to NFS exports. NFSv4 mandates the implementation of
the RPCSEC_GSS kernel module, the Kerberos version 5 GSS-API
mechanism, SPKM-3, and LIPKEY. With NFSv4, the mandatory
security mechanisms are oriented towards authenticating individual
users, and not client machines as used in NFSv2 and NFSv3.
| Note |
---|
| It is assumed that a Kerberos ticket-granting server (KDC) is
installed and configured correctly, prior to configuring an NFSv4
server.
|
NFSv4 includes ACL support based on the Microsoft Windows NT model,
not the POSIX model, because of its features and because it is widely
deployed. NFSv2 and NFSv3 do not have support for native ACL
attributes.
Another important security feature of NFSv4 is its removal of the
rpc.mountd daemon. The
rpc.mountd daemon presented possible security
holes because of the way it dealt with filehandlers.
For more information on the RPCSEC_GSS framework, including how
rpc.svcgssd and rpc.gssd
interoperate, refer to https://www.citi.umich.edu/projects/nfsv4/gssd/.
Once the NFS file system is mounted read/write by a remote host, the
only protection each shared file has is its permissions. If two users
that share the same user ID value mount the same NFS file system, they
can modify each others files. Additionally, anyone logged in as root
on the client system can use the su - command to
become a user who could access particular files via the NFS share. For
more on NFS and user ID conflicts, refer to the chapter titled
Managing User Accounts and Resource Access in
the Red Hat Enterprise Linux Introduction to System Administration.
By default, access control lists (ACLs) are supported by NFS under
Red Hat Enterprise Linux. It is not recommended that this feature be disabled. For more
about this feature, refer to the chapter titled Network
File System (NFS) in the Red Hat Enterprise Linux System Administration Guide.
The default behavior when exporting a file system via NFS is to use
root squashing. This sets the user ID of anyone
accessing the NFS share as the root user on their local machine to a
value of the server's nfsnobody
account. Never turn off root squashing.
If exporting an NFS share as read-only, consider using the
all_squash option, which makes every user accessing
the exported file system take the user ID of the
nfsnobody user.