diff --git a/jupyterhub/services/service.py b/jupyterhub/services/service.py index 207088d7..3c9b965d 100644 --- a/jupyterhub/services/service.py +++ b/jupyterhub/services/service.py @@ -56,7 +56,7 @@ from traitlets.config import LoggingConfigurable from .. import orm from ..traitlets import Command -from ..spawner import LocalProcessSpawner +from ..spawner import LocalProcessSpawner, set_user_setuid from ..utils import url_path_join class _MockUser(HasTraits): @@ -80,7 +80,7 @@ class _ServiceSpawner(LocalProcessSpawner): if not name or name == getuser(): # no setuid if no name return - return super().make_preexec_fn(name) + return set_user_setuid(name, chdir=False) def start(self): """Start the process""" diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index d6f07dc6..bf31ded8 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -639,7 +639,7 @@ def _try_setcwd(path): os.chdir(td) -def set_user_setuid(username): +def set_user_setuid(username, chdir=True): """Return a preexec_fn for spawning a single-user server as a particular user. Returned preexec_fn will set uid/gid, and attempt to chdir to the target user's @@ -666,7 +666,8 @@ def set_user_setuid(username): os.setuid(uid) # start in the user's home dir - _try_setcwd(home) + if chdir: + _try_setcwd(home) return preexec