I would be very happy to learn that this is a mistake, but their page is clear
to the point of being emphatic.
First they talk about S4u2proxy and s4u2self at the same time on the same page and it might be a bit confusing. S4u2proxy works as i described. S4u2self allows a service A to acquire a ticket on user's behalf for itself. This is controlled by central policy. Which services can do that for which users. If them this service can use s4u2proxy then it can impersonate user but only for the purposes of working with service B and not in general. User does not provide any keys for that.
Yes client does not have any control. It is totally abstracted from the client by service A. The whole intent is that the control is between configuration of service A and policies on the KDC and client does not need to know anything. AMO it is big win not a problem.
OK, so the default rocks config is that authentication to the compute nodes is handled via ssh key, and the queue master has access to everyone's private key by virtue of being a privileged process on the head node.
This proposed situation is functionally similar in that the KDC would be configured to allow the queue manager to impersonate users as necessary in order to start jobs. The impersonation can take the form of a forwardable TGT (I hope) which can be used to start jobs via ssh across the cluster, providing each node access to data on shared filesystems.
The main improvement is that long term secrets are better protected (publishing home directories containing private keys to the cluster via NFS w/sec=sys vs. a single unpublished keytab which unlocks all identities.)
As I understand it put_cred will need to be rewritten to support S4U mechanisms, in case the job has been queued long enough that the tgt has expired.
A remaining question is "what prevents the tgt/service tickets from expiring during a running job causing my process to lose access to my shared filesystem"? Would each compute node need to be running a service which can s4u2self/proxy? Is that service gss-proxy?
A second barrage of questions: when I was experimenting with PKINIT, the MIT Kerberos KDC would not issue a TGT unless the user existed in its local database, and the local database needed to have principals in the local realm. Can you S4U2self/proxy to impersonate a non-local user without actually creating a cross-realm principal in the local KDC (e.g., client principal is user/AD.EXAMPLE.COM@LOCAL.EXAMPLE.COM)? Can you S4U2self/proxy to impersonate a user where the user's realm is not local (e.g. user@AD.EXAMPLE.COM)? The latter is ideal, and maybe necessary to avoid a messy many-to-one principal to identity mapping (not to mention a fundamental overhaul of sssd's concept of "domains".)
What I was trying to say is that whether you give some one your keytab or your pki pair it really does not matter. Then they have them and they can do kinit or pkinit on your behalf that would result in the TGT.
My apologies for obfuscating the difference with my ignorance.
I fear I misspoke when I assumed that one could use the proxy certificate (PC) to PKINIT. The subject of the PC is a kind of "augmented" user subject (issuer+single common name element per proxy). [1] A PC is also forbidden to have a "subjectAltName" [1], which is required by a PKINIT-able kx509 certificate. I think these PCs are for use with 'GSI-enabled OpenSSH' [2] which is available in EPEL and Fedora. Kerberos can't use them, but potentially an S4U enabled gateway service could.
An RFC3280 Proxy Certificate does not expose your private key. The derived keypair (which is given to the service but which is not exposed to you) is designed to be more similar to a longish-lived proxiable service ticket than a password/keytab due to its limited lifetime and embedded constraints. The proxy certificate should spell out the constraints on the delegation using publicly documented policy languages, whereas providing a keytab is unconstrained. (The "catch" is that there are no currently defined languages in the IANA registry [3].) S4U constraints are KDC implementation specific and not-communicate-able between clusters within a grid (and I suspect they are not embodied in the ticket either). I do not believe there is a means to translate standardized constraints in the PC (assuming a policy language is developed) to the Kerberos ticketing system. For that matter, I do not believe I have seen evidence that Kerberos tickets have a mechanism to refer to a vocabulary to express constraints. If a gateway were to exist, it would have to restrict itself to requesting proxiable service tickets for the particular services delegated in the PC. (Or grant a TGT for the special "inheritAll" value.)
The question is: Is constraint really necessary, or is delegation all that is required? The most common use case may be to execute your job as you...Constraining things may just lead to problems...
The downside, of course, is that a PC is not a Kerberos ticket and doesn't provide access to a Kerberos-protected NFS export, even when it allows you to login and execute code. Also, translating from GSI certificates to local identities is a big blank spot on my mental map. Here there be dragons. Fundamentally I don't want to learn anything new, I want cluster user management to leverage the same set of tools the rest of my machines do. :) Like FreeIPA+views/sssd. Add a gateway if you join a grid.
[1] http://www.ietf.org/rfc/rfc3820.txt [2] http://grid.ncsa.illinois.edu/ssh/ [3] https://www.ietf.org/assignments/proxy-languages/proxy-languages.xml
Thanks, Bryce
This electronic message contains information generated by the USDA solely for the intended recipients. Any unauthorized interception of this message or the use or disclosure of the information it contains may violate the law and subject the violator to civil or criminal penalties. If you believe you have received this message in error, please notify the sender and delete the email immediately.