权限 – 脚本上的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被拒绝,即使fail2ban可以运行sh;我可能在我的sudo中做错了什么).

可能有用的东西是fail2ban使用Python的os.system()来执行命令.但是我以这种方式重建它的尝试也失败了:

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

所有这些都让我一无所有.我很乐意得到任何帮助.

(旁注:实际上,fail2ban由于某种原因没有获得126退出代码,只是用代码0x7e00吐出错误,这意味着进程已停止但退出代码为零.花了一些时间来计算出来,以为我会分享.)

解决方法:

一如既往,除了我试图运行的脚本中的错误之外,它与任何事情无关!

具体来说,我调用的脚本试图运行位于同一目录中的另一个脚本.要获取公共目录的名称,而不是使用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.

上一篇:11.Ingress资源


下一篇:阿里云SLB的健康检查配置