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

标签 php security apache

显然,我在 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/

相关文章:

php - CentOS 中更新的 PHP 7 环境的 VirtualMin 安装错误

security - 服务器如何在多人游戏中验证客户端?

linux - Github post hook 到 DEVELOPMENT VM

apache - mod_rewrite 多个问号

java - 由于什么原因从 Apache httpClient 中删除了预身份验证?

debugging - Vim : Debug Commandline scripts 的 PHP 调试器

php - 在 Yii2 中以多态方式从数据库中查找模型

php - 从 php 中的 CSV 文件中删除空白行

Java - 安全 session 管理的最佳实践

java - 我怎样才能保护自己免受 zipper 炸弹的伤害?