489 lines
16 KiB
Plaintext
489 lines
16 KiB
Plaintext
NFSv4 README
|
|
Last updated: 15 June 2006
|
|
|
|
0. Contents:
|
|
-----------
|
|
|
|
1. Overview.
|
|
\___ 1.1 Purpose of this document
|
|
|
|
2. Quick start
|
|
|
|
3. Idmapd Configuration on both NFS server and client
|
|
|
|
4. Setting up NFSv4 server and client
|
|
\___ 4.1 Configuring Server
|
|
| \___ 4.1.1 /etc/exports
|
|
| \___ 4.1.2 Coexisting NFSv4 and NFSv3
|
|
| \___ 4.1.3 /etc/sysconfig/nfs
|
|
\___ 4.2 Starting services on server and client
|
|
\___ 4.3 Mounting the remote exported directories from client
|
|
|
|
5.Setting up kerberized NFSv4 server and client
|
|
\___ 5.1 Prerequisites
|
|
\___ 5.2 Configuring kerberized NFS server and client
|
|
| \___ 5.2.1 Configuring kerberos
|
|
| \___ 5.2.2 Create machine credentials
|
|
| \___ 5.2.3 Configure /etc/gssapi_mech.conf
|
|
| \___ 5.2.4 /etc/exports entries for kerberised server.
|
|
\___ 5.3 Starting services on server and client
|
|
\___ 5.4 Mounting the remote exported directories
|
|
\___ 5.5 A known issue using NFSv4 with kerberos
|
|
|
|
6.Troubleshooting
|
|
\___ 6.1 Checklist to ensure NFSv4 is up and running
|
|
\___ 6.2 Checklist to ensure NFSv4 Kerberos is working properly
|
|
|
|
|
|
|
|
1. Overview:
|
|
------------
|
|
|
|
The Network File System Version 4 (NFSv4) is a new distributed file system
|
|
similar to previous versions of NFS in its straightforward design, and
|
|
independence of transport protocols and operating systems for file access in a
|
|
heterogeneous network. Unlike earlier versions of NFS, the new protocol
|
|
integrates file locking, strong security, Compound RPCs (combining relevant
|
|
operations), and delegation capabilities to enhance client performance for
|
|
narrow data sharing applications on high-bandwidth networks. NFSv4
|
|
implementations are backward compatible with NFSv2 and NFSv3.
|
|
Note: NFSv4 ACLs and krb5p (Kerberos Privacy) are currently not supported
|
|
|
|
1.1 The Purpose of this document
|
|
________________________________
|
|
|
|
This document is intended as a step-by-step guide to setup NFSv4 on SLES 10.
|
|
It discusses NFSv4 server and client configuration.
|
|
|
|
|
|
2. Quickstart
|
|
-------------
|
|
|
|
For NFSv4 server:
|
|
|
|
1) Edit /etc/exports to have an entry similar to the one below:
|
|
|
|
/export <client_ip/hostname/wildcard>(rw,fsid=0,sync,no_root_squash)
|
|
|
|
(i) fsid=0 is a must.
|
|
(ii) Replace "/export" with file tree that needs to be nfs-exported and
|
|
the <client_ip/hostname/wildcard> with client's ip or hostname or *.
|
|
(* means any client)
|
|
|
|
2) Edit /etc/idmapd.conf to modify the default "Domain" to contain your
|
|
DNS domain name.
|
|
|
|
3) Execute the following commands to start idmapd and nfsserver
|
|
#/etc/init.d/idmapd start
|
|
#/etc/init.d/nfsserver start
|
|
|
|
For NFSv4 client:
|
|
|
|
1) Edit /etc/idmapd.conf to modify the default "Domain" to contain your
|
|
DNS domain name.
|
|
|
|
2) Execute the following command to start idmapd.
|
|
#/etc/init.d/idmapd start
|
|
|
|
3) Mount the exported file system using the following command:
|
|
#mount -t nfs4 <servername>:/ <mntpath>
|
|
Observe that only "/" is given instead of the actual exported path
|
|
name.
|
|
|
|
|
|
|
|
3. Idmapd Configuration on client and server
|
|
--------------------------------------------
|
|
|
|
idmapd.conf - configuration file for idmapd (idmapping daemon), which does
|
|
NFSV4<=>name mapping. Here dns domain (Domain) name has to be configured in
|
|
both client and server.
|
|
|
|
Sample Configuration file:
|
|
|
|
==========================================================================
|
|
|
|
[General]
|
|
Verbosity = 0
|
|
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
|
|
Domain = mydomain.com
|
|
|
|
[Mapping]
|
|
Nobody-User = nobody
|
|
Nobody-Group = nobody
|
|
|
|
==========================================================================
|
|
|
|
|
|
|
|
4. Setting up NFSv4 server and client
|
|
-------------------------------------
|
|
|
|
4.1 Configuring Server
|
|
___________________________
|
|
|
|
There are three main configuration files you will need to edit to set up an
|
|
NFSv4 server:
|
|
/etc/exports, /etc/sysconfig/nfs and /etc/idmapd.conf.
|
|
we will describe the first two here as idmapd.conf is done in previous section.
|
|
|
|
|
|
4.1.1 /etc/exports
|
|
==================
|
|
|
|
This file contains a list of entries; each entry indicates a volume that is
|
|
shared and how it is shared. The /etc/exports file format is slightly
|
|
different from previous versions. A sample exports entry looks like this.
|
|
|
|
/export *(rw,fsid=0,no_subtree_check,sync,no_root_squash)
|
|
|
|
Note that:
|
|
|
|
i) fsid - The value 0 has a special meaning when use with NFSv4. NFSv4 has a
|
|
concept of a root of the overall exported filesystem. The export point
|
|
exported with fsid=0 will be used as this root.
|
|
There must be at least one entry with fsid=0. (this will be pseudo file
|
|
system's /)
|
|
|
|
ii) The method used to mount multiple exported trees is different. NFSv4 uses
|
|
the concept of pseudo filesystem to give a single file system view to the
|
|
client with a pseudo-"/" as root of the filesystem tree. To illustrate,
|
|
|
|
Suppose we have
|
|
|
|
/path1/volume1
|
|
/path2/volume2
|
|
|
|
as two filesystem trees on the server that need to be exported, then
|
|
Firstly, these need to be bound to another name under /export directory
|
|
using mount command's bind option. This is done as :
|
|
mount --bind <old dir> /export/<new dir>
|
|
i.e. in our example:
|
|
|
|
#mount --bind /path1/volume1 /export/volume1
|
|
#mount --bind /path2/volume2 /export/volume2
|
|
|
|
will bind these local filesystem trees to their local new names.
|
|
Then these two exported filesystems (with their newly bound paths) are
|
|
entered into /etc/exports with their respective independent options.
|
|
i.e. /etc/exports would contain -
|
|
|
|
/export/volume1 *(<options_to_be_filled>)
|
|
/export/volume2 *(<options_to_be_filled>)
|
|
|
|
iii)If both a directory and its subdirectory residing on different file systems
|
|
need to be exported, then the option 'nohide' must be appropriately used.
|
|
/export and /export/subdir are on differnt file systems
|
|
and both need to be exported to same client then
|
|
|
|
/export <client>(<options>)
|
|
/export/subdir <client>(<options>,nohide)
|
|
|
|
must be done so that the client can see the contents of subdir too.
|
|
Though this is not specific to NFSv4, it is seen as a common use case
|
|
scenario and is included here.
|
|
'man exports' has more info.
|
|
|
|
iv) Currently Yast2's nfs-server module can only be used as a subsitute
|
|
for manually editing the /etc/exports. Fully functional yast with other
|
|
configuration editing (idmapd etc) is work in progress.
|
|
|
|
v) In case of different kind of exports for the same exported path the
|
|
syntax that must be followed is either of the following
|
|
/export host1(<options>) host2(<options>)
|
|
(or)
|
|
/export host1(<options>)
|
|
/export host2(<options>)
|
|
|
|
|
|
|
|
4.1.2 Co-existing NFSv3 and NFSv4 exports for same file systems
|
|
===============================================================
|
|
|
|
NFSv4 current linux implementation caters to serving NFSv2 and NFSv3 clients
|
|
too. The /etc/exports can contain both type of export entries even for the
|
|
same filesystem trees being exported.
|
|
|
|
|
|
4.1.3 /etc/sysconfig/nfs
|
|
=========================
|
|
|
|
/etc/sysconfig/nfs is another NFS server configuration file. Here the number
|
|
of kernel threads, NFSv4 support and GSS security (kerberos) for NFS can be
|
|
configured (kerberos set up is explained in Section 5.)
|
|
|
|
|
|
4.2 Starting services on server and client
|
|
__________________________________________
|
|
|
|
We need to start idmapd and nfsserver on the NFSv4 server.
|
|
|
|
#/etc/init.d/idmapd start
|
|
#/etc/init.d/nfsserver start
|
|
|
|
and start idmapd alone on the client.
|
|
|
|
If the machines that are being used as client and server are just meant for
|
|
that, the daemons can be enabled during bootup as shown below.
|
|
|
|
Use insserv to do this
|
|
|
|
#insserv -d idmapd
|
|
#insserv -d nfsserver
|
|
|
|
and idmapd alone on the client.
|
|
|
|
|
|
4.3 Mounting remote exported directories
|
|
________________________________________
|
|
|
|
One main difference between previous versions of NFS and NFSv4 is the way in
|
|
which mount is invoked. With regard to the pseudofilesystem concept
|
|
sketched above, mount is done as follows:
|
|
|
|
#mount -t nfs4 <servername>:/ <mntpath>
|
|
|
|
Observe that only '/' is given after the servername.
|
|
|
|
|
|
|
|
|
|
5. Setting up kerberized NFSv4 server and client
|
|
------------------------------------------------
|
|
|
|
5.1 Prerequisites
|
|
_________________
|
|
|
|
o Key Distribution Center (KDC) must already be set up on the network.
|
|
o krb5-1.4.x must be installed on both NFS server and NFS client.
|
|
o krb5-client-1.4.x must be installed on both NFS server and NFS client.
|
|
o NFS server, client and the KDC server must have their time synchronized.
|
|
o NFS_SECURITY_GSS has to be set to "yes" in /etc/sysconfig/nfs in both
|
|
server and client.
|
|
|
|
5.2 Configuring Kerberized NFSv4 server and client
|
|
__________________________________________________
|
|
|
|
All the following configuration steps except 5.2.4 are for both NFSv4
|
|
client and server.
|
|
|
|
|
|
5.2.1 Configure kerberos
|
|
========================
|
|
|
|
Edit krb5.conf.
|
|
|
|
Sample configuration
|
|
|
|
==========================================================================
|
|
|
|
[libdefaults]
|
|
|
|
default_realm = MYDOMAIN.COM
|
|
dns_lookup_realm = true
|
|
dns_lookup_kdc = true
|
|
|
|
[realms]
|
|
MYDOMAIN.COM = {
|
|
kdc = kdcserver.mydomain.com
|
|
admin_server = adminserver.mydomain.com
|
|
default_domain = mydomain.com
|
|
}
|
|
|
|
[domain_realm]
|
|
mydomain.com = MYDOMAIN.COM
|
|
.mydomain.com = MYDOMAIN.COM
|
|
|
|
[logging]
|
|
kdc = FILE:/var/log/krb5kdc.log
|
|
admin_server = FILE:/var/log/kadmin.log
|
|
default = FILE:/var/log/krb5lib.log
|
|
|
|
==========================================================================
|
|
|
|
Replace MYDOMAIN.COM with your REALM, kdcserver.mydomain.com with your KDC
|
|
server, adminserver.mydomain.com with your Admin server & mydomain.com with
|
|
your DNS domain name.
|
|
|
|
5.2.2 Create machine credentials
|
|
================================
|
|
|
|
This means creating a Kerberos V5 principal/instance name of the form
|
|
nfs/<hostname>@REALM, and either adding a key for this principal to
|
|
an existing /etc/krb5.keytab or creating an /etc/krb5.keytab.
|
|
|
|
Note: only the encryption type of des-cbc-crc is functional so far in the
|
|
kernel, so add only this type of key.
|
|
|
|
kadmin: addprinc -e des-cbc-crc:normal nfs/<hostname>@REALM
|
|
kadmin: ktadd -e des-cbc-crc:normal -k /etc/krb5.keytab nfs/<hostname>@REALM
|
|
|
|
5.2.3 Configure /etc/gssapi_mech.conf
|
|
=====================================
|
|
|
|
This configuration file determines which GSS-API mechanisms the gssd code
|
|
should use. Usually no need to modify this file in 32 bit machines because
|
|
the libraries are installed in /usr/lib.
|
|
|
|
Note:
|
|
In case of 64 bit machines this has to be modified to /usr/lib64. This is
|
|
a workaround and will be fixed later.
|
|
|
|
Sample configuration
|
|
|
|
==========================================================================
|
|
# GSSAPI Mechanism Definitions
|
|
#
|
|
# This configuration file determines which GSS-API mechanisms
|
|
# the gssd code should use
|
|
#
|
|
# NOTE:
|
|
# The initialization function "mechglue_internal_krb5_init"
|
|
# is used for the MIT krb5 gssapi mechanism. This special
|
|
# function name indicates that an internal function should
|
|
# be used to determine the entry points for the MIT gssapi
|
|
# mechanism functions.
|
|
#
|
|
# library initialization function
|
|
# ================================ ==========================
|
|
# The MIT K5 gssapi library, use special function for initialization.
|
|
/usr/lib/libgssapi_krb5.so mechglue_internal_krb5_init
|
|
#
|
|
# The SPKM3 gssapi library function. Use the function spkm3_gss_initialize.
|
|
# /usr/local/gss_mechs/spkm/spkm3/libgssapi_spkm3.so spkm3_gss_initialize
|
|
==========================================================================
|
|
|
|
5.2.4 /etc/exports entries for a kerberized server
|
|
==================================================
|
|
|
|
Typical entries for kerberos security mode looks like these:
|
|
|
|
/export gss/krb5(rw,fsid=0,insecure,no_subtree_check,sync,no_root_squash)
|
|
/export gss/krb5i(rw,fsid=0,insecure,no_subtree_check,sync,no_root_squash)
|
|
|
|
Note:
|
|
i) krb5p (Privacy) is currently not supported.
|
|
|
|
ii) option 'insecure' - The insecure option in this entry also allows clients
|
|
with NFS implementations that don't use a reserved port for NFS. So it is
|
|
advisable *NOT* to use this option unless you have a kerberised set up or
|
|
you know what you are doing.
|
|
|
|
|
|
5.3 Starting the services on server and client
|
|
______________________________________________
|
|
|
|
On NFSv4 server, svcgssd needs to be started too. So,
|
|
|
|
#/etc/init.d/idmapd start
|
|
#/etc/init.d/svcgssd start
|
|
#/etc/init.d/nfsserver start
|
|
|
|
On NFSv4 client, gssd needs to be started too. So,
|
|
|
|
#/etc/init.d/idmapd start
|
|
#/etc/init.d/gssd start
|
|
|
|
Or
|
|
|
|
To avoid starting manually, enable service during bootup using insserv as
|
|
mentioned in 4.2
|
|
|
|
|
|
5.4 Mounting exported directories with kerberos
|
|
_______________________________________________
|
|
|
|
To mount a filesystem using krb5, provide the "-osec=krb5" option to mount.
|
|
|
|
#mount -tnfs4 -osec=<secmode> nfsserver:/ /mntpoint
|
|
|
|
<secmode> can be krb5(Autentication) or krb5i (Integrity).
|
|
|
|
|
|
5.5 A known issue using NFSv4 with kerberos
|
|
___________________________________________
|
|
|
|
Even if "no_root_squash" option is used, while exporting a filesystem at the
|
|
server, root on the client gets a "Permission denied" error when creating
|
|
files on the mount point.
|
|
|
|
This is because there is no proper mapping between root and the GSSAuthName.
|
|
|
|
Note: Trying to set 777 permission is not correct as it is not secure. Also,
|
|
any file created on the mountpoint will have "nobody" as owner.
|
|
|
|
There is a work around for this if both NFS server and client use ldap_umich
|
|
methods to authenticate. If the idmapd on both server and client is configured
|
|
to use ldap_umich modules then having GSSAuthName (<nfs/hostname@realm>)
|
|
parameter map to root user, on the ldap server will solve this problem.
|
|
|
|
A proper fix for this issue is being worked upon.
|
|
|
|
|
|
|
|
6. Troubleshooting
|
|
-------------------
|
|
|
|
6.1 Checklist to ensure NFSV4 is up and running
|
|
_______________________________________________
|
|
|
|
1. ps -ef | grep nfsd
|
|
ps -ef | grep idmapd
|
|
ps -ef | grep svcgssd
|
|
to check server side daemons are up and running.
|
|
|
|
2. ps -ef | grep idmapd
|
|
ps -ef | grep gssd
|
|
to check client side daemons are up and running
|
|
|
|
3. rpcinfo -p
|
|
to check all registered RPC programs (nfs, portmapper, mountd) & versions
|
|
|
|
4. Check firewall is enabled on server/client from YAST.
|
|
Yast -> Security and Users -> Firewall.
|
|
Make sure NFS service is enabled.
|
|
|
|
5. showmount -e <server name>
|
|
to check mount information on NFS server
|
|
|
|
6. Make sure that one and only one path is exported
|
|
with fsid=0.
|
|
Refer Pseudofilesystems (point (iii) in Section 3.2.1) for more information.
|
|
|
|
7. If users are not mapped properly check whether idmapd is running in both
|
|
server & client and dns domain name is properly configured.
|
|
|
|
8. If you unable to mount, check for the correctness of the exports file entry.
|
|
|
|
|
|
6.2 Check list to ensure kerberos is working properly
|
|
_____________________________________________________
|
|
|
|
There are many reasons this could be failing.
|
|
|
|
1. Verify that rpc.gssd is running on the client and rpc.svcgssd is running
|
|
on the server.
|
|
|
|
2. Verify that your hostnames are correct. The hostname command should return
|
|
a fully-qualified hostname that has a correct DNS reverse-mapping (either
|
|
through DNS or the /etc/hosts file).
|
|
|
|
3. Verify there is a keytab entry for nfs/<hostname>@REALM in your keytab file
|
|
(/etc/krb5.keytab).
|
|
|
|
4. Verify your Kerberos configuration file has the proper mapping from the DNS
|
|
hostname to the correct realm. The [domain_realm] section of the
|
|
/etc/krb5.conf needs to have a mapping from the DNS domain to the correct
|
|
REALM.
|
|
For example, if your nfs server's hostname is 'foo.abc.org' and your Kerberos
|
|
realm name is 'ALPHABET.ORG', then you need an entry like the following in
|
|
/etc/krb5.conf on the nfs client machine:
|
|
|
|
[domain_realm]
|
|
.abc.org = ALPHABET.ORG
|
|
|
|
5. Verify whether your ticket is not expired or not on the client using klist. If
|
|
it is expired renew using kinit. This must be checked when you find
|
|
"I/O Error" or "Permission denied" while doing file operations.
|
|
|