![为什么 sudoedit 写入临时目录?](https://linux22.com/image/142137/%E4%B8%BA%E4%BB%80%E4%B9%88%20sudoedit%20%E5%86%99%E5%85%A5%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我曾经sudoedit
创建一个文件:
$ sudoedit /etc/systemd/system/apache2.service
但是当我去保存文件时,它把它写在临时目录(/var/temp/blahblah)中。到底是怎么回事?为什么不将其保存到系统目录中?
答案1
其目的sudoedit
是允许用户在运行非特权编辑器时编辑原本不允许的文件。为此,sudoedit
请将要编辑的文件复制到临时位置,使其可由请求用户写入,然后在配置的编辑器中打开它。这就是编辑器在临时目录中显示不相关文件名的原因。当编辑器退出时,sudoedit
检查是否确实进行了任何更改,并在必要时将更改的临时文件复制回其原始位置。
答案2
这在中得到了很好的解释联机sudo
帮助页。的描述-e
(sudoedit
相当于)说:
-e
(编辑)选项
-e
表示用户希望编辑一个或多个文件,而不是运行命令。sudoedit
在查询安全策略时,使用字符串“”代替命令。如果用户获得策略授权,则执行以下步骤:
- 临时副本由要编辑的文件组成,其所有者设置为调用用户。
- 运行策略指定的编辑器来编辑临时文件。该
sudoers
策略使用SUDO_EDITOR
、VISUAL
和EDITOR
环境变量(按顺序)。如果SUDO_EDITOR
、VISUAL
或均未设置,则使用EDITOR
编辑器选项中列出的第一个程序。sudoers(5)
- 如果它们已被修改,临时文件将被复制回其原始位置,并删除临时版本。
如果指定的文件不存在,则会创建该文件。请注意,与 运行的大多数命令不同
sudo
,编辑器在调用用户的环境未修改的情况下运行。如果由于某种原因sudo
无法使用其编辑版本更新文件,用户将收到警告,并且编辑后的副本将保留在临时文件中。
特别要注意第三步:只有在编辑结束时修改过的文件才是原来的改变。因此,如果您有一个监视文件的程序,这可以帮助避免 (a) 中间写入被拾取,以及 (b) 如果您最终决定不进行任何更改,则进行不必要的操作。