0

我正在尝试禁用 vim 中的 'r' 和 'o' 命令,这样使用它的人就无法从 vim 中打开其他文件。我尝试使用cmap r <Nop>and cmap o <Nop>,它可以工作但有不良副作用...这两个字母永远不能在 vim 命令行中使用,也不能在搜索某些东西时使用...如果您尝试搜索单词“word”搜索行显示:/wd

那么还有另一种方法可以禁用从 vimrc 打开文件吗?

4

3 回答 3

3

You can launch Vim with a flag:

$ vim -R (readonly)
$ vim -Z (restricted)
$ vim -m (no writing)
$ vim -M (no text modification)

But none of those will block :e or :r or any of the myriad of similar commands. And… the ~/.vimrc could probably be edited with nano or whatever to remove any eventual command anyway.

What about completely sandboxing Vim or its user?

What about explaining why you would want that?

于 2012-11-05T11:09:39.373 回答
3

如果你真的想保护 Vim(而不仅仅是提供某些不允许的特性的表面外观),你必须从源代码中删除这些特性并编译(和测试!)一个有限版本的 Vim。(或者也许你可以使用一个操作系统包装器来沙箱化 Vim 进程并过滤某些系统调用,但我不知道这样的事情。)

可以绕过任何 Vimscript 障碍:您可以通过 撤消重新映射,可以通过在正确的时间:cunmap按下来停止 Vimscript 中任何更精细的保护。<C-c>

于 2012-11-05T11:40:02.327 回答
0

如果您想允许编辑具有 root 权限的特定文件,而不允许命令或编辑其他文件(正如您现在在单独的评论中指出的那样),您为什么不按照以下所述执行此操作man 8 sudoedit

  1. 临时副本由要编辑的文件制成,所有者设置为调用用户。

  2. 运行策略指定的编辑器来编辑临时文件。sudoers 策略使用 SUDO_EDITOR、VISUAL 和 EDITOR 环境变量(按此顺序)。如果没有设置 SUDO_EDITOR、VISUAL 或 EDITOR,则使用编辑器 sudoers(5) 选项中列出的第一个程序。

  3. 如果它们已被修改,则将临时文件复制回其原始位置并删除临时版本。

在用户上下文而不是根上下文中启动编辑器要安全得多。(另外,用户获取的是他的 Vim 设置,而不是来自 root 帐户的未维护的设置!)只是编辑过的临时文件的同步返回必须使用 root 权限完成;在 的帮助下sudo,所有这些都可以在几行 shell 脚本中实现。

于 2012-11-05T14:52:45.787 回答