自定义 systemd 服务#

默认情况下,TLJH 配置两个 systemd 服务来运行 JupyterHub 和 Traefik。

这些服务带有一组默认设置,这些设置在 jupyterhub.servicetraefik.service 中指定。它们看起来如下:

[Unit]
Requires=traefik.service
After=traefik.service

[Service]
User=root
Restart=always
WorkingDirectory=/opt/tljh/state
PrivateTmp=yes
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
Environment=TLJH_INSTALL_PREFIX=/opt/tljh
ExecStart=/opt/tljh/hub/bin/python3 -m jupyterhub -f jupyterhub_config.py --upgrade-db

[Install]
WantedBy=multi-user.target

然而,在某些情况下,管理员可能希望更好地控制这些设置。

例如,当使用 Samba 通过网络挂载共享卷时,这些命名空间设置可能过于严格,并阻止用户访问共享卷。

使用 override.conf 覆盖设置#

要覆盖 jupyterhub 设置,可以提供自定义的 /etc/systemd/system/jupyterhub.service.d/override.conf 文件。

以下是文件内容的示例:

[Service]
PrivateTmp=no
PrivateDevices=no
ProtectKernelTunables=no
ProtectKernelModules=no

此示例在通过 Samba 挂载卷并将其与 JupyterHub 用户共享的情况下应该很有用。您可能还想提供自己的选项,这些选项列在 systemd 文档中。

然后确保重新加载守护程序和 jupyterhub 服务

sudo systemctl daemon-reload
sudo systemctl restart jupyterhub

然后使用以下命令检查状态

sudo systemctl status jupyterhub

输出应如下所示:

Checking the status of the JupyterHub systemd service

要覆盖 traefik 设置,请在 /etc/systemd/system/traefik.service.d/override.conf 下创建一个新文件并遵循相同的步骤。

参考资料#

如果您想了解有关 systemd 安全功能的更多信息,请查阅这些参考资料: