新しいユーザーを作成し、彼にsudoアクセス権を与えたいと思います。特に、私は彼がsudo vim
httpd.confを使用して編集したいと思います。私はsudoersで次のように書きました。
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
しかし、これは危険な可能性があると聞きました。これがなぜ問題になるのですか?問題はどれほど深刻ですか?
答え1
コマンドライン引数を制限しましたが、ユーザーがvimを使用するのを防ぐことはできません。任意のファイルを開く、編集、上書きする一度rootとして実行しています。
sudo vim /etc/httpd/conf/httpd.conf
ユーザーは以下を実行できます
- 編集バッファ内のすべてのテキストを消去する
- 次に、便宜のために既存のファイルをインポートします(必要なくても)。例:sudo config
:r /etc/sudoers
注:SELinuxで制限されていない限り、ユーザーは読むことができます。どのこのように受付してください! - 自分にもっとsudoを許可する
user ALL=(ALL) NOPASSWD: ALL
- 以前の構成の上書き
:w /etc/sudoers
現在、ユーザーがシステムにアクセスしたり、システムを修正または破損したりするための同様の方法がいくつかあると思います。
彼はsudoログメッセージでApache設定を編集しているように見えるので、この方法でどのファイルが変更されたのかについての監査証跡はありません。sudo
編集者に権限を付与すると、セキュリティ上のリスクがあります。
tar
これは、sudoやsudoなどのコマンドにrootレベルの権限を付与するのが通常安全ではない理由とほぼ同じです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
説明したようにマニュアルページ:
この
-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ユーザーはnoexecを有効にした状態で
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
実行できます。これにより、これら2つのコマンドが他のコマンド(シェルなど)を実行するのを防ぎます。/usr/bin/more
/usr/bin/vi
答え2
簡単な答え:
Vim コマンドは次のとおりです。
:shell
これでルートシェルができました。
答え3
この構成により、このユーザーはファイルを編集できます。この目的のために、彼はvim
root権限でエディタを起動します。
コマンドが実行されると、vim
ユーザーはエディタを使用して必要な操作をすべて実行できます。 - 彼は別のファイルを開くことができ、vimからシェルを起動することもできます。
これにより、ユーザーは任意のファイルを表示および編集でき、システム上で任意のコマンドを実行できるようになります。
答え4
可能な段階的なセキュリティ改善の1つは、次のものを置き換えることです。
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
そして
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
その後、ユーザーにそれを実行させますsudo rvim /etc/httpd/confs/httpd.conf
。
Vimは、-Zコマンドラインオプションまたはrvimでプログラムを起動して実行される制限モードをサポートします。制限モードを有効にすると、「外部シェルを使用するすべてのコマンドは無効になります。」このアプローチは、ユーザーがexコマンドを使用して他のファイルを開くのを防ぎませんが、:split file
少なくとも:!rm -rf /
。