it-swarm-ja.com

sudoedit:なぜSudo viで使用するのですか?

man page によると:

sudoedit /etc/file

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

一方

Sudo vi /etc/file

ルートとしてファイルを開きます

Manページには、sudoeditはSudoとは異なると記載されています。

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

もしそうなら、最初の方法はより安全ですか?なぜですか? Sudo viの代わりにsudoeditを使用する他の理由はありますか?

11
jonatan

まったく関係のないものを探しているときにこの質問に出くわしましたが、これまでに言及されていない次の重要な違いを付け加えようと思いました:sudoeditはエディターをrootとして実行しません。

$ Sudo vim /etc/farts.conf 

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

一方:

$ sudoedit /etc/farts.conf

実際には動作が異なります。/tmpに一意の名前でコピーを作成し、ユーザーのみにアクセス権を制限し、そのコピーに対してroot権限なしで通常どおりエディターを起動します。

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

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

それは主に実際の違いであり、言及されている残りは単なるきちんとした副作用です。

19
mr_daemon

まず最初に、Sudo vimはデフォルトのエディターを明示的に言及していますが、$EDITORで定義している場合は必要ありません。 sudoeditを使用すると、何かを編集するたびにエディターを定義する必要がなくなります。マルチユーザーシステムでは、誰でも自分の好きなエディターを使用できます。

どうして?通常のユーザーが特定のファイルを編集するためのSudo特権のみを取得するシステムを考えます。ただし、他のものを使用してSudoを実行することは制限されています。 Sudo viおよびSudo vimおよびSudo nanoおよびSudo emacsおよびSudo picoを許可する必要があります(et cetera)。そうする代わりに、$EDITORを好きなように設定することで、ファイルをsudoeditに許可することができます。 (Emacs愛好家にVimの使用を強制するとします…)

別の問題は、$EDITORvimに設定されていて、ユーザーの.vimrcにカスタマイズ設定がある場合、Sudo vimまたはSudo $EDITORを使用する場合、それらの設定は使用されません。ただし、sudoeditは呼び出し元のユーザーの環境を保持するため、設定も保持されます。

参照: sudoeditの何が素晴らしいのですか?

10
slhck