为什么sudoedit写入临时目录?


10

我曾经sudoedit创建一个文件:

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

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

Answers:


22

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


IIRC的一些编辑人员也将进行基本的健全性检查,以确保不对计算机进行改动,但我不确定这是多么普遍。
基金莫妮卡的诉讼

1
@NicHartley:在一般情况下很难做到这一点,因为有许多种方法可以使计算机变砖。它倾向于特定于应用程序,例如带有visudofor /etc/sudoers
凯文

@Kevin啊,哎呦,我想我糊涂visudosudoedit。我知道visudo确实做到了。感谢您清理!
基金莫妮卡的诉讼

1

这是很好的解释sudo手册页。的描述-e(其sudoedit等效于)表示:

-e

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.