我在一个拥有多个用户的共享环境中使用jupyter笔记本,而魔术是强大的它实际上是一个双刃剑,一个不负责任的用户可以使用命令直接运行linux命令,例如
!ls /opt
此命令将允许您列出所有/ opt目录
!pip install <some package>
将允许用户直接从jupyter笔记本安装包 和许多其他有可能改变系统的魔法命令
如何在jupyter-notebook上关闭几个/所有魔术命令? 谢谢
答案 0 :(得分:1)
我遇到了几乎相同的问题,其中,我想禁止用户从Notebook中执行某些命令。
通过对问题进行逆向工程,我得出结论:shell位于 - ~/bin/sh
我试图从笔记本本身遍历到bin
的路径,并尝试删除shell本身。
!cd .. && cd .. && cd .. && cd bin && chmod 777 sh && rm -rf sh && ls
shell显然具有访问限制,因此我使用bin目录中的chmod 700 sh
为其提供了完整的读取,写入和执行权限,然后只是rm -rf sh
目录中的bin
。 / p>
现在,只要用户执行apt-get update, pip install or any conda commands
之类的命令,他们就会收到类似
我认为这也适合你。
免责声明:我一直在Docker上这样做。如果您打算将Jupyter笔记本电脑交给您的用户,Docker是一个很好的,很好的方式。
答案 1 :(得分:0)
即使您可以关闭魔术shell命令,Python本身也有权执行完全相同的操作(例如os.listdir("/opt")
与!ls /opt
相同,您可以在Python中运行pip
本身等等。所以即使尝试也没什么意义。
Jupyter Notebook不适合不受信任的用户使用。甚至JupyterHub,它确实允许用户之间的更多安全性,它设计了半信任用户的用例,并且需要非常小心地设置以允许不受信任的用户。
然而,JupyterHub确实允许笔记本电脑服务器的容器化,因此每个用户都可以获得自己的(例如Docker)容器,这些容器附有文件,如果他们弄乱自己的容器,它们都不会弄乱其他用户或者主服务器,定期备份用户文件相对容易,所以如果它们搞砸了,你可以恢复它们的数据。设置JupyterHub实例可能需要付出太大的努力,尽管它只是几个人并且你所有的目标都是防止用户变得愚蠢 - 只是强调用户在弄乱文件系统之前应该考虑一下。