我从 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 上使用。
有什么区别?有什么建议吗?
答案1
我认为有 90% 的可能性与 SELinux 有关。您可以通过查找 中的条目来确认/var/log/audit/audit.log
。
CentOS 默认启用 SELinux。
当您从 PHP 脚本运行时adb
,它很可能在httpd
的安全上下文中运行,这不允许传出网络连接。
这快的修复方法是允许httpd
建立传出网络连接:
setsebool -P httpd_can_network_connect on
请记住,这将允许到任何地方的传出连接。
这安全的修复方法是编写一个本地策略来限制adb
并允许它连接到端口 5037、访问 USB 设备等,但这是一个很多工作的...