From 2b395f6d039fb5c92a5ae799b305dd33061c9fbc Mon Sep 17 00:00:00 2001 From: "Andrew G. Morgan" Date: Sat, 13 Jul 2002 05:48:19 +0000 Subject: Relevant BUGIDs: 476951, 476953 Purpose of commit: bugfix Commit summary: --------------- Be more careful when using the deny option - pay attention to the trust option before you grant access. Fix from Nalin. --- CHANGELOG | 5 ++++- doc/modules/pam_wheel.sgml | 20 +++++++++++++------- modules/pam_wheel/README | 9 ++++++--- modules/pam_wheel/pam_wheel.c | 40 +++++++++++++++++++++++++--------------- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index b3cc17db..8f30e020 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -55,9 +55,12 @@ bug report - outstanding bugs are listed here: 0.77: please submit patches for this section with actual code/doc patches! +* pam_wheel was too aggressive to grant access (in the case of the + 'deny' option you want to pay attention to 'trust'). Fix from + Nalin (Bugs 476951, 476953 - agmorgan) * account management support for: pam_shells, pam_listfile, pam_wheel and pam_securetty (+ static module fix for pam_nologin). Patch from - redhat through Harrold Welte (Bug 436435 - agmorgan). + redhat through Harald Welte (Bug 436435 - agmorgan). * pam_wheel feature from Nalin - can use the module to provide wheel access to non-root accounts. Also from Nalin, a bugfix related to the primary group of the applicant is the 'wheel' group. (Bugs diff --git a/doc/modules/pam_wheel.sgml b/doc/modules/pam_wheel.sgml index 8c07a8b7..85841923 100644 --- a/doc/modules/pam_wheel.sgml +++ b/doc/modules/pam_wheel.sgml @@ -22,7 +22,7 @@ Cristian Gafton <gafton@redhat.com> Author. Management groups provided: -authentication +authentication; account Cryptographically sensitive: @@ -31,7 +31,6 @@ authentication Clean code base: System dependencies: -Requires libpwdb. Network aware: @@ -42,7 +41,7 @@ Requires libpwdb.

Only permit root access to members of the wheel (Authentication component +Authentication and Account components

@@ -56,12 +55,16 @@ Only permit root access to members of the wheel (Description: -This module is used to enforce the so-called +The module can be used as either an ' The action of the module may be modified from this default by one or more of the following flags in the /etc/pam.conf file. @@ -88,10 +91,13 @@ password. diff --git a/modules/pam_wheel/README b/modules/pam_wheel/README index 336bb31e..b75689e8 100644 --- a/modules/pam_wheel/README +++ b/modules/pam_wheel/README @@ -1,6 +1,6 @@ pam_wheel: - only permit root authentication too members of wheel group + only permit root authentication to members of wheel group RECOGNIZED ARGUMENTS: debug write a message to syslog indicating success or @@ -21,13 +21,16 @@ RECOGNIZED ARGUMENTS: is trying to get UID 0 access and is a member of the wheel group, deny access (well, kind of nonsense, but for use in conjunction with 'group' argument... :-) + Conversely, if the user is not in the group, return + PAM_IGNORE (unless 'trust' was also specified, in + which case we return PAM_SUCCESS). group=xxxx Instead of checking the GID 0 group, use the xxxx group to perform the authentification. MODULE SERVICES PROVIDED: - auth _authetication and _setcred (blank) + auth _authentication, _setcred (blank) and _acct_mgmt AUTHOR: - Cristian Gafton + Cristian Gafton diff --git a/modules/pam_wheel/pam_wheel.c b/modules/pam_wheel/pam_wheel.c index c460abc9..d127791b 100644 --- a/modules/pam_wheel/pam_wheel.c +++ b/modules/pam_wheel/pam_wheel.c @@ -192,33 +192,43 @@ static int perform_check(pam_handle_t *pamh, int flags, int ctrl, if (is_on_list(grp->gr_mem, fromsu) || (tpwd->pw_gid == grp->gr_gid)) { - if (ctrl & PAM_DEBUG_ARG) { - _pam_log(LOG_NOTICE,"Access %s to '%s' for '%s'", - (ctrl & PAM_DENY_ARG)?"denied":"granted", - fromsu,username); + if (ctrl & PAM_DENY_ARG) { + retval = PAM_PERM_DENIED; + + } else if (ctrl & PAM_TRUST_ARG) { + retval = PAM_SUCCESS; /* this can be a sufficient check */ + + } else { + retval = PAM_IGNORE; } + } else { + if (ctrl & PAM_DENY_ARG) { - return PAM_PERM_DENIED; - } else { + if (ctrl & PAM_TRUST_ARG) { - return PAM_SUCCESS; /* this can be a sufficient check */ + retval = PAM_SUCCESS; /* this can be a sufficient check */ } else { - return PAM_IGNORE; + retval = PAM_IGNORE; } + + } else { + retval = PAM_PERM_DENIED; } } if (ctrl & PAM_DEBUG_ARG) { - _pam_log(LOG_NOTICE,"Access %s for '%s' to '%s'", - (ctrl & PAM_DENY_ARG)?"granted":"denied",fromsu,username); + if (retval == PAM_IGNORE) { + _pam_log(LOG_NOTICE, "Ignoring access request '%s' for '%s'", + fromsu, username); + } else { + _pam_log(LOG_NOTICE, "Access %s to '%s' for '%s'", + (retval != PAM_SUCCESS) ? "denied":"granted", + fromsu, username); + } } - if (ctrl & PAM_DENY_ARG) { - return PAM_SUCCESS; /* this can be a sufficient check */ - } else { - return PAM_PERM_DENIED; - } + return retval; } /* --- authentication management functions --- */ -- cgit v1.2.3