SudoSpawner: Spawner for JupyterHub using sudo
Project description
SudoSpawner
The SudoSpawner, derived from the LocalProcessSpawner, enables JupyterHub to
spawn single-user servers for other UNIX users without running JupyterHub as the
root user. This works by granting permissions to use sudo to start an
intermediate process from a specific script.
The sudospawner mediator script, the intermediate process, can only do two
things:
- send a signal to another process using the os.kill() call
- spawn single-user servers
Installation and setup
-
Install sudospawner in the Python environment running JupyterHub.
pip install sudospawner
-
Grant a UNIX user sudo access to the sudospawner mediator script.
-
To configure JupyterHub to use SudoSpawner, add the following to your
jupyterhub_config.py:c.JupyterHub.spawner_class = "sudo"
The JupyterHub documentation has additional information about creating a configuration file, if needed, and recommended file locations for configuration files.
Dynamic UNIX user creation
A JupyterHub Authenticator can be configured to create UNIX users when needed. This however require the UNIX user running JupyterHub to have permissions to do so.
Until this is documented better in this README (help wanted), please refer to the discussion in issue #58.
Custom singleuser launch command
In order to limit what permissions the use of sudospawner grants the Hub,
when a single-user server is launched
the executable spawned is hardcoded as dirname(sudospawner)/jupyterhub-singleuser.
This requires the sudospawner executable to be in the same directory as the jupyterhub-singleuser command.
It is very important that users cannot modify the bin/ directory containing sudospawner,
otherwise they can modify what sudospawner actually enables JupyterHub to do.
You may want to initialize user environment variables before launching the server, or do other initialization.
If you install a script called sudospawner-singleuser next to sudospawner,
this will be used instead of the direct jupyterhub-singleuser command.
For example, you might want to spawn notebook servers from conda environments that are revised and deployed separately from your hub instance.
#!/bin/bash -l
set -e
# Activate the notebook environment
source /opt/miniconda/bin/activate /opt/envs/notebook-latest
# Show environment info in the log to aid debugging
conda info
# Delegate the notebook server launch to the jupyterhub-singleuser script.
# this is how most sudospawner-singleuser scripts should end.
exec "$(dirname "$0")/jupyterhub-singleuser" $@
Example
The example folder provides an example configuration for setting up a JupyterHub system, without any need to run anything as root.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sudospawner-1.0.0.tar.gz.
File metadata
- Download URL: sudospawner-1.0.0.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f80ee90f4fb8927ee5b09ffbda354e730bef75759ff47e62010168a3b6a20b8
|
|
| MD5 |
10c1bcef1b72ace0ae45a70cf3c9a849
|
|
| BLAKE2b-256 |
3d0f5df8906b8c218b1622590b9407a5a6260a38c714e19af090943776146b63
|
Provenance
The following attestation bundles were made for sudospawner-1.0.0.tar.gz:
Publisher:
release.yaml on jupyterhub/sudospawner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sudospawner-1.0.0.tar.gz -
Subject digest:
0f80ee90f4fb8927ee5b09ffbda354e730bef75759ff47e62010168a3b6a20b8 - Sigstore transparency entry: 620637169
- Sigstore integration time:
-
Permalink:
jupyterhub/sudospawner@f795d2730ad5dd7076df0cab988974598275b633 -
Branch / Tag:
refs/tags/1.0.0 - Owner: https://github.com/jupyterhub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@f795d2730ad5dd7076df0cab988974598275b633 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sudospawner-1.0.0-py3-none-any.whl.
File metadata
- Download URL: sudospawner-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27e77791e5144ca13ca706172f4ed966958f790e9fa2e49e5b5dbe13872bb388
|
|
| MD5 |
14425043d853663b35d7025522a394e4
|
|
| BLAKE2b-256 |
6ed5c9b5cabfffdb9f02f59cd09384316fbd1ab55ecb14cfbdbd34a643b95864
|
Provenance
The following attestation bundles were made for sudospawner-1.0.0-py3-none-any.whl:
Publisher:
release.yaml on jupyterhub/sudospawner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sudospawner-1.0.0-py3-none-any.whl -
Subject digest:
27e77791e5144ca13ca706172f4ed966958f790e9fa2e49e5b5dbe13872bb388 - Sigstore transparency entry: 620637174
- Sigstore integration time:
-
Permalink:
jupyterhub/sudospawner@f795d2730ad5dd7076df0cab988974598275b633 -
Branch / Tag:
refs/tags/1.0.0 - Owner: https://github.com/jupyterhub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@f795d2730ad5dd7076df0cab988974598275b633 -
Trigger Event:
push
-
Statement type: