代码之家  ›  专栏  ›  技术社区  ›  Armen Michaeli

如何覆盖Apache/PHP在/tmp中存储的文件的默认权限?

  •  4
  • Armen Michaeli  · 技术社区  · 16 年前

    显然,我是在Linux上。PHP脚本似乎在“www数据”用户下运行。我还可以看到上传的文件最终位于默认的/tmp目录中,每个文件前面都有一个名为“php”。我想都是标准的。所有这些文件的权限都是-rw------即600,用户“www-data”,组“www-data”。问题是,我有一个PostgresQL数据库服务器在用户“postgres”下运行,它需要能够读取这些文件,因为它将这些文件的内容插入到数据库中。显然,目前它不能。当然,作为一项规则,数据库查询和函数在任何用户连接到数据库的情况下运行(我也将其连接为“www-data”),但这里我们讨论的是服务器端函数,它们必须作为“postgres”调用。无论好坏,这都是PostgresQL的限制。

    我确实考虑了安全性,但我认为如果允许PoxGRE读取这些文件,或者放松这些文件的权限,世界不会消失。

    如何控制创建这些文件的权限?显然,PHP是自己创建的,例如在上传文件后,但我找不到任何配置开关。此外,my/tmp拥有“DRWXRWT”(777)权限,由用户“root”和组“root”拥有。

    我试图用'php_value upload_tmp_dir'更改上载目录,但似乎没有效果-php仍然在/tmp中存储临时文件。

    我不想与“move_uploaded_file”或“chmod”一起使用,因为它们会写入文件系统,我希望避免这种情况,而不是数据库服务器插入记录。

    2 回复  |  直到 16 年前
        1
  •  6
  •   Tarka user370305    16 年前

    您可以尝试在/etc/apache2/envvars中更改Apache的umask设置

    我还没有尝试过这一点,但将其添加到我的envvars文件中后,它将如下所示:

    # envvars - default environment variables for apache2ctl
    
    # Since there is no sane way to get the parsed apache2 config in scripts, some
    # settings are defined via environment variables and then used in apache2ctl,
    # /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
    export APACHE_RUN_USER=www-data
    export APACHE_RUN_GROUP=www-data
    export APACHE_PID_FILE=/var/run/apache2.pid
    
    ## The locale used by some modules like mod_dav
    export LANG=C
    ## Uncomment the following line to use the system default locale instead:
    #. /etc/default/locale
    
    export LANG
    
    umask 022
    

    据我所知,这将使Apache创建具有644.rw-r--r权限的文件--

        2
  •  1
  •   grawity_u1686    16 年前

    将脚本更改为 chmod()