From d328015fe86acd139d1a3b73d457fd57ed3d4bfe Mon Sep 17 00:00:00 2001 From: shreddd Date: Wed, 24 Jun 2015 14:56:44 -0700 Subject: [PATCH 1/2] add supplemental groups to the local user notebook Set the list of supplemental group ids for the user associated with the spawned notebook process. This allows users to access utilize their full complement of UNIX system groups. Currently the user is restricted to their default group - accessing a file owned by any other group does not work, even if a user is a member of that group. This patch fixes that. --- jupyterhub/spawner.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index 61999c0d..81615955 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -10,6 +10,7 @@ import pwd import re import signal import sys +import grp from subprocess import Popen, check_output, PIPE, CalledProcessError from tempfile import TemporaryDirectory @@ -282,6 +283,8 @@ def set_user_setuid(username): # set the user and group os.setgid(gid) + gids = [ g.gr_gid for g in grp.getgrall() if username in g.gr_mem ] + os.setgroups(gids) os.setuid(uid) # start in the user's home dir From b5877ac5465003c140a5832045b65329f569d62f Mon Sep 17 00:00:00 2001 From: Min RK Date: Tue, 7 Jul 2015 12:28:17 -0500 Subject: [PATCH 2/2] Catch failure to set gids --- jupyterhub/spawner.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index 81615955..6c4bf26b 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -276,6 +276,7 @@ def set_user_setuid(username): uid = user.pw_uid gid = user.pw_gid home = user.pw_dir + gids = [ g.gr_gid for g in grp.getgrall() if username in g.gr_mem ] def preexec(): # don't forward signals @@ -283,8 +284,10 @@ def set_user_setuid(username): # set the user and group os.setgid(gid) - gids = [ g.gr_gid for g in grp.getgrall() if username in g.gr_mem ] - os.setgroups(gids) + try: + os.setgroups(gids) + except Exception as e: + print('Failed to set groups %s' % e, file=sys.stderr) os.setuid(uid) # start in the user's home dir