GNU/Linux >> Linux の 問題 >  >> Linux

通常のユーザーにSudoVimアクセスを提供するのはなぜ危険なのですか?

新しいユーザーを作成して、彼にsudoアクセスを許可したいと思います。具体的には、sudo vimを使ってほしい httpd.confを編集します。私はこれをsudoersで書きました:

user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

しかし、これは危険かもしれないと聞きました。なぜこれが問題になるのですか?問題はどのくらい深刻ですか?

承認された回答:

コマンドライン引数を制限しますが、ユーザーがvimを使用してランダムファイルを開いたり、編集したり、上書きしたりすることを妨げるものは何もありません。 ルートとして実行されたら。

ユーザーはsudo vim /etc/httpd/conf/httpd.confを実行できます そして

  • 編集バッファからすべてのテキストをクリアします
  • 次に、便利なように既存のファイルをソースします(ただし、これは必須ではありません)。たとえば、sudo構成
    :r /etc/sudoers 注:SELinuxによって制限されていない限り、ユーザーは anyを読むことができます。 この方法でファイルしてください!
  • より多くのsudo権限を自分に付与するuser ALL=(ALL) NOPASSWD: ALL
  • 古い構成を上書きします:w /etc/sudoers

ユーザーがシステムにアクセス、変更、または破壊できるようになった同様の方法を何十も想像できます。

彼がsudoログメッセージでApache構成を編集しているのを見るだけなので、この方法でファイルが変更された監査証跡すらありません。これは、sudoを付与する際のセキュリティリスクです。 任意の編集者への特権。

これは、tarなどのコマンドにsudoルートレベルの権限を付与する理由とほぼ同じです。 および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 shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
これにより、ユーザーaaronは/usr/bin/moreを実行できます。 および/usr/bin/vi noexecが有効になっています。これにより、これら2つのコマンドが他のコマンド(シェルなど)を実行できなくなります。


Linux
  1. ルートユーザーがSudo権限を必要とするのはなぜですか?

  2. 他のユーザーが強制ユーザー=私なしでSamba共有にアクセスできないのはなぜですか?

  3. CentOSでsudoユーザーを作成する

  1. Ubuntuでsudoユーザーを作成する

  2. DebianおよびUbuntuオペレーティングシステムでsudoアクセスを許可する

  3. RHELおよびCentOSでsudoアクセスを許可する

  1. LinuxですべてのSudoユーザーを見つける方法

  2. ユーザーのルートレスPodmanへのアクセスの制御

  3. Virtualboxに特定のユーザーのみにアクセスを許可しますか?