Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Oct 2018 15:21:39 +0000
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Felix Winterhalter <felix@audiofair.de>, "freebsd-fs@freebsd.org" <freebsd-fs@freebsd.org>
Subject:   Re: NFSv4 Kerberos mount from Linux
Message-ID:  <YTOPR0101MB1820A5756D172342AF441C25DDEA0@YTOPR0101MB1820.CANPRD01.PROD.OUTLOOK.COM>
In-Reply-To: <30f6446c-6fed-4b1e-9cae-9c417974ec46@audiofair.de>
References:  <30f6446c-6fed-4b1e-9cae-9c417974ec46@audiofair.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Felix Winterhalter wrote:
>Hello everyone,
>
>I've been trying to get a kerberized nfsv4 mount to work from a Debian
>Stretch client to a FreeBSD 11.2 server.
>
>My export file looks like:
>
>V4: / -sec=3Dkrb5p clients
>
>/testexport -maproot=3Droot -sec=3Dkrb5p clients
>
Btw, if you only mounting "/testexport", you can specify the "V4:" as
V4: /testexport -sec=3Dkrb5p clients
and then the mount on the client uses "/" as the server mountpoint, like
# mount -t nfs -o nfsvers=3D4 <server>:/ /mnt
(This avoids the server having to search for "testexport" in the "/" direct=
ory
 during mounting and might avoid some problems when "/" isn't an exported
 file system. There are "hooks" in the FreeBSD server to make the search wo=
rk,
 but I've never been 100% certain they will work for Kerberos and/or ZFS.)

Btw, in case the Linux client is falling back on using AUTH_SYS at some poi=
nt
during the mount, you could try allowing both krb5 and auth_sys by setting
"-sec=3Dsys,krb5,krb5i,krb5p" for both of the above lines. (I'd also sugges=
t you
try krb5 or krb5i until you get it working, since any packet traces are
easier to decode, although once one krb5 variant works, they all should.)

>I am now trying to mount this directory as root first without having to
>deal with user keytabs or tickets.
>
>This works fine with -sec=3Dsys and nfsv4.1 and nfsv3 and -sec=3Dkrb5p.
> This does not however work with nfsv4 and krb5p or any other krb5 flavor.
Sorry, I'm not sure what you are saying here. Is it
1 - no version of NFS works for krb5p or
2 - NFSv4.1 works for krb5p, but NFSv4.0 does not or
3 - only nfsv3 works for krb5p

If it #3, that is what I would expect. For NFSv4 (and NFSv4.1, I believe) t=
o work
a host based initiator credential is needed for the client host. The only w=
ays I
know of that you can get this is by
- creating such an entry in your KDC and then putting a keytab entry for it=
 in the client
or
- on the FreeBSD client, doing the mount as a user after that user has done=
 a kinit.
  (There are mount options for this on FreeBSD and it also requires setting=
 the sysctl
    vfs.usermount to 1 so non-root can do mounts.) Since you are using a Li=
nux
    client I have no idea how this might be done on Linux.

I have no idea how the Linux server might allow an NFSv4 mount to work with=
out
Kerberos credentials for the "state maintaining operations" done by root (o=
r the
user doing the mount for the FreeBSD client)?
- Maybe they allow these operations to be done via AUTH_SYS. To me, this wo=
uld
  sound like a security hole, but I'm not a security guy...

If you have #3, I know the FreeBSD server won't allow what you are trying t=
o do.
If you want to find out what the Linux server does to make it work, you cou=
ld
capture packets via tcpdump or similar and look at them in wireshark.
(I'd suggest krb5 or krb5i for this, so that the packet data isn't encrypte=
d, since
 it makes the wireshark decoding a lot more useful.)
- If you get such a packet trace, you could email it to me and I can take a=
 look.
  (I am curious how a Linux server might make this work.)

Most of the above only applies if you are experiencing #3, where NFSv3 work=
s
for krb5, but NFSv4 (and 4.1) does not.

>The only errors we have been able to get is an error by gssd:
>
>gssd_pname_to_uid: failed major=3D0xd0000 minor=3D-1765328227
I can't remember what this means, but I think it is saying that the princip=
al
name didn't exist in the password database. (Maybe Linux has some "special"
reserved principal name it uses for "state maintaining operations"?)

>Searching for this error has lead us to an old entry in the mailing list:
>
>https://lists.freebsd.org/pipermail/freebsd-fs/2016-May/023132.html
>
>Which apparently has this problem unresolved with extremely similar
>symptoms.
>
>Mounting from the Linux client to a similar Linux server under the same
>KDC with nfsv4 krb5p works without any problem.
>
>Also access to the FreeBSD server with sshd and GSSAPI works fine. So
>the keytab for the FreeBSD host seems to work fine.
>
>This is extremely frustrating as I have been at this problem for days
>now without any real way to even debug the issue.
Here's what I would do:
1 - Try an NFSv3 mount with krb5. (It wasn't obvious if you already have th=
at
     working or not.) If that works, then...
2 - Try a mount from a FreeBSD client as a user, by doing
     # sysctl vfs.usermount=3D1
     - login as non-root user and kinit
     - as this user, try a mount like
     % mount -t nfs -o nfsv4,sec=3Dkrb5 <server>:/ /mnt
3 - If this works, then you probably need a hostbased client credential in =
the
      keytab on the client.

rick




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?YTOPR0101MB1820A5756D172342AF441C25DDEA0>