`sudo -s`の使用を制限する


8

Linuxサーバーの一部にNagiosをセットアップしていますが、少し問題が発生しています。check_ide_smartプラグインを実行するためのシステムへのrootアクセスが必要です。これを実行するには、check_by_sshプラグインを使用してリモートホストのnagiosアカウントにSSHで接続し、check_ide_smartsudoを使用して実行します。

/etc/sudoersプログラムを機能させるために、最初に次の行を追加しました。

nagios  ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart

これをローカルで実行すると問題なく動作しましたが、Nagiosから実行すると問題が発生しました。TTYが生成されず、プラグインが機能しませんでした。

sudoのmanページを調べたところ、-sオプションが見つかりました。これは、シェルを生成してそこでプログラムを実行します。sudo -s-sがコマンドを/bin/bash -c /usr/lib/nagios/plugins/check_ide_smartに変更するため、sudoersファイルでは許可されていないため、を使用しようとしたときに権限の問題に遭遇しました。代わりにそのコマンドを使用するようにsudoersファイルを変更しようとしましたが、機能しませんでした。引用符を使用すると構文エラーになります。

私は最終的に次の行を使用して動作させました/etc/sudoers

nagios ALL=/bin/bash

nagiosユーザーが何でもできるrootシェルを生成することを許可しているので、これは私には本当に間違っていると感じています。

この時点では、多分、nagiosユーザーが読み取り専用権限を持っているシェルスクリプトにコマンドを入れることで機能するので、シェルスクリプトを作成しました。

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@

残念ながら、渡されたパラメーター($@)をプラグインで正しく機能させることができなかったため、これが機能するかどうかわかりません。 編集:$@はそれが機能するために引用する必要がありました。@derobertと@pjzに感謝します。@Mike Arthurのソリューションを使用して動作させたので、動作するかどうかはまだわかりません。

sudo -sルートシェルのスポーンを許可せずに作業できる方法はありますか?

回答:

に次の行を追加しました/etc/sudoers

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

末尾のアスタリスクに注意してください。それがなければ、これは機能しません。答えてくれて@Mike Arthurに感謝します。

回答:


7

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

これは機能し、引数を許可します。


それはうまくいきませんでした。詳細は私の編集を参照してください。
Chris Lieb、

@Chris Lieb:呼び出しを「sudo -s ...」から「sudo / bin / bash -c ...」に変更する必要があります。その後、動作するはずです。ここで同様の設定が機能しています(nagiosではありませんが、同様です)。
マーティンC.

私はそれを修正しました。今すぐ試してください(ワイルドカードのアスタリスク付き)。
Mike McQuaid

2

参考までに、シェルスクリプトで$ @を引用符で囲む必要があります。

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

$@魔法です。bashのマンページから、

@ 1から開始して、位置パラメーターに展開します。展開が二重引用符で囲まれている場合、各パラメーターは個別の単語に展開されます。つまり、「$ @」は「$ 1」「$ 2」と同等です...単語内で二重引用符で囲まれた展開が発生した場合、最初のパラメータの展開が元の単語の最初の部分と結合され、展開最後のパラメータの最初の単語の最後の部分と結合されます。位置パラメータがない場合、「$ @」と$ @は何も展開しません(つまり、削除されます)。

また、bashを開始しても、ptyは生成されません。nagiosプラグインを実行するためにターミナルが必要な理由について私は困惑しています。すべきではない。たぶん、実際の問題は、sudoの環境サニタイズでしょうか?


このプラグインは、問題を引き起こした唯一のものです。これまでに設定した他のどれもrootアクセスを必要としないため、sudoを使用する必要はありませんでした。このため、sudoがシェルを生成しないことが原因であるのか、シェルの実行が必要なcheck_ide_smartプラグインが原因であるのか、私にはわかりません。
Chris Lieb、

1

sudo -sルートシェルを使用して起動する代わりに、nagiosユーザーがttyを使用せずにsudoを使用できるようにします!requiretty。あなたは/etc/sudoers次のことを持っている必要があります。

# Allow Nagios extra privs
Defaults:nagios !requiretty
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_plugin

...これは、パスワードなしで、ttyなしで、直接sudoアクセスを許可します。すべてのプラグインへのsudoアクセスが必要な場合は、「check_ide_plugin」をオフのままにできます。

また、NRPEを使用しています。これは、check_by_sshよりも少し安全に見えますが、もう少し設定が必要です。/ etc / sudoers thoでも同じアイデアです。nagiosをnrpeと交換してください。:)

〜トミー


0

スクリプトを再試行しますが、$ @を二重引用符で囲みます。

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

-1

ルートシェルを起動せずに-sを使用することはできないと思います(ルート権限が必要であると想定しています)。-sオプションは特にシェルを生成するためのものです。それが-sの意味です。sudo(8)から:

-s [command]
    The -s (shell) option runs the shell specified by the SHELL
    environment variable if it is set or the shell as specified
    in passwd(5).  If a command is specified, it is passed to
    the shell for execution.  Otherwise, an interactive shell
    is executed.

1
シェルが実行され/bin/bashますが、現在のところ、への任意の呼び出しを許可しています。これにより、何の制限もなく、どのコマンドを呼び出すことも制限なしに、対話型シェルを生成できます。
マーティンC.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.