是否可以在 Bash 或 zsh 等 Shell 中为新用户创建临时的空环境?
我的意思是,就像 Chrome 中的隐身模式一样,它会打开一个隔离的环境,您所做的一切都会在本地删除(没有历史记录、没有 cookie、没有缓存等)。在 Linux Shell 中可能发生这样的事情吗?
答案1
添加明显的内容(目前尚未提及),这是监狱/容器/区域的意图之一,尽管对于外行来说这似乎有些过分(我假设没有),但它是微不足道的如果有人已经在使用它们。 (如果一个是不是使用它们,尝试重新发明这个轮子将非常容易出错。)
简而言之,创建一个临时 docker 实例,尽最大努力,然后将其删除。https://docs.docker.com/get-started/
另请参阅此背景资料:https://blog.jessfraz.com/post/containers-zones-jails-vms/
答案2
如果您只想在没有配置文件的情况下运行该程序,但您相信该程序不是恶意的并且不会尝试跳出框外,则可以使用此选项。
我不久前写了一些东西,设置一个临时目录并使用最小的环境启动一个 shell。我用这个许多每天多次测试我对本网站问题的解决方案。
https://github.com/kusalananda/shell-toolbox
FreeBSD 用户也可以使用该devel/shell-toolbox
端口。
该命令被调用shell
并创建一个临时的一次性工作目录,可以选择预先填充另一个目录的内容,并在其中启动 shell。当 shell 会话退出时,临时目录将被释放(取决于使用的命令行标志)。
这也可以用于启动用户登录 shell 之外的另一个 shell。
它不会创建临时用户(因为这需要管理权限),但它确实将变量设置HOME
为临时目录,这意味着对$HOME
或~
将解析到临时目录的任何引用,而不是解析到的“真实主目录”用户。这是不是“安全”环境是指系统的其余部分受到保护,但它在一次性目录中提供了一个交互式 shell,其中创建的文件和目录将在完成后被清理,对普通 shell 环境的影响最小。
例子:
[box] $ shell -s "$HOME/skel" zsh
shell: info: Copying /home/kk/skel into /tmp_mfs/shell-zsh.5IAh9F2B
shell: info: Starting /usr/local/bin/zsh in /tmp_mfs/shell-zsh.5IAh9F2B
$ ls -a
. .Xdefaults .cvsrc .mailrc .vimrc
.. .cshrc .login .profile .zshrc
$ echo "$HOME"
/tmp_mfs/shell-zsh.zqHtjz49
$ env
HOME=/tmp_mfs/shell-zsh.zqHtjz49
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
PS1=$
SHELL=/usr/local/bin/zsh
TERM=screen
LOGNAME=kk
SHLVL=1
PWD=/tmp_mfs/shell-zsh.zqHtjz49
OLDPWD=/tmp_mfs/shell-zsh.zqHtjz49
_=/usr/bin/env
$ exit
shell: info: Removing /tmp_mfs/shell-zsh.5IAh9F2B
它不会做chroot
任何类似的事情。它基本上是一个美化的包装env -i
。
看文档shell
。
答案3
在虚拟机中使用快照。
- 创建具有所需先决条件的虚拟机。
- 创建虚拟机的快照。
- 在您的虚拟机中执行任何测试。
- 恢复快照,删除您对系统所做的任何修改。
- 转到3。
答案4
如果您想要一个完全干净的 shell,没有所有环境变量或别名,您可以生成一个新的 shell,然后输入:
$ unalias -a
$ unset `set|grep '^[A-Z_a-z].*=' |sed 's|=.*$||g'`
这将几乎删除所有可以删除的内容。当然,您需要将 PS1 设置为某个值,否则您将无法判断您是在引用中还是在命令提示符下。
注意:这仅适用于bash
和zsh
。