Apache(CentOS)执行的 bash 脚本出现“文件未找到”

Apache(CentOS)执行的 bash 脚本出现“文件未找到”

我有一个 bash 脚本,它设置了一个用于访问一系列 JAR 的类路径(它是 tf,Team Foundation Server 的跨平台命令行工具)。文件结构如下:

/usr/bin/tee-clc/tf
/usr/bin/tee-clc/lib/*.jars

通过 Apache 运行的 Django 服务器启动了一个新的 tf 进程,执行 bash 脚本;但是,它无法访问 /usr/bin/tee-clc/lib 文件夹中的 jar 文件。似乎存在某种“沙盒”或类似的东西这里但搜索并没有取得多大进展。我猜想我可以访问 bash 文件的原因是它在路径中且可执行,但 JAR 却有所不同?

希望这个问题不要太模糊:为什么我无法从以 Apache 用户身份执行的 Bash 脚本访问文件(甚至是 777)。

更新

我开始认为它与 Python 的 subprocess.popen 有很大关系模仿shell 而不是实际使用 shell。我不认为指定 Shell=True 参数是“修复”,但我不确定如何在没有实际 shell 的情况下让 Bash 脚本工作……

答案1

目录权限是什么?

Apache 通常以特定用户身份运行 - 我记得 Centos 上是“apache”。您应该确保 apache 用户可以读取和执行文件所在的目录。

例如,您可以尝试以下方法检查 apache 是否可以看到以下文件:

sudo -u apache ls -l /usr/bin/tee-clc/tf

另外,我建议至少在 shellshock 漏洞真正修复之前停止执行任何 bash CGI 脚本。

相关内容