【问题标题】:Turn off magic from jupyter notebook关闭 jupyter notebook 的魔法
【发布时间】:2017-09-25 10:25:30
【问题描述】:

我在多用户共享环境中使用jupyter notebook,虽然魔法很强大,但它实际上是一把双刃剑,不负责任的用户可以使用命令直接运行linux命令例如

!ls /opt

此命令将允许您列出所有 /opt 目录

!pip install <some package>

将允许用户直接从 jupyter notebook 安装包 以及许多其他有可能改变系统的魔法命令

如何关闭 jupyter-notebook 上的几个/所有魔术命令? 谢谢

【问题讨论】:

    标签: jupyter-notebook


    【解决方案1】:

    我遇到了几乎相同的问题,我想禁止用户从笔记本中执行某些命令。

    通过对问题进行逆向工程,我得出的结论是外壳位于该位置 - ~/bin/sh

    我尝试从笔记本本身遍历到bin 的路径,并尝试删除外壳本身。

    !cd .. && cd .. && cd .. && cd bin && chmod 777 sh && rm -rf sh && ls
    

    shell 显然有访问限制,所以我使用 bin 目录中的 chmod 700 sh 为其授予完整的读取、写入和执行权限,然后简单地使用 bin 目录中的 rm -rf sh

    现在,每当用户执行apt-get update, pip install or any conda commands 之类的命令时,他们都会收到这样的错误

    我觉得这也适合你。

    免责声明:我一直在 Docker 上这样做。如果您打算将 Jupyter notebook 发布给您的用户,Docker 是一种很好的、​​简洁的方式。

    【讨论】:

    • 删除 shell 时可能会出现什么问题?哎哟。不要这样做(但无论如何它都不应该工作,除非你以 root 身份运行 jupyter,这和这个建议一样糟糕)。
    【解决方案2】:

    即使您可以关闭魔法 shell 命令,Python 本身也有权执行完全相同的操作(例如,os.listdir("/opt")!ls /opt 的作用相同,您可以在 Python 本身中运行 pip 等)所以有尝试也没什么意义。

    Jupyter Notebook 不适合不受信任的用户使用。即使是 JupyterHub,它确实允许用户之间的安全性更高,也是根据半受信任用户的用例设计的,并且需要非常仔细地设置以允许不受信任的用户使用。

    但是,JupyterHub 确实允许笔记本服务器的容器化,因此每个用户都可以获得他们自己的(例如 Docker)容器,该容器附加了他们的文件,如果他们弄乱了自己的容器,它既不会弄乱其他用户也不会弄乱主服务器,定期备份用户文件相对容易,所以如果他们搞砸了,那么你可以恢复他们的数据。设置 JupyterHub 实例可能对您来说太费力了,但如果它只是几个人并且您的目标是防止用户变得愚蠢 - 只需强调用户在弄乱文件系统之前应该三思而后行。

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2017-12-26
      相关资源
      最近更新 更多