スクリプトに対するfailure2ban権限が拒否されました。

スクリプトに対するfailure2ban権限が拒否されました。

私はRHEL 5から6.5にアップグレードしてfail2banリセットしました。特権の問題のため、現在のカスタム操作を操作できないようです。私は何が間違っているのか、fail2banスクリプトを正常に実行できる方法を知りたくありません。

fail2ban一般的なシェルスクリプトを実行するように設定されたタスクがあります。私はこのようなことを好む。

actionstart = <script> <jail> start

<script>ファイルで指定された場所jail.local:

action   = run-script[jail=drupal-reg-lim,script=/path/to/script.sh]

ただし、スクリプトを実行しようとすると、次のように126終了コードが表示されます。tldp.org、これは「権限の問題があるか、コマンドを実行できません」を意味します。

これは、内容がscript.sh完全に空であるか、シェバン()のみであるかに関係なく#!/bin/sh発生します。sudo /path/to/script.shタスクを実行してみてください。

私はactionstartそれをログにし、スクリプトを次のように入力するように変更しようとしました/etc/fail2ban/action.d/script.sh

actionstart = <script> <jail> start || logger -dit fail2ban-run-script <script> <jail> start failed: exitcode = $?

以下を効果的に出力します/var/log/messages

Apr 23 05:49:25 xx1 fail2ban-run-script[8236]: /etc/fail2ban/action.d/script.sh drupal-reg-lim start failed: exitcode = 126

shまた、ジョブを実行しようとしています。スクリプトを実行すると失敗します。私も次のことを試しましたchmod 777 script.sh

-rwxrwxrwx. 1 root root      10 Apr 23 05:12 script.sh

もう一つの考えは、これがSELinuxセキュリティコンテキスト(ログ出力でidわかるuid=0(root) gid=0(root) groups=0(root) context=unconfined_u:system_r:fail2ban_t:s0)と関連している可能性があることです。しかし、私はこれをうまくテストできませんでした(うまくいってもsudo -t fail2ban_t -r system_r /bin/sh失敗します。私のシステムで何かが間違っている可能性があります)。Permission deniedfail2banshsudo

知っておくと便利なのは、fail2banPythonを使用してos.system()コマンドを実行することです。ただし、この方法で再作成しようとしても失敗しました。

>>> import os
>>> print os.system('/etc/fail2ban/action.d/script.sh || echo "No"')
0

これらすべてが私には何も残していませんでした。どんな助けでも受け取ることができて嬉しいです。

(注:実際にはfail2ban何らかの理由で126の終了コードを取得できず、コード0x7e00でエラーが発生しました。これはプロセスが停止しましたが終了コードが0であることを意味します。見つけるのに時間がかかりました。共有すると思いました。)

答え1

いつものように、私が実行したいスクリプトのエラー以外には関係ありません!

特に、私が呼び出すスクリプトは、同じディレクトリにある別のスクリプトを実行しようとします。BASE_DIR=$(dirname $(readlink -f "$0"))誤って作成した名前を使用する代わりにパブリックディレクトリの名前を取得するには、言うまでもなくステータスBASE_DIR=$(readlink -f "$0")コード126で"${BASE_DIR}/another_script.sh arg1 arg2..."失敗しました(存在しない無意味なパスを実行しようとしました)。/path/to/script.sh/another_script.sh

関連情報