【发布时间】:2017-12-08 22:49:51
【问题描述】:
我在适用于 AWS 的 Red Hat Enterprise Linux (RHEL) 上遇到 PHP 和 SELinux 的问题。当我使用 _FILES 数组从 POST 获取文件 (jpg) 时,它使 SELinux 类型为 user_tmp_t 而不是 httpd_sys_content_1,这在 move_uploaded_file 将文件移动到标准 var/www/html/ 中的上传目录时是必需的目录。因为move_uploaded_file 从不更改文件上的 SELinux 类型,所以 jpg 文件被禁止使用。 我该如何解决这个问题?
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/ 确实解决了现有文件的问题,但它在未来不起作用,因为 PHP 导致它每次都是 user_tmp_t。
我想使用 SELinux,但这很令人沮丧,因为我真的不知道如何在 PHP 上更改 SELinux 属性。
我知道这是一个 SELinux 问题,因为如果我这样做 setenforce 0 它会“解决”问题。
【问题讨论】:
-
看来你不能在那里写。为您的目标文件夹额外尝试此操作
chcon -Rht httpd_sys_rw_content_t /var/www/html/ -
@A. Blub 不,文件到达目的地,但我无法访问它,因为类型不是 httpd。我收到“禁止”错误。它总是 user_tmp_t 因为它来自我假设的 tmp 文件夹。
-
请先尝试一下。您的文件夹未标记为写入,仅标记为 HTTP 内容
-
@A.Blub 不,就像我说的,
unconfined_u:object_r:user_tmp_t:s0 312d40fcc7d708cd489e83.jpg仍然在我运行我的 php 脚本时
标签: php selinux system-administration server-administration