为什么 sudoedit 写入临时目录?

为什么 sudoedit 写入临时目录?

我曾经sudoedit创建一个文件:

 $ sudoedit /etc/systemd/system/apache2.service

但是当我去保存文件时,它把它写在临时目录(/var/temp/blahblah)中。到底是怎么回事?为什么不将其保存到系统目录中?

答案1

其目的sudoedit是允许用户在运行非特权编辑器时编辑原本不允许的文件。为此,sudoedit请将要编辑的文件复制到临时位置,使其可由请求用户写入,然后在配置的编辑器中打开它。这就是编辑器在临时目录中显示不相关文件名的原因。当编辑器退出时,sudoedit检查是否确实进行了任何更改,并在必要时将更改的临时文件复制回其原始位置。

答案2

这在中得到了很好的解释联机sudo帮助页。的描述-esudoedit相当于)说:

-e

(编辑)选项-e表示用户希望编辑一个或多个文件,而不是运行命令。sudoedit在查询安全策略时,使用字符串“”代替命令。如果用户获得策略授权,则执行以下步骤:

  1. 临时副本由要编辑的文件组成,其所有者设置为调用用户。
  2. 运行策略指定的编辑器来编辑临时文件。该sudoers策略使用SUDO_EDITORVISUALEDITOR环境变量(按顺序)。如果SUDO_EDITORVISUAL或均未设置,则使用EDITOR编辑器选项中列出的第一个程序。sudoers(5)
  3. 如果它们已被修改,临时文件将被复制回其原始位置,并删除临时版本。

如果指定的文件不存在,则会创建该文件。请注意,与 运行的大多数命令不同sudo,编辑器在调用用户的环境未修改的情况下运行。如果由于某种原因sudo无法使用其编辑版本更新文件,用户将收到警告,并且编辑后的副本将保留在临时文件中。

特别要注意第三步:只有在编辑结束时修改过的文件才是原来的改变。因此,如果您有一个监视文件的程序,这可以帮助避免 (a) 中间写入被拾取,以及 (b) 如果您最终决定不进行任何更改,则进行不必要的操作。

相关内容