抓住这一点,我的头似乎很基础。通过PHP/Apache编写的文件不尊重目录setgid位
我有一个基于PHP的内容管理系统为我们的网站编写的承包商。其中一项功能是能够上传要在网站各个位置显示的图像(如产品库)。所有这些上传的图像都存储在一个名为“附件”的特定目录中。
drwxrwsr-X 4 WWW ftpusers中4096 10月10日14:47附件
正如你可以看到我已经得到了setgid位上DIR设置,以便将写入任何文件都会有一群用户(如FTP用户)谁需要访问这些文件将能够修改/覆盖它们。我已经为Apache设置了umask,以便将文件写入群组可写。
当我尝试这与创建在该目录中的新文件系统中的任何用户,它正确地继承了集团母公司。当通过在Apache中运行的PHP创建新文件时,它始终拥有apache.apache所有权。 Apache似乎忽略了setgid位,我认为它不能完成,因为这是由文件系统完成的。下面是一个文件I上传:
-rw-RW-R-- 1阿帕奇阿帕奇30536 10月10日14时43分209
我无法测试作为apache用户直接,因为它不具有登录shell指定(出于明显的安全原因)。
我可以通过添加ftpusers中组到Apache组获得相同的权限功能,但这似乎从安全角度来看并不明智。
我确实发现了一件似乎可能与之相关的东西 - 我已经验证的php安全模式已关闭/etc/php.ini,虽然我不积极,但我发现了php.ini文件Apache中的mod_php正在使用。 php脚本使用move_uploaded_file();据我所知,没有什么花哨的权限是在PHP代码中完成的。
我最好的猜测是,这是出于安全的故意限制,但我无法找到任何东西,似乎表明,是这种情况。
使用Apache 2.2.17和php 5.2.16运行CentOS 5.6。
任何人都有线索?
之前问过那个问题,建议是使用move_uploaded_file()手动复制文件。请参阅http://stackoverflow.com/questions/6232759/phps-move-uploaded-file-does-not-respect-setgid –