freebsd-dev/lib
Doug Rabson a9148abd9d Implement support for RPCSEC_GSS authentication to both the NFS client
and server. This replaces the RPC implementation of the NFS client and
server with the newer RPC implementation originally developed
(actually ported from the userland sunrpc code) to support the NFS
Lock Manager.  I have tested this code extensively and I believe it is
stable and that performance is at least equal to the legacy RPC
implementation.

The NFS code currently contains support for both the new RPC
implementation and the older legacy implementation inherited from the
original NFS codebase. The default is to use the new implementation -
add the NFS_LEGACYRPC option to fall back to the old code. When I
merge this support back to RELENG_7, I will probably change this so
that users have to 'opt in' to get the new code.

To use RPCSEC_GSS on either client or server, you must build a kernel
which includes the KGSSAPI option and the crypto device. On the
userland side, you must build at least a new libc, mountd, mount_nfs
and gssd. You must install new versions of /etc/rc.d/gssd and
/etc/rc.d/nfsd and add 'gssd_enable=YES' to /etc/rc.conf.

As long as gssd is running, you should be able to mount an NFS
filesystem from a server that requires RPCSEC_GSS authentication. The
mount itself can happen without any kerberos credentials but all
access to the filesystem will be denied unless the accessing user has
a valid ticket file in the standard place (/tmp/krb5cc_<uid>). There
is currently no support for situations where the ticket file is in a
different place, such as when the user logged in via SSH and has
delegated credentials from that login. This restriction is also
present in Solaris and Linux. In theory, we could improve this in
future, possibly using Brooks Davis' implementation of variant
symlinks.

Supporting RPCSEC_GSS on a server is nearly as simple. You must create
service creds for the server in the form 'nfs/<fqdn>@<REALM>' and
install them in /etc/krb5.keytab. The standard heimdal utility ktutil
makes this fairly easy. After the service creds have been created, you
can add a '-sec=krb5' option to /etc/exports and restart both mountd
and nfsd.

The only other difference an administrator should notice is that nfsd
doesn't fork to create service threads any more. In normal operation,
there will be two nfsd processes, one in userland waiting for TCP
connections and one in the kernel handling requests. The latter
process will create as many kthreads as required - these should be
visible via 'top -H'. The code has some support for varying the number
of service threads according to load but initially at least, nfsd uses
a fixed number of threads according to the value supplied to its '-n'
option.

Sponsored by:	Isilon Systems
MFC after:	1 month
2008-11-03 10:38:00 +00:00
..
bind Update for version 9.4.2-P2 2008-09-01 22:55:23 +00:00
csu Add -fno-omit-frame-pointer to CFLAGS used to compile crt1.c on amd64. 2008-08-22 09:23:39 +00:00
libalias -Don't pass down the entire pkt to ProtoAliasIn, ProtoAliasOut, FragmentIn 2008-03-12 11:58:29 +00:00
libarchive Correct the documented declaration of the archive_write_callback to 2008-11-01 19:11:21 +00:00
libautofs Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbegemot Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbluetooth Import handy shorthand Bluetooth address (BD_ADDR) utility functions 2008-08-13 19:35:31 +00:00
libbsm Install getaudit_addr(2) and setaudit_addr(2) links to getaudit(2) and 2007-10-19 10:37:34 +00:00
libbsnmp - Bump share library version which were missed in last bump 2007-06-18 18:47:54 +00:00
libbz2 Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libc Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
libc_r Call the fcntl compatiblity wrapper from the thread library fcntl wrappers 2008-05-30 14:47:42 +00:00
libcalendar
libcam Supply a valid Connect ID when issuing XPT_DEV_MATCH, which 2008-10-27 21:46:58 +00:00
libcom_err
libcompat Turn sgtty into a binary-only compatibility interface. 2008-06-14 10:42:18 +00:00
libcrypt Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libdevinfo
libdevstat The devstat(3) manpage claims that only <devstat.h> is needed as a 2008-01-31 16:55:12 +00:00
libdisk Add MIPS support to libdisk 2008-05-04 22:24:40 +00:00
libdwarf Add a BSD licensed DWARF library for use by the DTrace clients. 2008-05-22 02:14:23 +00:00
libedit Merge NetBSD changes, among them: 2007-06-10 19:06:09 +00:00
libelf Relax the strict type check because gcc as distributed doesn't create 2008-05-23 07:35:36 +00:00
libexpat Update the lib/expat tree for the new v2.0.1 expat import. The bsdxml.h 2008-05-08 14:01:42 +00:00
libfetch Don't fail mistakenly with -r when we already have the whole file. 2008-10-24 07:56:01 +00:00
libftpio Don't set the _file member of the FILE when opening a FTP connection. 2008-05-08 20:05:30 +00:00
libgeom - Update the libgeom manpage with a description of g_device_path and 2008-09-08 06:27:00 +00:00
libgpib Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libgssapi Add an implementation of the RPCSEC_GSS authentication protocol for RPC. This 2008-08-06 14:02:05 +00:00
libipsec Commit IPv6 support for FAST_IPSEC to the tree. 2007-07-01 12:08:08 +00:00
libipx Remove California Regent's clause 3, per letter 2007-01-09 01:02:06 +00:00
libkiconv Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libkse Call the fcntl compatiblity wrapper from the thread library fcntl wrappers 2008-05-30 14:47:42 +00:00
libkvm Reduce code duplication: use calloc() intead of malloc() 2008-10-17 20:11:28 +00:00
libmagic Update for the 'file' 4.23 import. 2008-01-13 20:37:19 +00:00
libmd Use unsigned comparisons. Prior to this commit, SHA1_Update and 2007-05-14 05:00:37 +00:00
libmemstat Make pointer argument to kread_string() const since the kernel structure 2007-05-21 18:16:04 +00:00
libmilter Switch libmilter from select(2) to poll(2) so milters are not limited 2008-02-17 05:14:47 +00:00
libmp Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libncp Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libnetgraph Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libngatm Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libopie Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libpam Add new heimdal-1.1 library. 2008-05-15 15:28:18 +00:00
libpcap Add links to all libpcap functions. 2008-08-28 11:48:49 +00:00
libpmc - Sparsely number enumerations 'pmc_cputype' and 'pmc_event' in order to 2008-10-09 14:55:45 +00:00
libproc Add the Makefile for the process library which was missed in the previous 2008-05-22 02:10:14 +00:00
libradius Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
librpcsec_gss Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
librpcsvc set WARNS to 1: with WARNS=2 an aliasing error in a file generated by 2008-02-05 20:03:45 +00:00
librt atomic_fetchadd_int works on unsigned quantities - change 2008-08-15 21:08:48 +00:00
libsbuf
libsdp Add mandatory "security description" SDP parameter to the PANU profile 2008-03-19 00:06:30 +00:00
libsm New files in sendmail 8.14.1 2007-04-09 01:45:30 +00:00
libsmb Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libsmdb
libsmutil
libstand Let libstand(3) build on ARM. 2008-10-14 09:53:47 +00:00
libtacplus Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libtelnet
libthr Allow psaddr_t to be widened by using thr_pread_{int,long,ptr}, 2008-09-14 16:07:21 +00:00
libthread_db Allow psaddr_t to be widened by using thr_pread_{int,long,ptr}, 2008-09-14 16:07:21 +00:00
libufs Add a berase() function which uses ioctl(DIOCGDELETE) to erase a slab 2007-12-16 18:02:37 +00:00
libugidfw Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libusbhid Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libutil Remove unneeded call to revoke() inside openpty(). 2008-10-28 06:00:13 +00:00
libvgl Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libwrap Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
liby Remove California Regent's clause 3, per letter 2007-01-09 01:02:06 +00:00
libypclnt Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libz
msun Remove some unused variables. 2008-08-08 00:21:27 +00:00
ncurses - Update for ncurses 5.6-20080509 2008-05-09 02:28:52 +00:00
Makefile add new build knobs and jigger some existing controls to improve 2008-09-21 22:02:26 +00:00
Makefile.inc Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00