Re: Kerberos authentication support

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

 



> Op 11 februari 2017 om 16:57 schreef Sage Weil <sage@xxxxxxxxxxxx>:
> 
> 
> 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).

Not really a Kerberos expert, but just chiming in here. Can we maybe combine this with the new feature where the Ceph Mons can now be detected by clients/daemons using DNS SRV records?

http://docs.ceph.com/docs/master/rados/configuration/mon-lookup-dns/

Wido

> 
> > >> 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
> 
> > >> - 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
> 
> 
> 
> > 
> > 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
> > 
> >
--
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