根据手册页:
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 身份运行随机二进制文件或在文件系统的任何地方进行检查。
这主要是实际的区别,其他提到的只是简单的副作用。
首先,sudo vim已经明确提到您的默认编辑器,如果您在$EDITOR. sudoedit每次想要编辑内容时都无需定义编辑器——而且在多用户系统上,它允许每个人使用他们个人喜欢的编辑器。
为何如此?考虑一个普通用户只能获得sudo编辑某些文件的权限的系统。但是,他们被限制sudo与其他任何东西一起运行。你将不得不让他们sudo vi和sudo vim和sudo nano和sudo emacs和sudo pico(等等)。不必这样做,您可以简单地允许他们访问sudoedit该文件,他们可以选择设置$EDITOR为他们喜欢的任何内容。(想象一下你会强迫一个 Emacs 爱好者使用 Vim ......)
另一个问题是,如果您$EDITOR设置为vim,并且您在用户的 中有自定义设置,那么.vimrc如果您使用sudo vim或,这些设置将不会被使用sudo $EDITOR。sudoedit然而,保留调用用户的环境,因此保留您的设置。
另请参阅:sudoedit 有什么好处?
| 归档时间: |
|
| 查看次数: |
19932 次 |
| 最近记录: |