コマンドライン引数を制限しても、ユーザーがvimを使用してrootとして実行されたランダムファイルを開いたり、編集したり、上書きしたりすることを妨げるものは何もありません。
ユーザーは実行sudo vim /etc/httpd/conf/httpd.conf
してから
- 編集バッファーからすべてのテキストを消去します
- 次に、便宜上、既存のファイルをソースにします(必須ではありませんが)。たとえば、sudo構成
:r /etc/sudoers
注:SELinuxによって制限されていない限り、ユーザーはこの方法で任意のファイルを読み取ることができます。
- より多くのsudo特権を自分に付与する
user ALL=(ALL) NOPASSWD: ALL
- 古い構成を上書きする
:w /etc/sudoers
ユーザーがシステムにアクセス、変更、または破壊できるようになった同様の方法が多数想像できます。
sudoログメッセージでApacheの設定を編集しているのを見るだけなので、この方法で変更されたファイルの監査証跡もありません。これは、sudo
編集者に特権を付与する際のセキュリティリスクです。
これは、次のようなコマンドにsudoのルートレベルの権限を付与する理由多かれ少なかれ同じ理由であるtar
とunzip
あなたはシステムバイナリまたはアーカイブ内のシステム構成ファイルの置き換えを含むから、安全でないことが多いです、何もないようにします。
2番目のリスクは、他の多くのコメンテーターが指摘しているvim
ように、シェルエスケープを可能にし、vim内から任意のコマンドを実行できるサブシェルを開始できることです。sudo vimセッション内から、これらはrootとして、たとえばシェルエスケープとして実行されます。
:!/bin/bash
インタラクティブなルートシェルを提供します
:!/bin/rm -rf /
パブで良い話をするでしょう。
代わりに何をしますか?
sudo
ユーザーが所有していないファイルを安全な方法で編集できるようにするために引き続き使用できます。
sudoers構成では、特別な予約済みコマンドにsudoedit
続けて、ユーザーが編集できるファイルへのフル(ワイルドカード)パス名を設定できます。
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
ユーザーは-e
、sudoコマンドラインでスイッチを使用するか、sudoedit
次のコマンドを使用できます。
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
manページで説明されているように:
この-e (edit)
オプションは、コマンドを実行する代わりに、ユーザーが1つ以上のファイルを編集することを希望することを示します。コマンドの代わりに、セキュリティポリシーを参照するときに文字列「sudoedit」が使用されます。
ユーザーがポリシーによって承認されている場合、次の手順が実行されます。
- 所有者を呼び出し側ユーザーに設定して、編集するファイルの一時コピーが作成されます。
- ポリシーで指定されたエディターが実行され、一時ファイルが編集されます。sudoersポリシーは、SUDO_EDITOR、VISUAL、およびEDITOR環境変数を(この順序で)使用します。SUDO_EDITOR、VISUAL、またはEDITORのいずれも設定されていない場合、エディター
sudoers
(5)オプションにリストされている最初のプログラムが使用されます。
- 変更されている場合、一時ファイルは元の場所にコピーされ、一時バージョンは削除されます。
指定されたファイルが存在しない場合、作成されます。
sudoによって実行されるほとんどのコマンドとは異なり、エディターは呼び出し元のユーザーの環境を変更せずに実行されることに注意してください。何らかの理由で、sudoが編集済みバージョンでファイルを更新できない場合、ユーザーに警告が表示され、編集済みコピーは一時ファイルに残ります。
また、このsudoers
マニュアルには、とオプションを使用してシェルエスケープに対する制限付き保護を提供する方法についてのセクション全体がRESRICT
ありNOEXEC
ます。
restrict
ユーザーが任意のコマンドを実行できるコマンドへのアクセスをユーザーに許可しないでください。多くのエディターには、シェルエスケープが無効になっている制限モードがありますが、sudoeditは、sudoを介してエディターを実行するより良いソリューションです。シェルエスケープを提供するプログラムが多数あるため、ユーザーをそうでないプログラムのセットに制限することは、多くの場合実行不可能です。
そして
noexec
共有ライブラリをサポートする多くのシステムには、環境変数(通常はLD_PRELOAD)を代替共有ライブラリにポイントすることにより、デフォルトのライブラリ関数をオーバーライドする機能があります。このようなシステムでは、sudoのnoexec機能を使用して、sudoで実行されるプログラムが他のプログラムを実行できないようにすることができます。注:... ...
コマンドでnoexecを有効にするには、NOEXEC
上記のユーザー仕様セクションに記載されているタグを使用します。再びその例を示し
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
ます。これにより、ユーザーaaronが実行さ/usr/bin/more
れ/usr/bin/vi
、noexecが有効になります。これにより、これらの2つのコマンドが他のコマンド(シェルなど)を実行できなくなります。
vim
、ユーザーは好きなファイルを自由に開いて書き込むことができます。