使用 Google Translate API,Selinux 似乎正在阻止访问我的 Google 凭据 .json 文件。 selinux 上下文是“unconfined_u:object_r:user_home_t:s0”,所以我尝试使用以下命令将其更改为 httpd_sys_content_t:“semanage fcontext -a -t httpd_sys_content_t [/path/filename]”和“restorecon -Rv [/path/filename]”但是这并没有解决问题。 该文件的正确 Selinux 上下文设置是什么?
我使用的是 Rocky Linux 9、Apache 版本 2.4.57 和 PHP 8.3.9。
PHP 代码(Google 翻译代码使用 Composer):
putenv("GOOGLE_APPLICATION_CREDENTIALS=".'/path/credentials.json');
use Google\Cloud\Translate\V2\TranslateClient;
$translate = new TranslateClient();
使用“sudo setenforce 0”关闭 Selinux 会使上述代码起作用。 使用“sudo setenforce 1”重新打开 Selinux 会导致它失败并出现卷曲错误。
谢谢。
该解决方案不需要更改文件的权限或 Selinux 上下文。 这与 Selinux 阻止 Curl 的使用有关。 所以这就是修复:
// 检查当前 Selinux 配置设置:
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> off
由于不允许网络连接,请更改它并确保启用 Selinux:
$ sudo setsebool -P httpd_can_network_connect on
$ sudo setenforce 1
Google Translate API 现在可以通过 Curl 成功通信。