VIM:「sudo vim bad_idea」?


20

#Vimのircユーザーは、次のようにVimでSudoを使用しないように促しました。

sudo vim bad_idea

/ var / www /などの場所で物事をしているとき、それなしで書くことはできません。したがって、sudoを使用しないことが問題になります。もちろん、/ tmp /などの別の場所で変更を加えてから、/ var / wwwにディレクトリをコピーすることもできます。しかし、私はもっと簡単な方法を感じています。

  1. 「sudo Vim」を使用しない場合、なぜですか?
  2. 最初の質問に「はい」の場合、sudoを使用しないようにするにはどうすれば問題を回避できますか?

回答:


35

私は最初のカテゴリーに分類されます。sudo vim /var/www/html/some_file悪い考えです。ログに記録されないシェルエスケープを許可します。代わりに、sudoedit /var/www/html/some_file;を使用します。同じ効果があります。


5
「ログに記録されないシェルエスケープ」とは何ですか?そして、なぜ/ var / wwwだけで重要ではないのですか?
ハッセン

6
vimには、コマンドラインで他のコマンドを実行する権限があります。ただし、vimはsudoを介して開始されたため、rootとして実行されているため、これらのコマンドはいずれもroot権限で実行されます。これらのコマンドは「シェルエスケープ」と呼ばれ、sudoの他の呼び出しとは異なりログに記録されません。また、/ var / wwwだけに限定されません。私がそれを使うのはどこでもです。bashrcファイルで「sudo vi」のエイリアスを「sudoedit」に変更しました。
ケビンM

私はあなたが何を得ているかを見て、同意したいが明確にしたい。彼の通常のsuおよびsudoルートアクティビティがログに記録されているかどうかはわかりません。「sudo vim」を使用すると、サブシェルをルートとして実行できます。これは正確です。そのシェル内では、「sudo」はルートができることとできないことを制御しません。
pbr 09年

3
ケビン、どうやって「sudo vi」を「sudoedit」にエイリアスできましたか?bashマニュアルから...「上記の文字/、$、 `、=およびシェルのメタ文字または引用文字はエイリアス名に表示されない場合があります。」...スペースは、それが話しているメタキャラクターの1つです。
PBR

9
OK、それ自体はエイリアスではありませんが、同じ効果があります: 'function sudo(){[[$ 1 == vi]] && shift && sudoedit "$ @" || コマンドsudo "$ @"; } '
ケビンM

10

参照:https : //stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi

%は現在のファイル名に置き換えられるため、次を使用できます。

:w!sudo tee%


teeを使用する場合は、 ':w!sudo tee%> / dev / null'をお勧めします。これにより、ファイル全体がエコーバックされないようにできます。私は通常、代わりに ':w!dd of =%'を使用します。これは、入力が速く、同じことを実現するためです。もちろん、これはsudoedit / sudo -eの使用を忘れたときだけです。
ジェームスサン2009年

7

vimではユーザーが任意のシェルコマンドを実行できるため、多くのシステム管理者はvimをsudoで使用することを許可していません。

rvimはvimに含まれています。これは制限されたvimであり、シェルコマンドを許可しません。(または、同じ理由で、vimを一時停止できるようにします。)

あなたが自分の箱でそれらの極端に行く必要があるかどうかは議論の余地があります。


1
+1。完全に同意します。sudo vimその後、入力:!bashとは、rootとしてシェルを持っている-正確な理由rvimが存在する
DBR

3
あなたはsudoのvimのことができれば実際に、あなたはおそらくすることができますsudo bashsudo su -ね?
dlamblin

@diamblin特権は、それよりも細かい詳細で集めることができるため、必ずしもそうではありません。そのため、rvimが必要です。「sudo vim」は、すべての意図と目的において「sudo su-」と同じです。ただし、1人のユーザーがシステム管理者であるDebianの小さな箱では、これはすべてアカデミックです。
リチャードホスキンズ

Ubuntuはこの問題にどのように対処しますか?CentOSでvi起動しますvimが、ルートとしてvi起動しviます。Ubuntuではvim両方のケースで使用され、sudo viまた、起動vim...
CWD

6

システム全体の設定ファイルを編集するとき、それは完全に大丈夫です---常にあなたがrootであることを覚えておいてください。

特別な場合/var/www/、つまりWebサーバーページでは、所有権/グループ/権限の変更を検討する必要がありますが、特定のセットアップ(シングル/マルチユーザー、実際のWebサーバー/ localhost、動的/静的など)


6
確かに+1-これはWebサーバーページを処理する最良の方法です。特権を昇格するのではなく、アクセスできることを確認してください。
ベッドウィール2009

1
-1 sudoeditが同じジョブを実行する場合、昇格された特権でvimを実行する理由はありません。
sml

4

このような質問は、額を叩くようにします。私はセキュリティの反対側にいます。「平均的な人が悪意のある活動を行うのを防ぐことが期待または要求されない限り、セキュリティはユーザーエクスペリエンスを妨げてはなりません。」

vimのsudo使用の防止は、単なるバンドエイドです。前に述べたように、誰かがちょうど使用することができます:

sudo su -

または

sudo /bin/bash

または

sudo nano file

または

sudo my_exectuable_text_editor file

電気ショック療法

誰かがボックスで悪意のあることをしているのを本当に心配している場合は、sudo(または明らかにrootパスワード)特権を与えないでください。sudoを使用した悪意のある活動を防ぐためのスライバーの弾丸はありません。すべての「修正」を「適用」して、悪意のあることをできないようにするだけで、狂気に陥ります。

誰かが所有権/グループの変更に言及しました。これは、Webサーバーが別のユーザーとして実行されており、ファイルのアクセス許可を変更したため、サイトが突然機能しなくなるという厄介な問題です。まあ、明らかにそれはあなたを助けません。Webサーバーが実行されるグループに自分自身を追加できますが、グループがファイルへの書き込みアクセス権を持っていない場合は、chmod -R g + w *(またはchmod個のファイル)を実行する必要があります。すべてのファイルをchmodしなければならない場合、あなたが望むものと面倒になることができます。

rvimの使用を提案する人さえいました。もちろん、/ etc / sudoersに行を追加して特定のユーザーにsudo rvimのみを許可することもできますが、そのルートに行かなければならない場合は、Webベースのファイルマネージャーを実装する方がよいと論理的には考えられます。このように、Webサーバーを実行しているユーザーとして実行されるため、ファイルのアクセス許可の問題はなく、誰がどのファイルを編集するかをきめ細かく制御できます。

とにかく私の2セント。


2

実行しsudo vimても$HOMEディレクトリは変更されないので、root権限でVimを実行$HOMEしますが、それでも通常のユーザーを指します。

Vimを初めて実行する場合は、~/.viminfoファイルが通常のユーザーディレクトリ内に作成されますが、ルート権限が付与されている場合があります。


1
sudoに依存します。ラップトップでsudo vim -c '!echo $HOME' -c qはホームフォルダーが提供されますが、サーバーではが提供され/rootます。その理由は、一方がOS Xで他方がGentooだからかもしれないし、/etc/sudoersセットアップの方法と関係があるかもしれません。
Nemo157

あぁ!あなたは正しいです-私はここで終了しましたが、なぜ私の.viminfoルートアクセスのみでしたか?
Ayrat

1

これが自分のコンピューターの場合 ... Denilsonが指摘したエッジケースを除いて、「sudo vim」を使用できない理由はありません。rootが所有する〜/ .viminfoを作成する可能性があります。

そうでない場合 -システム管理者ができることとできないことを制限している場合-"man sudo"ごと: "ほとんどのシステムでは、sudoのnoexec機能を使用してシェルエスケープを防ぐことができます。詳細については、sudoers(5)マニュアルを参照してください」

したがって、この場合、システム管理者がvim内からrootとしてサブシェルを実行する可能性を懸念している場合、noexec機能を使用できます。しかし...最初のケースに戻ります-これがあなたのコンピュータである場合、 'sudo vim'を実行しているあなたはかなり安全だと思います。


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