gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:16:52 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

您可以尝试在/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 - 如何覆盖 Apache/PHP 存储在/tmp 中的文件的默认权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com