0

我在适用于 AWS 的 Red Hat Enterprise Linux (RHEL) 上遇到了 PHP 和 SELinux 的问题。当我使用 _FILES 数组从 POST 获取文件 (jpg)时,当 move_uploaded_file 将文件移动到标准目录中的上传目录时,它使 SELinux 类型成为必要user_tmp_t的类型。因为从不更改文件上的 SELinux 类型,所以 jpg 文件被禁止使用。我该如何解决这个问题?httpd_sys_content_1var/www/html/move_uploaded_file

move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir)是我正在使用的。

我尝试更改 php.ini sys_upload_dir 和 upload_tmp_dir 但问题仍然存在。我也尝试创建一个新文件夹来存储 tmp 文件并使用sudo semanage fcontext -a -t httpd_sys_content_t "/phptmp(/.*)?"但仍然无法正常工作。

semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'并且restorecon -R -v /var/www/html/确实解决了现有文件的问题,但它在未来不起作用,因为 PHPuser_tmp_t每次都会导致它。

我想使用 SELinux,但这很令人沮丧,因为我真的不知道如何在 PHP 上更改 SELinux 属性。

我知道这是一个 SELinux 问题,因为如果我这样做setenforce 0可以“解决”问题。

4

1 回答 1

0

我最终通过将两个 php.ini 目录更改为我在 root 上创建的另一个 tmp 目录并使用semanage fcontext -a -t httpd_sys_content_t '/phptmp(/.*)?'以及restorecon -R -v /phptmp/确保在之后重新启动实例restorecon来“解决它”,否则它将无法工作。仍然不确定如何在 PHP 编程方面做到这一点,但我怀疑你可以用它做很多事情。

于 2017-07-05T11:51:12.813 回答