私は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 denied
fail2ban
sh
sudo
知っておくと便利なのは、fail2ban
Pythonを使用して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