私はsudoedit
を使用してファイルを作成しました:
$ sudoedit /etc/systemd/system/Apache2.service
しかし、ファイルを保存しようとすると、一時ディレクトリ(/ var/temp/blahblah)に書き込まれました。何が起こっている?システムディレクトリに保存しないのはなぜですか?
sudoedit
の目的は、権限のないエディターを実行しながら、ユーザーが他の方法では許可されていなかったファイルを編集できるようにすることです。これを実現するために、sudoedit
は編集するファイルを一時的な場所にコピーし、要求元のユーザーが書き込みできるようにして、構成されたエディターで開きます。これが、エディタが一時ディレクトリに無関係なファイル名を表示する理由です。エディターが終了すると、sudoedit
は実際に変更が行われたかどうかを確認し、必要に応じて変更された一時ファイルを元の場所にコピーします。
これは the Sudo
manpage でうまく説明されています。 _-e
_(sudoedit
と同等)の説明は次のとおりです。
_
-e
__
-e
_(編集)オプションは、コマンドを実行する代わりに、ユーザーが1つ以上のファイルを編集したいことを示します。コマンドの代わりに、文字列 "sudoedit
"がセキュリティポリシーを調べるときに使用されます。ユーザーがポリシーによって承認されている場合、次の手順が実行されます。
- 一時的なコピーは、編集されるファイルから作成され、所有者は呼び出し元のユーザーに設定されます。
- ポリシーで指定されたエディターが実行され、一時ファイルが編集されます。
sudoers
ポリシーは、_Sudo_EDITOR
_、VISUAL
およびEDITOR
環境変数を(この順序で)使用します。 _Sudo_EDITOR
_、VISUAL
、EDITOR
のいずれも設定されていない場合、エディターのsudoers(5)
オプションにリストされている最初のプログラムが使用されます。- 変更されている場合、一時ファイルは元の場所にコピーされ、一時バージョンは削除されます。
指定したファイルが存在しない場合は作成されます。
Sudo
によって実行されるほとんどのコマンドとは異なり、エディターは、呼び出し元のユーザーの環境を変更せずに実行されます。何らかの理由でSudo
が編集済みのバージョンでファイルを更新できない場合、ユーザーに警告が表示され、編集済みのコピーは一時ファイルに残ります。
特に、3番目のステップに注意してください。編集の最後にファイルが変更された場合のみ、元のファイルが変更されます。したがって、ファイルを監視するプログラムがある場合、これは、(a)中間書き込みが取得されること、および(b)最後に変更を行わないことにした場合の不要なアクションを回避するのに役立ちます。