【问题标题】:How to override default permissions for files stored by Apache/PHP in /tmp?如何覆盖 Apache/PHP 在 /tmp 中存储的文件的默认权限?
【发布时间】:2010-02-18 14:22:27
【问题描述】:

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

我确实考虑到了安全性,但我认为如果我允许 postgres 读取这些文件,或者放宽这些文件的权限,世界不会崩溃。

如何控制创建这些文件的权限?显然 PHP 会自己创建它们,例如在 POST 文件上传时,但我找不到任何配置开关。另外,我的 /tmp 具有权限 'drwxrwxrwt' (777) 并且归用户 'root' 组 'root' 所有。

我尝试使用 'php_value upload_tmp_dir' 更改上传目录,但似乎没有效果 - PHP 仍将临时文件存储在 /tmp 中。

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

【问题讨论】:

    标签: php security apache


    【解决方案1】:

    您可以尝试在 /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--

    【讨论】:

    • 你也可以从 PHP 中调用 umask()。
    • 至于 Apache envvars,好吧,我不想覆盖 apache 创建的所有文件的默认权限,仅适用于 PHP 在上传目录(通常是 /tmp)中创建的文件。附言umask() 不是线程安全的。
    • 好吧,从它的外观来看,你唯一的选择是:1) umask() 在 PHP 2) umask 在 envvars 3) chmod() 文件 4) move_uploaded_file() 我会说,在这些选择中,chmod 是最好的。您必须做一些会影响您的文件系统的事情,因为无法将目录设置为对其中的所有内容具有默认权限。
    • 谢谢。我猜 'umask' 会做到的。
    【解决方案2】:

    把你的脚本改成chmod()上传后的文件?

    【讨论】:

    • 是的,这是一个选项。但是我已经编辑了我的问题,我忘了说明出于性能和复杂性的原因,我正试图避免对脚本中的文件系统进行更改。
    猜你喜欢
    • 2015-10-15
    • 2018-10-11
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多