根据手册页:
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
已经明确提到了您的默认编辑器,如果您已经在中定义了它,那么这不是必需的$EDITOR
。sudoedit
这样就不必在每次想要编辑某些内容时定义编辑器 - 并且在多用户系统上,它允许每个人使用他们个人喜欢的编辑器。
怎么会这样?考虑一个普通用户只获得编辑某些文件的权限的系统sudo
。但是他们被限制运行sudo
其他任何东西。你必须允许他们这样做sudo vi
(sudo vim
等等sudo nano
)。你不必这样做,只需允许他们访问文件,让他们选择任何他们喜欢的设置即可sudo emacs
。(想象一下,你会强迫 Emacs 爱好者使用 Vim……)sudo pico
sudoedit
$EDITOR
另一个问题是,如果您的$EDITOR
设置为vim
,并且您在用户的 中对其进行了自定义设置,则如果您使用或 ,.vimrc
则不会使用这些设置。但是会保留调用用户的环境,从而保留您的设置。sudo vim
sudo $EDITOR
sudoedit
也可以看看:sudoedit 有什么好处?