如何使用mod_exec proftpd linux

问题描述 投票:0回答:1

我使用此代码执行了来自mod_exec proftpd的外部脚本。

执行引擎ExecLog /opt/proftpd_mod_exec.logExecOptions 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 ExecBeforeCommand'/home/yogi/Desktop/kab.sh'失败:Exec格式错误

我该如何解决?

linux proftpd
1个回答
0
投票

来自http://www.proftpd.org/docs/contrib/mod_exec.html

此模块不适用于登录名或受DefaultRoot影响的登录名。这些指令使用chroot(2)系统调用,该脚本调用会造成严重破坏。脚本/ shell解释器的路径通常假定某个位置在chroot中不再有效。此外,大多数现代操作系统都将动态加载的库(.so库)用于许多二进制文件,包括脚本/ shell解释器。这些库在要加载时的位置也被假定;这些假设在chroot中被打破了。特别是Perl,是在文件系统位置假设的基础上设计的,以致几乎不可能使Perl脚本在chroot中工作,而无需将Perl本身安装到chroot环境中。

从错误消息中听起来就这样。您已启用chroot,由于文件在chroot中的预期位置不可用而无法执行该脚本。

作者因此建议不要使用该模块。要使其正常工作,您需要在chroot目标中找出所需的依赖项,并将其设置在适当的位置。或为用户禁用chroot,然后重试。第三种可能性:构建几乎没有依赖项的静态链接二进制文件。

或按照该模块的作者的建议,尝试使用FIFO和proftpd日志记录功能来触发chroot环境之外的脚本。

© www.soinside.com 2019 - 2024. All rights reserved.