Re: Kerberos authentication support

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

 



(that's not an argument;  in general, gssapi has been the preferred style of modern protocols including nfsv4;  it probably makes sense to use it;  the likelihood of non-kerberos mechs appearing now seems less than the prior email in this thread implied, tho [the only one I know of is lipkey, and I think it has been revoked?])

Matt

----- Original Message -----
> From: "Matt Benjamin" <mbenjamin@xxxxxxxxxx>
> To: "Sage Weil" <sage@xxxxxxxxxxxx>
> Cc: "Jonathan Brown" <brownj@xxxxxxxxxx>, ceph-devel@xxxxxxxxxxxxxxx
> Sent: Saturday, February 11, 2017 5:09:44 PM
> Subject: Re: Kerberos authentication support
> 
> Hi,
> 
> ----- Original Message -----
> > From: "Sage Weil" <sage@xxxxxxxxxxxx>
> > To: "Jonathan Brown" <brownj@xxxxxxxxxx>
> > Cc: ceph-devel@xxxxxxxxxxxxxxx
> > Sent: Saturday, February 11, 2017 10:57:38 AM
> > Subject: Re: Kerberos authentication support
> > 
> > On Fri, 10 Feb 2017, Jonathan Brown wrote:
> > > Hi,
> > > 
> > > I and my colleague Dheeraj Shetty are interested in adding support for
> > > Kerberos authentication to Ceph.  Although new to Ceph, I have worked
> > > with Kerberos before and have recently been investigating how to
> > > implement this feature.  The Ceph notes in this link discuss some goals
> > > and issues for possible Kerberos authentication support:
> > > 
> > > http://pad.ceph.com/p/kerberos
> > > 
> > > This looks like a good plan of attack and so we have started down that
> > > path and now have the authentication exchange working using GSSAPI
> > > library calls.
> > > 
> > > Some comments…
> > > 
> > > >> The ceph cluster mons would share a single principal,
> > > >>  e.g. ceph/mycluster.foo.com
> > > 
> > > Normally Kerberos service principals have the format
> > > <service>/<hostname>@<realm>.  For my initial testing I am using a name
> > > like "ceph-mon/myhost.foo.com" for the separate mon services on
> > > different machines.  Is there a reason to share a single principal
> > > instead of the normal Kerberos convention?
> > 
> > I think so.  The mons operate as a cluster and are collectively available
> > even when one or more has failed.  I would suggest a convention in which
> > the domain is a logical cluster name (e.g., a dns name with an A/AAAA
> > record for each monitor).
> > 
> > > >> let's use the mit library. :)
> > > 
> > > Agreed, although I think it would be best to use the GSSAPI C-language
> > > bindings instead of the MIT krb5 library APIs directly.
> > > 
> > > >> - define new auth type (krb5)
> > > 
> > > Should the new auth type be named “gssapi” instead?  Note that if the
> > > code uses GSSAPI bindings, then this auth type could potentially be used
> > > for mechanisms other than just krb5 by adding plugin libraries.
> > 
> > Sure
> 
> To be honest, I'd be happier to see a kerberos flavor that used kerberos
> primitives.
> 
> > 
> > > >> - if negotiated, client would use kerberos lib to get the ticket
> > > 
> > > Yes, the user would use a command line tool such as kinit to get the
> > > initial ticket from the KDC and store it in the credentials cache.
> > > During the authentication exchange the GSSAPI/krb5 libraries would get
> > > the service ticket and place it in the same cache.  Subsequent calls
> > > would not need to connect to the KDC again until the tickets expire.
> > > 
> > > >> - client passes ticket to mon
> > > 
> > > This is accomplished by gss_init_sec_context() on the client side and
> > > gss_accept_sec_context() on the server side.  These functions generate
> > > GSS tokens containing the krb5 tickets which are then encoded by the
> > > Ceph client and server into messages sent to their peer.
> > 
> > Sounds good!
> > 
> > > >> - mon uses kerberosv primitives to authenticate, extract principal
> > > >> name, etc.
> > > 
> > > Yes, but with the GSSAPI library the Ceph code would not need to use
> > > Kerberos primitives much if at all.
> > 
> > +1
> > 
> > > >> - establish which capabilities to use:
> > > >>   - mon maps principal name onto a client id, generates a cephx ticket
> > > >>   - ldap maps principal to a group/role, which is defined in ceph auth
> > > >>   db  <-- what users probably want to do
> > > >>   - mon passes cephx ticket (session key etc) back to client
> > > >>   - client uses cephx thereafter
> > > 
> > > We’ll look at how to best accomplish these and other issues next.  But I
> > > think we have a good start on how to implement this feature and look
> > > forward to contributing to Ceph project.  Please let me know if you have
> > > any advice on how you would like to see this feature implemented.  As we
> > > gain more experience with Ceph I’m sure we’ll understand the issues
> > > better.  Thanks!
> > 
> > Great!  Thank for you taking this one!  The auth code is a bit crufty,
> > especially with the mon integration, so please reach out here on
> > ceph-devel or in #ceph-devel with any questions.
> > 
> > sage
> 
> Matt
> 
> > 
> > 
> > 
> > > 
> > > Jonathan Brown
> > > brownj@xxxxxxxxxx
> > > 
> > > Dheeraj Shetty
> > > dheerajs@xxxxxxxxxx
> > > 
> > > 
> > > 
> > > What follows are some example of commands run from my dev environment.  I
> > > have configured a krb5.conf file to point to an MIT kdc, and service
> > > principal keys have been extracted to krb5.keytab.  My ceph.conf included
> > > these global config entries:
> > > 
> > >         auth cluster required = cephx
> > >         auth service required = gssapi
> > >         auth client required = gssapi
> > > 
> > > 
> > > EXAMPLE: running “ceph health” without a Kerberos TGT:
> > > 
> > > brownj@ceph-dev:~/ceph/build$ kdestroy
> > > brownj@ceph-dev:~/ceph/build$ bin/ceph health
> > > *** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
> > > 2017-02-10 15:46:55.038277 7ff8654d4700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > 2017-02-10 15:46:55.046886 7ff8654d4700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > 2017-02-10 15:46:55.093679 7ff85ca9f700  0 gssapi client: Unspecified GSS
> > > failure.  Minor code may provide more information
> > > 2017-02-10 15:46:55.093836 7ff8654d4700  0 librados: client.admin
> > > authentication error (1) Operation not permitted
> > > Error connecting to cluster: PermissionError
> > > brownj@ceph-dev:~/ceph/build$
> > > 
> > > 
> > > EXAMPLE: running “ceph health" with an expired TGT:
> > > 
> > > brownj@ceph-dev:~/ceph/build$ kinit -l 2
> > > Password for client.admin@CEPHTEST.LOCAL:
> > > brownj@ceph-dev:~/ceph/build$ klist
> > > Ticket cache: FILE:/tmp/krb5cc_1000
> > > Default principal: client.admin@CEPHTEST.LOCAL
> > > 
> > > Valid starting     Expires            Service principal
> > > 02/10/17 15:47:46  02/10/17 15:47:44
> > > krbtgt/CEPHTEST.LOCAL@CEPHTEST.LOCAL
> > > brownj@ceph-dev:~/ceph/build$ bin/ceph health
> > > *** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
> > > 2017-02-10 15:47:57.273595 7facdd15e700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > 2017-02-10 15:47:57.282475 7facdd15e700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > 2017-02-10 15:47:57.298276 7facd485d700  0 gssapi client: The referenced
> > > credential has expired
> > > 2017-02-10 15:47:57.298387 7facdd15e700  0 librados: client.admin
> > > authentication error (1) Operation not permitted
> > > Error connecting to cluster: PermissionError
> > > brownj@ceph-dev:~/ceph/build$
> > > 
> > > 
> > > EXAMPLE: running “ceph health” with a valid TGT:
> > > 
> > > brownj@ceph-dev:~/ceph/build$ kinit
> > > Password for client.admin@CEPHTEST.LOCAL:
> > > brownj@ceph-dev:~/ceph/build$ klist
> > > Ticket cache: FILE:/tmp/krb5cc_1000
> > > Default principal: client.admin@CEPHTEST.LOCAL
> > > 
> > > Valid starting     Expires            Service principal
> > > 02/10/17 15:49:13  02/11/17 01:49:13
> > > krbtgt/CEPHTEST.LOCAL@CEPHTEST.LOCAL
> > >         renew until 02/11/17 15:49:09
> > > brownj@ceph-dev:~/ceph/build$ bin/ceph health
> > > *** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
> > > 2017-02-10 15:49:21.057358 7fcd09af8700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > 2017-02-10 15:49:21.064644 7fcd08ab6700 -1 WARNING: all dangerous and
> > > experimental features are enabled.
> > > HEALTH_OK
> > > brownj@ceph-dev:~/ceph/build$ klist
> > > Ticket cache: FILE:/tmp/krb5cc_1000
> > > Default principal: client.admin@CEPHTEST.LOCAL
> > > 
> > > Valid starting     Expires            Service principal
> > > 02/10/17 15:49:13  02/11/17 01:49:13
> > > krbtgt/CEPHTEST.LOCAL@CEPHTEST.LOCAL
> > >         renew until 02/11/17 15:49:09
> > > 02/10/17 15:49:21  02/11/17 01:49:13  ceph-mon/ceph-dev@
> > >         renew until 02/11/17 15:49:09
> > > 02/10/17 15:49:21  02/11/17 01:49:13  ceph-mon/ceph-dev@CEPHTEST.LOCAL
> > >         renew until 02/11/17 15:49:09
> > > brownj@ceph-dev:~/ceph/build$
> > > 
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> > > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > > 
> > >
> 
> --
> Matt Benjamin
> Red Hat, Inc.
> 315 West Huron Street, Suite 140A
> Ann Arbor, Michigan 48103
> 
> http://www.redhat.com/en/technologies/storage
> 
> tel.  734-821-5101
> fax.  734-769-8938
> cel.  734-216-5309
> 

-- 
Matt Benjamin
Red Hat, Inc.
315 West Huron Street, Suite 140A
Ann Arbor, Michigan 48103

http://www.redhat.com/en/technologies/storage

tel.  734-821-5101
fax.  734-769-8938
cel.  734-216-5309
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux