Re: pam_crypt module will change the world

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

 



Rants inline... :)

On Tue, Apr 17, 2001 at 02:41:26PM -0500, Steve Langasek wrote:
> On Tue, 17 Apr 2001 solar@openwall.com wrote:
> 
> > PAM isn't good for large virtual hosting setups.  It's inefficient,
> > doesn't have established virtual domain support, and common PAM modules
> > aren't MT-safe.
> 
> It's not clear to me that PAM lacks any features needed for virtual hosting.
> If anything's missing, I imagine it's that we need a good pair of
> (well-documented) modules which work well in conjunction to 1) provide a
> mapping of the heirarchical, virtualhost namespace onto the flat local
> namespace and 2) allow pulling information from multiple password databases
> according to a 'domain' token.  There are already modules that provide a
> subset of 2, by bouncing all authentication for a service against a flatfile
> or Berkeley DB file on the system, but I haven't seen anything yet that's
> flexible enough to query multiple databases.  In any case, I don't see having
> anything as flexible as NSS without implementing 1 and actually stacking it
> with a module that uses NSS itself.

IMHO, NSS needs to be revamped. As it stands it stinks. I'm not
referring to any one implementation, but to the API. getpwnam() and
friends are simply not good enough.

Also, many PAM modules expect the PAM_USER to be a Unix user (they call
getpwnam() on PAM_USER). This makes PAM unusable for the purpose of
authenticating non-Unix users to Unix applications.

Also, many PAM apps call getpwnam() on PAM_USER *before* calling
pam_authenticate(). This model breaks the Windows 2000 / Active
Directory model of needing valid user credentials to make such
namespace lookups. You may not care now, but I think many users of
Linux-PAM will, in time.

I think a new NSS API is needed. One NOT limited by struct passwd; one
that uses context structures like PAM or MIT/Heimdal krb5.

And, one more thing: the Unix model of UIDs/GIDs sucks because UIDs/GIDs
namespaces are FLAT. So username/groupname namespaces, in the Unix
world, must also be FLAT. I believe a new syscall API for dealing with
process credentials is needed.

> As for PAM modules that aren't thread-safe, can you point to specific cases?

PAM_KRB5.

Because MIT krb5 is NOT thread safe. It's designed to be, but there are
thread-safety issues in a number of places, including the ccache code,
the rcache code, some of the OS-specific code (reentrant resolver calls
are not used).

I've seen this cause dtsession, on Solaris 2.6 with the latest dtsession
patch crash. The crash was in initstate(), called by random() called by
the resolver, called by MIT krb5. I'm working around this.

> I know that Andrew stresses thread-safe programming in PAM modules, but I
> imagine there's some crufty code in the Linux-PAM tree by now that even Andrew
> hasn't looked at in years.  If there are issues with modules not being
> thread-safe, I'd like to address them before I have an opportunity to run into
> them in the field.

If you don't have thread-safety tests, you won't know until you plug PAM
into a thread app.

> > If you implement a framework for password hashing modules, it should
> > be separate from PAM.
> 
> If someone creates an API for password hashing modules, there's no reason it
> should be tied to PAM.  It would be nice if PAM modules could make use of it,
> of course.

That would be nice. Yes. And password changing needs to be taken out of
pam_unix and split into a module per-name service (e.g., pam_etc_passwd,
pam_nis, pam_nis_plus, pam_bdb, pam_whatever...).

> Steve Langasek
> postmodern programmer

Cheers,

Nico
--





[Index of Archives]     [Fedora Users]     [Kernel]     [Red Hat Install]     [Linux for the blind]     [Gimp]

  Powered by Linux