Apache-2.2

從 PHP 執行 adb

  • October 4, 2012

我從 Ubuntu 遷移到 CentOS,現在adb從 PHP 執行時遇到問題。

我正在嘗試執行shell_exec("/path/to/adb devices");

我得到:

ADB server didn't ACK
failed to start daemon
error cannot connect to daemon
daemon not running. starting it now on port 5037

當然adb無法啟動,因為它已經在埠 5037 上執行和偵聽,如果我嘗試從命令行adb devices以 root 或普通使用者身份執行,它會返回所有連接的設備。

此配置以前適用於 Ubuntu。

有什麼不同?有什麼建議麼?

我會說它有 90% 的可能性與 SELinux 相關。您可以通過在 中查找條目來確認/var/log/audit/audit.log

CentOS 預設啟用 SELinux。

當您adb從 PHP 腳本執行時,它很可能在httpd的安全上下文下執行,這不允許傳出網路連接。

快速修復是允許httpd進行傳出網路連接:

setsebool -P httpd_can_network_connect on

請記住,這將允許傳出連接到任何地方。

安全的解決方法是編寫一個本地策略限制adb並允許它連接到埠 5037,訪問 USB 設備等,但這是很多工作……

引用自:https://serverfault.com/questions/434943