Re: [PATCH RFC 0/4] Use correct NFSv4.0 callback credential

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 18, 2018 at 3:23 PM, Chuck Lever <chuck.lever@xxxxxxxxxx> wrote:
>
>
>> On May 18, 2018, at 2:53 PM, Olga Kornievskaia <aglo@xxxxxxxxx> wrote:
>>
>> Hi Chuck,
>>
>> I'm not convinced that "srchost=" is necessary. I believe that
>> everything that is needed is suppose to be encoded in the "target="
>> option.
>
> I don't believe target= has what we want. For NFSv4.0 callback:
>
>   A. The callback source principal needs to be the same as the client's
>      NFS server target principal.

Correct and by specifying "nfs" and "*" I think that signals to the
gssd to pick the NFS server principal (which is what the client would
used as the target for the client to server authentication).

>   B. The callback target principal needs to be the same as the client's
>      NFS server source principal.
>
> Today, for NFSv4.0 callbacks, the kernel passes to gssd:
>
>   target= it uses B for this
>
>   service= it always sets this to "nfs"
>
> And gssd "makes up" the hostname part of A using gethostname(3), which
> is bogus for multi-homed NFS servers.

I agree that's bogus. Instead we should grab the domain from the
"target=" string.


> So my patch series does the following for NFSv4.0 callbacks:
>
> 1. It acquires the actual target principal the client used to establish
>    it's lease. This is A above.
>
> 2. Instead of always passing "nfs" as the service= value, it passes
>    the non-hostname part of A. That should be "nfs" but it doesn't
>    have to be.

Ok so yes it has historically have always been "nfs" (even thought
it's only RECOMMENDED by the spec) and I don't think this is the case
to add complexity to change a well established behavior?

> 3. Instead of letting gssd make up the hostname part of the source
>    principal, it passes the hostname part of A.

I'm arguing that hostname part of A should have been a part of the "target="

>
> That should provide the correct source principal in the multi-home
> case, and it should be backwards-compatible with older gssd's.
>
>
> Now here's why it's not enough to use getsockname(3) on target=
> to predict the correct source hostname:
>
> If the client has established the lease when mounting from one
> particular hostname, and then mounts from another, it will have
> to continue managing the lease using the principal it has already
> established with the first hostname. NFSD knows what that is, and
> can tell gssd what it needs to be. gssd, using only getsockname(3),
> would probably pick something that is wrong.
>
>
>> I thought target just needed to correctly identify the domain for
>> which authentication is taking place.
>
> That's what srchost= does. We can call it something else if that
> helps.
>
>
>> Then I think more changes should
>> be in nfs-utils to make sure that we find credentials for that
>> particular domain instead of going by the gethostbyname() results.
>
> That's a patch to gssd that I didn't post. I will post that later if
> we all agree srchost= is OK.
>
> srchost= is optional. If it's not present in the upcall, gssd will
> continue to use the result of gethostname(3) to construct the source
> principal.
>
>
>> On Fri, May 18, 2018 at 11:39 AM, Chuck Lever <chuck.lever@xxxxxxxxxx> wrote:
>>> I've been experimenting with this series that modifies NFSD to
>>> discover and use the correct GSS service principal when constructing
>>> its NFSv4.0 callback channels. I'm interested in review of this
>>> approach. There are a couple of code comments marked with XXX that
>>> also need some attention.
>>>
>>> The rpc.gssd change mentioned in 1/4 is unremarkable and will be
>>> made available once there is consensus about the kernel changes
>>> in this series. No gssproxy changes are necessary.
>>>
>>> ---
>>>
>>> Chuck Lever (4):
>>>      sunrpc: Enable the kernel to specify the hostname part of service principals
>>>      sunrpc: Extract target name into svc_cred
>>>      nfsd: Use correct credential for NFSv4.0 callback with GSS
>>>      nfsd: Remove callback_cred
>>>
>>>
>>> fs/nfsd/nfs4callback.c               |   29 ++++----------
>>> fs/nfsd/nfs4state.c                  |   17 +++-----
>>> fs/nfsd/state.h                      |    2 -
>>> include/linux/sunrpc/svcauth.h       |    3 +
>>> net/sunrpc/auth_gss/auth_gss.c       |   20 ++++++++--
>>> net/sunrpc/auth_gss/gss_rpc_upcall.c |   70 ++++++++++++++++++++++------------
>>> 6 files changed, 80 insertions(+), 61 deletions(-)
>>>
>>> --
>>> Chuck Lever
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
> --
> Chuck Lever
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux