On Wed, Nov 11, 2009 at 04:06:00PM -0800, Gary Winiger wrote:
> >                                                       I think this is 
> > sufficient for now and it doesn't preclude adding module options or a 
> > krb5.conf stanza (or even user_attr(4) name=value pairs) to control this 
> > in the future.
> 
>       Hopefully pam_eval will be a longer term way of doing this.

These are the types of configurations one might want:

 - use PKINIT
 - use password-based auth
 - ask the KDC and evaluate a PAM config corresponding to the pre-auth
   required by the KDC
 - use pam_user_policy
 - ...

pam_eval() helps with some.  In the first two cases module options are
needed.

What this case does is select between PKINIT and password-based auth in
a context-specific manner.

> > I'm happy with the latest spec that has been proposed.
> 
> I asked for through today at the meeting.  Here's my summary:
> 
>       3 In the case of stacking two pam_krb5(5) modules such that
>         the first will pass through to pam_authtok_get(5), I'm unclear
>         from the pam_sm_authenticate() spec what pam_authtok_get will
>         do.  Please specify what PAM items are set by the first
>         instance so the admin knows what they will get from
>         pam_authtok_get.  I suspect there are two cases here:
>            * PKINIT is not done, or fails;
>            * PKINIT succeeds.

No PAM items are set by pam_krb5's auth module.  If PAM_AUTHTOK is not
set then it will try PKINIT, else it will try PA-ENC-TIMESTAMP.

>       4 I'm still concerned that pam_sm_acct_mgmt() isn't applied
>         when PKINIT is done.  Viz with the diff marks removed.

This:

>            Kerberos V5 Account Management Module
>               The Kerberos account management component provides a
>               function to perform account management, pam_sm_acct_mgmt().
>               This function checks to see if the pam_krb5 authentication
>               module has noted that the user's password has not expired.
>-------------->This does not apply if the module is using PKINIT
>-------------->preauthentication. The following options may be passed in
>-------------->to the Kerberos V5  account management module:

Does not mean that no account authorization happens.  It only means that
when using PKINIT there is no password expiration, for semi-obvious
reasons (a password wasn't used, and there may not be one).

>         Does pam_sm_authenticate() fail?  What the outcome of not
>         applying account management?  Does it mean accounts cannot be
>         expired if PKINIT is used?

Account management does get applied, but in the PKINIT case there's
nothing to do: in the PA-ENC-TIMESTAMP case the only thing done is to
convert a KDC "key expired" error to PAM_NEW_AUTHTOK_REQD -- there's no
equivalent for PKINIT.

The KDC "key expired" error to PAM_NEW_AUTHTOK_REQD conversion is the
only account management function that pam_krb5 ever implemented (it also
calls the pam_krb5:pam_sm_authenticate() if pam_krb5_migrate was used,
but that's orthogoanl here, and not really an authorization function).

>       5 I'm still concerned that pam_sm_chauthtok() isn't applied
>         when PKINIT is done.  Viz with diff marks removed.
> 
>            Kerberos V5 Password Management Module
>               The Kerberos V5 password management component provides a
>               function to change passwords, pam_sm_chauthtok(), in the
>               Key Distribution Center (KDC) database. This does not
>               apply if the module is using PKINIT preauthentication.
>               The following flags  may be passed to pam_sm_chauthtok(3PAM):
> 
>         What does this mean to the example PAM password stack and kpasswd?

I think the above is wrong.  That is, if some PAM module causes
pam_acct_mgmt() to return PAM_NEW_AUTHTOK_REQD and/or the app
subsequently calls pam_chauthtok(), pam_krb5 will change a user's
password.  But this may well fail: the KDC may not want to allow a
PKINIT user to change/set a password since the user may be expected to
use PKINIT.  It may be good to make pam_krb5:pam_sm_chauthtok() return
PAM_IGNORE if a) PKINIT was used and b) the KDC rejects the password
change.  (Will, I recommend making that change.)

Nico
-- 

Reply via email to