sudoedit:为什么要在 sudo vi 上使用它?

jon*_*tan 12 linux sudo

根据手册页

sudoedit /etc/file
Run Code Online (Sandbox Code Playgroud)

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

然而

sudo vi /etc/file
Run Code Online (Sandbox Code Playgroud)

以 root 身份打开文件

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

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

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

小智 23

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

$ sudo vim /etc/farts.conf 
Run Code Online (Sandbox Code Playgroud)

将简单地以 root 身份运行 vim,允许它读取文件。缺点是编辑器现在也以 root 身份运行并且可以做任何事情。如果你只是想让用户编辑一个配置文件而不是别的,太糟糕了,你只是给了他们整个系统的root 权限。没有什么能阻止我使用:shor从 vim 生成一个 shell :!command,而且由于它们是子进程,它们也将以 root 身份运行。

另一方面:

$ sudoedit /etc/farts.conf
Run Code Online (Sandbox Code Playgroud)

实际上会以不同的方式运作。它将在 /tmp 中创建一个具有唯一名称的副本,其权限仅限于您的用户,然后在该副本上正常生成您的编辑器,无需 root 权限。

退出编辑器后,它将比较临时文件和原始文件,并在更改后安全地用您的编辑替换原始文件。

在这种情况下,允许用户编辑系统文件成为可能,但不允许他们以 root 身份运行随机二进制文件或在文件系统的任何地方进行检查。

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


slh*_*hck 9

首先,sudo vim已经明确提到您的默认编辑器,如果您在$EDITOR. sudoedit每次想要编辑内容时都无需定义编辑器——而且在多用户系统上,它允许每个人使用他们个人喜欢的编辑器。

为何如此?考虑一个普通用户只能获得sudo编辑某些文件的权限的系统。但是,他们被限制sudo与其他任何东西一起运行。你将不得不让他们sudo visudo vimsudo nanosudo emacssudo pico(等等)。不必这样做,您可以简单地允许他们访问sudoedit该文件,他们可以选择设置$EDITOR为他们喜欢的任何内容。(想象一下你会强迫一个 Emacs 爱好者使用 Vim ......)

另一个问题是,如果您$EDITOR设置为vim,并且您在用户的 中有自定义设置,那么.vimrc如果您使用sudo vim或,这些设置将不会被使用sudo $EDITORsudoedit然而,保留调用用户的环境,因此保留您的设置。

另请参阅:sudoedit 有什么好处?

  • @EvanDarwin 不,那是无关的。`visudo` 仅用于以安全的方式编辑 `/etc/sudoers` 文件(以防止您将自己锁定)。`sudoedit` 是一个编辑*任何*文件的命令。 (5认同)