我有一个 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 脚本。