【问题标题】:PHP move_upload_file needs permission rwx to store filePHP move_upload_file 需要权限 rwx 来存储文件
【发布时间】:2015-08-22 18:10:27
【问题描述】:

我正在使用以下代码上传文件并将其移动到文件夹“film_images”:

$filepath = '../images/film_images/';
echo '<br />Trying to store file at ' . $filepath;
if (!move_uploaded_file(
    $_FILES['teaserimage']['tmp_name'],
    sprintf($filepath . '%s.%s',
    'test',
    $ext))) {
        throw new RuntimeException('Failed to move uploaded file.');
}

但是,这里有很多人,我总是有一个

无法打开流:权限被拒绝

PHP 中的异常。然后我进入服务器,使用setfacl 命令,我将权限rw- 授予用户www-data,即运行此PHP 脚本的用户。使用rw- 我仍然遇到异常。只有当我将权限切换到rwx 时,即当我让www-data 完全控制这个文件夹时,它才起作用。现在我想知道两件事:

  1. 为什么需要授予用户执行权限才能写入文件?
  2. 有没有办法在不授予用户执行权限的情况下写入文件?我担心有人会上传代码,隐藏在图像文件中,然后在我的服务器上执行。

【问题讨论】:

    标签: php unix permissions


    【解决方案1】:

    如果创建新文件,你需要设置文件夹的默认权限,首先chmod它:chmod g+s images/film_images //set permission what you need

    其次,您需要在创建文件/文件夹时设置默认权限:

    setfacl -R -d -m group:www-data:rwx /path/to/your/dir //set permission what you need
    

    【讨论】:

    • 我按照你说的做了,现在我有 default:user:www-data:rw- 条目而不是条目 user:www-data:rwx。使用此设置,我再次收到“权限被拒绝”错误。知道出了什么问题吗?它似乎只适用于入口用户:www-data:rwx。
    【解决方案2】:

    好吧,我想我明白了。感谢 Paulius S. 和他的回答,这让我走上了正轨。

    该文件夹归我所有。首先,按照this post的答案,我使用

    chmod g+rwxs dirname
    

    确保在目录中创建的文件归我所属的组所有。特别是,www-data 不属于该组。然后使用

    setfacl -m u:www-data:rwx dirname
    

    我将目录的完全访问权限授予用户 www-data。现在www-data可以上传a了,但是这个文件自动属于上面设置的组(www-data不属于),因此www-data没有执行权,虽然他一般可以在文件夹中执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 2016-10-16
      • 2020-11-03
      • 2017-11-20
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多