sudoedit: sudo vi ではなくこれを使用する理由は何ですか?

sudoedit: sudo vi ではなくこれを使用する理由は何ですか?

によるマニュアルページ:

sudoedit /etc/file

ファイルのコピーを作成し、現在のユーザーとして開き、保存すると既存のファイルがコピーで上書きされます。

一方

sudo vi /etc/file

ファイルをルートとして開く

マニュアル ページには、次の理由により sudoedit は sudo と異なると記載されています。

エディタは呼び出したユーザーの環境を変更せずに実行される

最初の方法の方が安全ですか? そうであれば、その理由は何ですか? sudo vi の代わりに sudoedit を使用する他の理由はありますか?

答え1

まったく関係のない何かを検索しているときにこの質問に偶然出会ったのですが、これまでまったく言及されていなかった次の重要な違いを追加したいと思いました。sudoedit はエディターを root として実行しません。

$ sudo vim /etc/farts.conf 

単にvimをrootとして実行し、ファイルを読み込めるようにします。欠点は、エディタもrootとして実行され、何でもできるということです。ユーザーに設定ファイルの編集だけを許可したいのであれば、残念ですが、システム全体で。:shまたは を使用して vim からシェルを生成することを妨げるものは何もありません:!command。これらはサブプロセスなので、root としても実行されます。

一方で:

$ sudoedit /etc/farts.conf

実際には動作が異なります。/tmp に一意の名前のコピーが作成され、権限はユーザーのみにロックダウンされ、そのコピー上で通常どおり、ルート権限なしでエディターが起動されます。

エディターを終了すると、一時ファイルと元のファイルが比較され、変更があった場合は元のファイルが編集内容に安全に置き換えられます。

このシナリオでは、ユーザーがシステム ファイルを編集できるようにはなりますが、ランダムなバイナリを root として実行したり、ファイル システムのあらゆる場所にアクセスしたりすることは許可されません。

これが主に実際の違いであり、言及された残りは単なる便利な副作用です。

答え2

まず、sudo vimでは既にデフォルトのエディタが明示的に指定されていますが、 で定義してある場合は必要ありません$EDITORsudoeditを使用すると、何かを編集するたびにエディタを定義する必要がなくなり、マルチユーザー システムでは、各ユーザーが個人的に好みのエディタを使用できるようになります。

sudoどのようにでしょうか? 通常のユーザーが特定のファイルを編集する権限のみを持つシステムを考えてみましょう。ただし、他の操作は実行できません。ユーザーに、およびおよびおよびおよび(など)sudoを許可する必要があります。そうする代わりに、ユーザーが好きな設定を選択して、ファイルへのアクセスを許可するだけで済みます。(Emacs 愛好者に Vim の使用を強制すると想像してください...)sudo visudo vimsudo nanosudo emacssudo picosudoedit$EDITOR

もう 1 つの問題は、 が$EDITORに設定されていてvim、ユーザーの に のカスタマイズ設定がある場合、または を.vimrc使用すると、それらの設定が使用されないことです。ただし、 では呼び出し元のユーザーの環境が保持されるため、 の設定も保持されます。sudo vimsudo $EDITORsudoedit

参照:sudoedit の何がそんなに優れているのでしょうか?

関連情報