自定义 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.app -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 安全功能,请查看以下参考资料