sudoedit:为什么要用它代替 sudo vi?

sudoedit:为什么要用它代替 sudo vi?

根据手册页

sudoedit /etc/file

创建文件的副本,以当前用户身份打开它,并在保存时使用该副本覆盖现有文件。

然而

sudo vi /etc/file

以 root 身份打开文件

手册页指出 sudoedit 与 sudo 不同,因为:

编辑器在调用用户的环境未发生改变的情况下运行

第一种方法更安全吗?如果是,为什么?使用 sudoedit 而不是 sudo vi 还有其他原因吗?

答案1

我在寻找完全不相关的内容时偶然发现了这个问题,但我想我会添加以下重要的区别,到目前为止还没有提到过:sudoedit 不会以 root 身份运行您的编辑器。

$ sudo vim /etc/farts.conf 

只需以 root 身份运行 vim,允许它读取文件。缺点是编辑器现在也以 root 身份运行,可以执行任何操作。如果你只想允许用户编辑配置文件而不做其他事情,那太糟糕了,你只是给了他们:sh在整个系统上。没有什么可以阻止我使用或从 vim 生成 shell :!command,并且由于它们是子进程,因此它们也将以 root 身份运行。

另一方面:

$ sudoedit /etc/farts.conf

实际上操作方式不同。它会在 /tmp 中创建一个具有唯一名称的副本,并将权限锁定给您的用户,然后在该副本上正常生成编辑器(无需 root 权限)。

一旦退出编辑器,它将比较临时文件和原始文件,如果文件发生变化,则安全地用您的编辑替换原始文件。

在这种情况下,可以允许用户编辑系统文件,但不允许他们以 root 身份运行随机二进制文件或在文件系统上随意操作。

这主要是实际的区别,其余提到的只是简洁的副作用。

答案2

首先,sudo vim已经明确提到了您的默认编辑器,如果您已经在中定义了它,那么这不是必需的$EDITORsudoedit这样就不必在每次想要编辑某些内容时定义编辑器 - 并且在多用户系统上,它允许每个人使用他们个人喜欢的编辑器。

怎么会这样?考虑一个普通用户只获得编辑某些文件的权限的系统sudo。但是他们被限制运行sudo其他任何东西。你必须允许他们这样做sudo visudo vim等等sudo nano)。你不必这样做,只需允许他们访问文件,让他们选择任何他们喜欢的设置即可sudo emacs。(想象一下,你会强迫 Emacs 爱好者使用 Vim……)sudo picosudoedit$EDITOR

另一个问题是,如果您的$EDITOR设置为vim,并且您在用户的 中对其进行了自定义设置,则如果您使用或 ,.vimrc则不会使用这些设置。但是会保留调用用户的环境,从而保留您的设置。sudo vimsudo $EDITORsudoedit

也可以看看:sudoedit 有什么好处?

相关内容