新しいユーザーを作成して、彼に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つのコマンドが他のコマンド(シェルなど)を実行できなくなります。