【问题标题】:Android Nougat ProcessBuilder ignores PATH env variable - bug/issue?Android Nougat ProcessBuilder 忽略 PATH 环境变量 - 错误/问题?
【发布时间】:2017-08-05 21:34:22
【问题描述】:

我有一个 android 应用程序,它在第一次运行时会提取一些本机可执行文件并使用它来完成一些工作。它在牛轧糖之前起作用并停止工作。经过几天或调查后,我发现 PATH 环境变量已被接受但未考虑在内!我正在尝试它是一个功能还是一个错误。

首先,让我们看看我们有什么,以及我们是否能够从 cmd 执行相同的操作。 我已经用 'my.app.package' 替换了实际的 android 应用程序包,并且用 '...' 替换了与 SO 无关的输出。

ZTE_BLADE_V0800:/ $ run-as my.app.package
ZTE_BLADE_V0800:/data/data/my.app.package $ whoami
u0_a129
ZTE_BLADE_V0800:/data/data/my.app.package $ ls -l
total 56
drwxrwx--x  2 u0_a129 u0_a129 4096 2017-03-14 16:15 app_build
drwxrwx--x  2 u0_a129 u0_a129 4096 2017-03-15 13:15 app_buildSources
drwxrwx--x  2 u0_a129 u0_a129 4096 2017-03-14 16:15 app_downloads
-rw-------  1 u0_a129 u0_a129   35 2017-03-14 16:16 app_repository
drwxrwx--x 14 u0_a129 u0_a129 4096 2017-03-14 16:16 app_sdk
drwxrwx--x  3 u0_a129 u0_a129 4096 2017-03-14 16:15 app_temp
drwxrwx--x  2 u0_a129 u0_a129 4096 2017-03-14 16:15 cache
lrwxrwxrwx  1 root    root      54 2017-03-15 13:15 lib -> /data/app/my.app.package-2/lib/arm
ZTE_BLADE_V0800:/data/data/my.app.package $ ls -l ./app_sdk/                                                                                                    
total 96
...
drwx------ 4 u0_a129 u0_a129 4096 2017-03-14 16:16 cppcheck#1.64#1
...
ZTE_BLADE_V0800:/data/data/my.app.package $ ls -l ./app_sdk/cppcheck\#1.64\#1/                                                                                  
total 16
...
drwx------ 3 u0_a129 u0_a129 4096 2017-03-14 16:16 bin
-rw------- 1 u0_a129 u0_a129    0 2017-03-14 16:16 init.done
ZTE_BLADE_V0800:/data/data/my.app.package $ ls -l ./app_sdk/cppcheck\#1.64\#1/bin                                                                               
total 6960
drwx------ 2 u0_a129 u0_a129    4096 2017-03-14 16:16 cfg
-rwxr-xr-x 1 u0_a129 u0_a129 2345332 2017-03-14 16:16 cppcheck
-rwxr-xr-x 1 u0_a129 u0_a129 1211424 2017-03-14 16:16 libgnustl_shared.so
ZTE_BLADE_V0800:/data/data/my.app.package $ export PATH=$PATH:./app_sdk/cppcheck#1.64#1/bin
ZTE_BLADE_V0800:/data/data/my.app.package $ export LD_LIBRARY_PATH=./app_sdk/cppcheck#1.64#1/bin
ZTE_BLADE_V0800:/data/data/my.app.package $ cppcheck --version
Cppcheck 1.65 dev
ZTE_BLADE_V0800:/data/data/my.app.package $

现在让我们尝试在运行时做同样的事情:

ProcessBuilder processBuilder = new ProcessBuilder();

String path =
  System.getenv("PATH") +
  ":./app_sdk/cppcheck#1.64#1/bin";
processBuilder.command(new String[] {
//      "sh", "-c", "echo $PATH", // (1) working
//      "sh", "-c", "echo $LD_LIBRARY_PATH", // (2) working
        "./app_sdk/cppcheck#1.64#1/bin/cppcheck", "--version" // (3) working
//      "cppcheck", "--version"                             // (4) NOT working even with PATH env variable passed
      });
processBuilder.directory(new File("/data/data/my.app.package/"));
Map<String, String> env = processBuilder.environment();
env.put("PATH", path);
env.put("LD_LIBRARY_PATH", "./app_sdk/cppcheck#1.64#1/bin");
process = processBuilder.start();

我得到IOException 抛出:

原因:error=13,权限被拒绝 无法运行程序“cppcheck”(在目录中 "/data/data/my.app.package"): 错误=13

让我们看看 PATH 是否正确传递。 取消注释注释 (1) 并注释其他命令行,确认已设置:

/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin:./app_sdk/cppcheck#1.64#1/bin

让我们看看是否正确传递了 LD_LIBRARY_PATH。 取消注释注释(2)并注释其他命令行,确认已设置:

./app_sdk/cppcheck#1.64#1/bin

现在让我们看看我是否能够通过完整路径运行该工具。 取消注释(3)并注释其他命令行,看看它现在正在工作:

Cppcheck 1.65 开发版

哇,即使传递了 PATH,我也必须传递可执行文件的完整路径。如果我使用短工具名称,我会收到 Permission denied 错误。

是牛轧糖(因为我只用它启动牛轧糖)功能或问题还是我错过了什么?

我知道 Nougat 引入了更严格的安全策略,但我认为没有理由停止工作,因为所有文件都在应用程序沙箱中(我的应用程序目录中的内部目录)。

PS。我不能只替换命令行中的所有短可执行文件名称,因为可执行文件也可以使用短可执行文件名称运行另一个可执行文件,所以我最终需要考虑 PATH 变量。

【问题讨论】:

    标签: android security processbuilder android-7.0-nougat android-security


    【解决方案1】:

    我没有收到 Google 的任何回复(他们从 1 月 25 日开始着手处理),所以我不得不像评论 (3) 中那样通过 完整的可执行路径 解决它。

    【讨论】:

    • 实际上我得到了谷歌的回复,这是在 Nougat 之前的一个错误,即使在 Nougat 之前它也不应该以这种方式工作
    猜你喜欢
    • 2015-12-12
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多