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


10

私は以前sudoeditファイルを作成していました:

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

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

回答:


22

のポイントはsudoedit、権限のないエディターを実行しているときに、ユーザーが他の方法では許可されていないファイルを編集できるようにすることです。これを実現するには、sudoedit編集するファイルを一時的な場所にコピーし、要求元のユーザーが書き込みできるようにして、構成されたエディターで開きます。エディタが一時ディレクトリに無関係なファイル名を表示するのはそのためです。エディターが終了すると、sudoedit実際に変更が行われたかどうかを確認し、必要に応じて変更された一時ファイルを元の場所にコピーします。


IIRCの一部の編集者は、コンピューターブリックの変更が行われていないことを確認するために基本的な健全性チェックも行いますが、それがどれほど一般的であるかはわかりません。
モニカの訴訟に資金を

1
@NicHartley:コンピュータをブリックする方法は非常に多様であるため、一般的なケースではそれを行うのは困難です。たとえばvisudoforを使用するなど、アプリケーション固有になる傾向があります/etc/sudoers
ケビン

@ケビンああ、おっと、私は混乱visudoしたと思いますsudoedit。私はvisudo確かにそれをしたことを知っていました。それを片付けてくれてありがとう!
モニカの訴訟に資金を

1

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

-e

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

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

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

特に、3番目のステップに注意してください。編集の最後にファイルが変更された場合のみ、元のファイルが変更されます。したがって、ファイルを監視するプログラムがある場合、これは(a)中間書き込みが取得されないようにするのに役立ち、(b)最後に変更を行わないことにした場合の不要なアクションを回避できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.