it-swarm-ja.tech

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

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

プログラムが機能するように、最初に/etc/sudoersに次の行を追加しました。

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

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

Sudoのマニュアルページを掘り下げて、-sオプションを見つけました。これは、シェルを生成し、そこでプログラムを実行します。 Sudo -sを使用しようとすると、-sによってコマンドが/bin/bash -c /usr/lib/nagios/plugins/check_ide_smartに変更されたため、アクセス許可の問題が発生しました。これは、sudoersファイルでは許可されていません。代わりにそのコマンドを使用するようにsudoersファイルを変更しようとしましたが、それは機能せず、引用符を使用すると構文エラーになります。

最終的には、/etc/sudoersの次の行を使用して機能するようになりました。

nagios ALL=/bin/bash

Nagiosユーザーが何でもできるルートシェルをスポーンできるようにしているので、これは私には本当に間違っていると感じます。

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

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin [email protected]

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

ルートシェルの生成を許可せずにSudo -sを機能させる方法はありますか?

回答:

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

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

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

8
Chris Lieb

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

これは機能し、引数を許可する必要があります。

7
Mike McQuaid

参考までに、正しく機能させるには、シェルスクリプトで$ @を引用する必要があります。

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "[email protected]"

[email protected]は魔法です。 bashのマンページから、

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

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

2
derobert

Sudo -sを使用してルートシェルを起動する代わりに、nagiosユーザーが!requirettyを使用してttyなしでSudoを使用できるようにします。 /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」をオフのままにしておくことができます。

また、check_by_sshよりも少し安全に見えるNRPEを使用しますが、もう少しセットアップが必要です。/etc/sudoers thoでも同じ考えですが、nagiosをnrpeと交換するだけです。 :)

〜トミー

1
TommyTheKid

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

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "[email protected]"
0
pjz