diff options
author | Dave Olson <olson@cumulusnetworks.com> | 2018-04-02 11:01:09 -0700 |
---|---|---|
committer | Dave Olson <olson@cumulusnetworks.com> | 2018-04-02 20:40:02 -0700 |
commit | 1e5742369aedc8708d5dbe4411ffd5bf4b10537a (patch) | |
tree | 2480dc22d6bd3e99084aa85e5679e06b71a33ea0 /pam_script_ses_open | |
parent | 556625e62b692b723cc6809d2374c3da9616dc3d (diff) | |
download | libnss-mapuser-1e5742369aedc8708d5dbe4411ffd5bf4b10537a.tar.gz libnss-mapuser-1e5742369aedc8708d5dbe4411ffd5bf4b10537a.zip |
Add VSA shell:priv-lvl support for privileged radius user logins
Ticket: CM-19457
Reviewed By: roopa
Testing Done: lots of variations of login, su, sudo, automated radius tests
Now we always read the map files. If session is set, we try that
file first, so that a user always sees their name, same as tacplus.
If that's the wrong file, read through all of the map files, look
for the correct match based on either name+session or auid+session,
depending on getpwnam or getpwuid entry point
Ignore same set of users as tacacs, including new radius_priv_user
account for the privileged RADIUS user.
create and delete the mapuser files from libpam-radius-auth now;
we need to have the mapping file written early enough for the pam
interfaces to get the correct info.
Using the pam_script is too limiting, and since we are creating the
database in libpam-radius-auth now, we'll delete it there as well
to keep things symmetric, so delete the script and the references to
the scripts
A significant part of this effort was adding getgrent, getgrgid, and
getgrnam support, so that the radius users are put into the netshow
(unprivileged) and netedit and sudo (privileged) groups at login.
A lot of restructuring went in as part of that, and cleaned up some
longstanding bugs, including return values for the getpw* routines.
Also cleaned up some whitespace issues.
Also renamed some globals (debug, min_uid, init_common()) that might
collide with other programs, so that when I build unstripped and
normal visibility shared libs, they won't collide with programs
calling the functions (saw this with "debug" and bgpd, for example).
Diffstat (limited to 'pam_script_ses_open')
-rwxr-xr-x | pam_script_ses_open | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/pam_script_ses_open b/pam_script_ses_open deleted file mode 100755 index 731e250..0000000 --- a/pam_script_ses_open +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/bash -# Copyright 2017 Cumulus Networks, Inc. All rights reserved -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -# This script is invoked via pam_script.so for session open, used for mapping -# RADIUS usernames to the mapped uid, for libnss_mapuser getpwuid() entry -# point. - -# auid is currently unused, but must match the uid of the mapped_user -# in the libnss_mapuser database for this to be valid - -# For this to work, pam_loginuid.so must be used, so both the -# loginuid and the sessionid are unique values > 0 - -umask 022 # want everything world-readable. - -dbdir=/run/mapuser -mkdir -p $dbdir - -read sess < /proc/$$/sessionid -read auid < /proc/$$/loginuid - -# for debugging, if needed -# logger -t mapuser $0 called with $PAM_USER pid=$$ session="$sess" auid="$auid" - -# never map root user, or when loginuid isn't set, or when -# we aren't doing mapping (env variable not set) -if [ "$auid" -eq 0 ]; then exit 0; fi - -# handle this one differently, since it means something is -# configured wrong. -if [ "$sess" -le 0 ] ; then - logger -t $0 sessionid not set, no mapping possible for \ - PID $$ user $PAM_USER - exit 0 # still allow the session -fi - -# if user's home directory doesn't exist, create it and populate -# it with the standard skeleton files. -hdir=$(eval echo ~$PAM_USER) -[ -d "$hdir" ] || /sbin/mkhomedir_helper $PAM_USER - -# don't overwrite if it already exists. Happens when sudo or su -# is run from an existing mapped session. -[ -s $dbdir/$sess ] || \ - date +"%FT%T.%N%nuser=$PAM_USER%npid=$$%nauid=$auid%nsession=$sess%nhome=$hdir" \ - > $dbdir/$sess - -# always succeed, this should not block sessions on errors -exit 0 - |