
によるマニュアルページ:
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
では既にデフォルトのエディタが明示的に指定されていますが、 で定義してある場合は必要ありません$EDITOR
。sudoedit
を使用すると、何かを編集するたびにエディタを定義する必要がなくなり、マルチユーザー システムでは、各ユーザーが個人的に好みのエディタを使用できるようになります。
sudo
どのようにでしょうか? 通常のユーザーが特定のファイルを編集する権限のみを持つシステムを考えてみましょう。ただし、他の操作は実行できません。ユーザーに、およびおよびおよびおよび(など)sudo
を許可する必要があります。そうする代わりに、ユーザーが好きな設定を選択して、ファイルへのアクセスを許可するだけで済みます。(Emacs 愛好者に Vim の使用を強制すると想像してください...)sudo vi
sudo vim
sudo nano
sudo emacs
sudo pico
sudoedit
$EDITOR
もう 1 つの問題は、 が$EDITOR
に設定されていてvim
、ユーザーの に のカスタマイズ設定がある場合、または を.vimrc
使用すると、それらの設定が使用されないことです。ただし、 では呼び出し元のユーザーの環境が保持されるため、 の設定も保持されます。sudo vim
sudo $EDITOR
sudoedit