脚本的fail2ban权限被拒绝

脚本的fail2ban权限被拒绝

我刚刚从 RHEL 5 升级到 6.5 并fail2ban重新设置。我现在似乎无法让我的自定义操作正常工作,据说是因为权限问题。我不想知道我做错了什么,以及如何才能fail2ban成功运行脚本。

fail2ban设置了一个操作来运行通用 shell 脚本。我更喜欢这样的事情。

actionstart = <script> <jail> start

<script>文件中指定的位置jail.local

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

但是当我尝试运行脚本时,我得到了 126 退出代码,根据tldp.org,意味着存在“权限问题或命令不是可执行文件”。

无论内容script.sh是完全空的,还是只有一个 shebang ( #!/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使用 Pythonos.system()来执行命令。但我尝试以这种方式重新创建它也失败了:

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

这一切让我一无所有。我很高兴得到任何形式的帮助。

(旁注:实际上,fail2ban由于某种原因没有得到 126 退出代码,只是吐出代码为 0x7e00 的错误,这意味着进程已停止,但退出代码为零。我花了一些时间才弄清楚,所以我想分享一下。)

答案1

与往常一样,除了我尝试运行的脚本中的错误之外,它与任何其他事情都没有任何关系!

具体来说,我调用的脚本试图运行位于同一目录中的另一个脚本。要获取公共目录的名称,而不是使用BASE_DIR=$(dirname $(readlink -f "$0"))我意外编写的BASE_DIR=$(readlink -f "$0"),不用说,"${BASE_DIR}/another_script.sh arg1 arg2..."失败了(它试图运行不存在的无意义路径/path/to/script.sh/another_script.sh),状态代码为 126。

相关内容