Vim 与 sudo 结合使用是否安全?

H2O*_*aCl 25 vim sudo

不建议sudo与图形应用程序一起使用gedit,如本链接所述。因此,我倾向于使用vimwith sudo

最近我注意到我~/.viminfo在一个相当新的Ubuntu 16.04 (Xenial Xerus)安装上被 root 所有,所以我想知道 Vim 是否被认为是图形化的,或者调用sudo vim. 通过以下方式将所有权更改为我自己后:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +
Run Code Online (Sandbox Code Playgroud)

随后运行sudo vim我无法~/.viminfo 拥有root。但是,我确信它最近由 root 拥有。

不建议调用sudo vim吗?

Ser*_*nyy 22

是的,这是安全的。

问题sudo gedit是因为 GUI 应用程序使用某些文件,例如~/.cache/dconf, 并且在提升后gedit该文件成为 root 拥有的。好吧,该特定文件包含 GUI 应用程序(包括桌面)的用户特定设置,因此如果系统无法读取这些设置 - 那就不好了。IIRC 用户无法启动特定桌面。用户最近的文件数据recently-used.xbel也会受到影响。

另一方面,Vim 没有这个问题。它不使用与 GUI 相关的数据库,也不将任何内容放入recently-used.xbel. 尽管 gVim 也存在,但它是为仅用于控制台的目的而创建的。事实上,在某些系统上,Vim 是您唯一的编辑器选择。因此,由于不会引起相同的问题,因此它比gedit更安全。在这两种情况下,您仍然以 root 用户身份进行编辑,因此您可能会因编辑不当而导致问题。

根据这篇博文

第一次使用 vim 时,~/.viminfo会创建该文件,如果您sudo vim在新系统上安装后第一次使用 vim,则其权限~/.viminfo会将所有者设置为 root 而不是默认用户。

虽然作者指出它可能会导致问题,但没有什么复杂的 - 只需chown将文件返回给您自己。

也可以看看:

  • `/etc/sudoers` 文件。你不需要*做`%wheel ALL=(ALL) ALL`——`sudo`配置允许比这更多的细微差别。 (7认同)
  • 请注意,在您试图限制其他用户的管理权限的多用户系统上,vim *不* 安全。用户可以使用 `sudo vim` 获取以 root 身份运行的 vim 副本,然后使用 `:!/bin/sh` 获取 root shell。 (6认同)
  • @Mark 以及什么阻止用户只执行 `sudo /bin/sh` ?实际上,如果用户已经拥有 root 访问权限,他们就不需要使用复杂的技巧。 (3认同)

GKF*_*KFX 15

也可以sudoedit用来实现这一点;它会在您的编辑器中打开该文件的临时副本,您的编辑器会像您一样运行。从手册页

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

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

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

这适用于 vim(这是我通常所做的),我想它也可以让您使用 gedit。有一些安全限制

  • 如果您更愿意使用自己的 vim 配置而不是 root 的配置,这会好得多。 (4认同)
  • 如果您不想以 root 身份运行随机插件代码,这也更安全(但是,以您的身份运行的插件如果是恶意的,也会造成很大的损害,所以不要使用您不信任的插件第一名)。 (2认同)