显然,我在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’,因为它们写入文件系统,我想避免这种情况,除了数据库服务器插入记录.
解决方法:
您可以尝试在/ 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–