amn*_*amn 4 php apache security
显然,我在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
Run Code Online (Sandbox Code Playgroud)
据我所知,这将使Apache创建具有644权限的文件.rw-r - r--