Skip to main content

SudoSpawner

Latest PyPI version Latest conda-forge version GitHub Workflow Status - Test Test coverage of code Issue tracking - GitHub Help forum - Discourse

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:

  1. send a signal to another process using the os.kill() call
  2. spawn single-user servers

Installation and setup

  1. Install sudospawner in the Python environment running JupyterHub.

    pip install sudospawner
    
  2. Grant a UNIX user sudo access to the sudospawner mediator script.

  3. 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.

Metadata

Release files for sudospawner 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sudospawner 1.0.0
File Size Uploaded Provenance
sudospawner-1.0.0.tar.gz 20.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sudospawner 1.0.0
File Interpreter ABI Platform
sudospawner-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.8 kB

Release files / sudospawner-1.0.0.tar.gz

Download URL sudospawner-1.0.0.tar.gz
Size 20.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0f80ee90f4fb8927ee5b09ffbda354e730bef75759ff47e62010168a3b6a20b8
BLAKE2b-256 checksum
How to use checksums
3d0f5df8906b8c218b1622590b9407a5a6260a38c714e19af090943776146b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2025.

Transparency log

Release files / sudospawner-1.0.0-py3-none-any.whl

Download URL sudospawner-1.0.0-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27e77791e5144ca13ca706172f4ed966958f790e9fa2e49e5b5dbe13872bb388
BLAKE2b-256 checksum
How to use checksums
6ed5c9b5cabfffdb9f02f59cd09384316fbd1ab55ecb14cfbdbd34a643b95864
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2025.

Transparency log

Security for sudospawner 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sudospawner-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page