sudoeditが一時ディレクトリに書き込むのはなぜですか?

sudoeditが一時ディレクトリに書き込むのはなぜですか?

一度sudoeditファイルを作成しました。

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

ただし、ファイルを保存しようとすると、一時ディレクトリ(/var/temp/blahblah)にファイルが書き込まれます。どうしたの?なぜシステムディレクトリに保存しないのですか?

答え1

その目的sudoeditは、権限のないエディタを実行するときに許可されていないファイルをユーザーが編集できるようにすることです。これを行うには、sudoedit編集するファイルを一時的な場所にコピーし、要求したユーザーが書き込むことができるようにし、構成されたエディタで開きます。これがエディタが一時ディレクトリに関係のないファイル名を表示する理由です。エディタが終了したら、sudoedit実際に変更があったことを確認し、必要に応じて変更された一時ファイルを元の場所にコピーし直します。

答え2

これはでよく説明されています。sudoマンページ。説明-esudoedit同等)は次のように言います。

-e

(編集)オプションは、-eユーザーがコマンドを実行するのではなく、1つ以上のファイルを編集したいことを示します。sudoeditセキュリティポリシーを照会するときは、コマンドの代わりに ""文字列を使用してください。ユーザーがポリシーによって承認されている場合は、次の手順を実行します。

  1. 一時コピーは編集するファイルで構成され、所有者は呼び出し元ユーザーに設定されます。
  2. ポリシーで指定されたエディタを実行して一時ファイルを編集します。このsudoers戦略ではSUDO_EDITORVISUALおよびEDITOR環境変数を順番に使用します。SUDO_EDITORVISUALまたは両方が設定されていない場合、EDITORエディタオプションにリストされている最初のプログラムが使用されます。sudoers(5)
  3. 変更すると、一時ファイルは元の場所にコピーされ、一時バージョンは削除されます。

指定したファイルがない場合は作成されます。実行されるほとんどのコマンドとは異なり、エディタは、呼び出すsudoユーザーの環境が変更されていない状態で実行されます。何らかの理由でsudoファイルを編集バージョンに更新できない場合、ユーザーは警告を受け、編集されたコピーは一時ファイルに残ります。

第三段階に特別な注意を払ってください。編集が完了すると、変更されたファイルのみが元の変更です。したがって、ファイルを監視するプログラムがある場合、これは(a)中間書き込みが選択されるのを防ぎ、(b)最終的に変更しないことを決定した場合に不要な作業を回避するのに役立ちます。

関連情報