【问题标题】:PHP _FILES array and SELinux - forbidden file accessPHP _FILES 数组和 SELinux - 禁止文件访问
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 2015-02-04
    • 2021-11-04
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多