我用这段代码从mod_exec proftpd执行外部脚本。
执行引擎开启 执行日志/选择/proftpd_mod_exec.log ExecOptions logStderr logStdout
<IfUser yogi>
ExecBeforeCommand STOR,RETR /home/yogi/Desktop/kab.sh EVENT=BeforeCommand FILE='%f'
ExecOnCommand STOR,RETR /home/yogi/Desktop/kab.sh EVENT=OnCommand FILE='%f'
</IfUser>
但是我在proftpd_mod_exec.log文件上收到这样的错误代码。STOR 执行之前命令"/home/yogi/Desktop/kab.sh"失败:执行格式错误
我该如何解决它?
> 来自 http://www.proftpd.org/docs/contrib/mod_exec.html
此模块对于登录名或受 DefaultRoot 影响的登录名将无法正常工作。这些指令使用 chroot(2( 系统调用, 这在脚本方面造成了严重破坏。脚本/shell 解释器的路径通常假定在 chroot 中不再有效的某个位置。此外,大多数现代操作系统对许多二进制文件(包括脚本/shell 解释器(使用动态加载的库(.so 库(。这些库在加载时的位置也被假定;这些假设在Chroot中被打破了。特别是 Perl,它被文件系统位置假设所困扰,以至于几乎不可能让 Perl 脚本在 chroot 中工作,除非将 Perl 本身安装到 chroot 环境中。
从错误消息听起来就是这样。您已启用 chroot,但由于文件在 chroot 中的预期位置不可用,脚本无法执行。
作者建议不要因此使用该模块。 要让它工作,您需要找出 chroot 目标中所需的依赖项,并在适当的位置设置它们。或者为用户禁用 chroot,然后重试。第三种可能性:构建一个几乎没有依赖关系的静态链接二进制文件。
或者,正如该模块的作者所建议的那样,尝试使用 FIFO 和 proftpd 日志记录功能来触发 chroot 环境之外的脚本。