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


25

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

最近,我注意到我~/.viminfo是在完全新鲜的Ubuntu 16.04(Xenial Xerus)安装中由root拥有,因此让我想知道甚至Vim也被认为是图形的,或者调用是否存在其他问题sudo vim。通过以下方式将所有权更改为我自己后:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

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

调用是不明智的sudo vim吗?



1
您也可以不使用sudo使用vim,并且在保存文件时,可以使用:w !sudo tee %
ChatterOne,

Answers:


22

是的,这很安全。

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

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

根据此博客文章

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

尽管作者指出这可能会导致问题,但没有什么复杂的-只是chown将文件交还给您自己。

也可以看看:


6
注意Vim是不是你在哪里试图限制其他用户的管理权限的多用户系统上的安全。用户可以sudo vim用来获取以root身份运行的vim副本,然后:!/bin/sh获取root shell。
标记

3
@Mark和阻止用户执行此操作的原因是什么sudo /bin/sh?实际上,如果用户已经具有root用户访问权限,则无需使用复杂的技巧。
Sergiy Kolodyazhnyy

7
/etc/sudoers文件。您不需要%wheel ALL=(ALL) ALL- sudo配置所允许的细微差别远不止于此。
标记

1
@Mark OK,好的要点-并非每个系统都有相同的设置。
Sergiy Kolodyazhnyy

嗯...即使文件存在,权限也会改变吗?假设我入侵了一个非管理员用户帐户,但是我不知道其密码(也许我设法打开了一个外壳)。这是否意味着我可以复制/bin/bash~/.viminfo,在其上放置setuid并等待用户运行sudo vim以将其扎根?
ChatterOne

15

也可以使用它sudoedit来实现;它会在编辑器中打开该文件的临时副本,并使编辑器以您的身份运行。从手册页

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

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

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

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


4
如果您宁愿使用自己的vim配置而不是root的配置,则更好。
NieDzejkob

2
如果您不想以root用户身份运行随机插件代码,这也更安全(但是,如果插件运行时恶意运行,也可能造成很多损害,因此请不要使用您不信任插件第一名)。
凯文(Kevin)

2

链接很旧(2013)。它建议使用gksudogksu用于图形应用程序,但两者都已过时。后来接受的答案也暗示了sudo -H这一点。

Ask Ubuntu社区最近的普遍共识是使用:

sudo -H gedit /path/to/filename

唯一的问题仍然是sudo没有用于制表符设置,扩展名,自动换行,字体名称,字体大小等的配置文件。您可以使用以下包装器脚本从用户配置文件继承这些配置文件:如何同步我的root用户gedit和我的用户的偏好gedit?


2

是的,使用起来很安全sudo vim。我遇到的问题是

  • 必须退出文件并重新打开sudo vim才能进行编辑。

  • 根目录vimrc是默认目录,而不是我自定义的有用目录。

bashrc如果您不能正常编辑文件,可以使用此功能让vim自动进行sudo。

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

在Ubuntu上sudo,默认情况下会保留$HOME环境变量,这意味着sudo vim 使用您自定义的.vimrc,这也意味着sudo vim将更改~/.viminfo对root:root 的所有权,并给您带来一些不便。
Marius Gedminas

接受的答案与您不同意viminfo
jeremysprofile

1

可以将vi用作root用户。有时您需要编辑需要sudo或root特权的文件,例如更改网络接口文件或编辑sshd配置文件。用root来处理图形化的东西是不好的,因为人们会以root身份连接到IRC或浏览Web。如果他们在此过程中感染了病毒,则它将具有完全的root访问权限。


2
使用vi作为root至少有一个特定的例外。控制sudo路径的文件(/ etc / sudoers)绝对不要使用vi编辑。对于该文件,应使用命令visudo。您甚至都没有指定要编辑的文件,这只是特殊情况。
user628388

1

在其他答案中没有提到的一点是,使用root运行vim将为您安装的任何插件提供root特权。因此,以root身份运行是否安全的问题取决于您是否信任那些插件开发人员(或其项目的提供者)不拥有系统的核心地位。

通常,所有Linux发行版中的软件包维护者都对Vim进行了审查,因此很容易信任。但是,vim插件通常是直接从GitHub repos安装的,并且用户审核的数量通常要少得多(也许为零)。换句话说,他们之间没有审查程序。

如果您不以root身份加载插件,那么我想以root身份运行取决于您是否信任vim开发人员。但是,通过使用由sudo的同一位开发人员制作的sudoedit,我们可以跳过不必信任它们的情况,无论如何,我们已经通过root访问信任了这些人。GKFX和NieDzejkob已经提到了为什么sudoedit是理想的。除了不必信任sudo开发人员以外的任何人的root访问权限,您还可以使用普通用户帐户加载所有您已经信任的插件。


关于不信任各种开发人员的讨论似乎有些不完整。如果您sudoedit /etc/apt/sources.list安装了受感染的插件,则它可能会插入恶意存储库并在下次运行更新时获得root访问权限。我敢肯定,有很多类似的东西都可以被根保护文件列出来。当然,并非每种病毒都需要根。只需一个浏览器扩展程序,您就可以获取银行的详细信息。
GKFX '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.