[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: MEMORY credential cache interop between Heimdal and MIT?
On Aug 29, 2007, at 9:46 AM, Howard Chu wrote:
>> And with it it has the same ownership issue as a regular ccache
>> file. Also, access control is limited to what inheritance provides.
> Could you summarize these ownership concerns again, or point me at
> an archived posting that enumerates these issues? I've missed some
> context somewhere.
The context is that some of us would like to solve the AFS PAG
(Process Authentication Group) problem the same way we solve the
secure credential cache problem. PAGs have better semantics than any
extant Kerberos ccache implementation.
As such the historical contextual reference would be some old CMU
paper that I won't take the time to find (right now anyway). The
paper IMO spends too much time on the "funny group number"
implementation of PAGs, and not enough on the user-level semantics.
(As Russ said, the "funny group number" implementation worked
surprisingly well until about 5-10 years ago when Linus Torvalds and
Apple, Inc., and maybe other people decided that the kernel
modifications needed to muck around with group numbers were bad.)
This has led to some unfortunate erosion in people's expectations
from AFS capabilities.
From an implementation standpoint, PAGs are efficiently searchable
by a kernel filesystem module in order to match credentials to
callers. Since they're stored in the kernel there are syscalls to
get/set/erase entries from user space. The kernel module gets to
implement the semantics that seem best, and I think the semantics
they defined are pretty good. Kerberos doesn't implement any kernel
modules, and therefore has compromised their ccache scoping semantics
(and associated security) to fit the available userland mechanisms.
The interesting thing about this thread, to me, is that we seem to
have people interested in pushing the envelope, and using new
userland capabilities to get better scoping semantics.
From a user's perspective, a PAG is like a terminal login session
with two exceptions. First it's "secure"; you can't break into and
access anything from another session (even with the same UID).
Second, you can create new ones on the fly; on AFS this is done by
running "pagsh" and doing work under the new shell.
PAGs are inherited by sub-processes, including set-uid-root ones like
lp (which is handy for printing files that live in AFS filespace).
There is no set-pag-id capability. Once you're in a PAG the only
ways to get out are to create a new, empty PAG or to terminate the
process (reverting to the parent's PAG as part of returning control
to the parent).
A new PAG has no credentials. You can test a program inside a new
PAG without worrying that it might modify your files.
Credentials added to a new PAG do not "leak" to other processes on
the machine. You can create a terminal window with administrative
credentials in its new PAG without worrying that a process run
elsewhere might acquire the ability to do more than you intended.
When we talk to OS people about PAGs we usually get hung up on the
"secure storage" issues, and don't necessarily get the inheritance/
scoping problem solved. The Linux keyring implementation had issues
along those lines, but I think (hope) that the implementation at
least allowed PAG semantics to be implemented, even if it provided a
bunch of other unimportant options.
The opinions expressed in this message are mine,
not those of Caltech, JPL, NASA, or the US Government.
Henry.B.Hotz@jpl.nasa.gov, or email@example.com