文件上传权限突然改变

文件上传权限突然改变

在我客户的定制 CMS 运行良好两年多之后,我接到一个电话,说他们上传的图片、pdf 和文档没有出现在他们的网站上。查看后我发现文件已上传到服务器,但无法读取。它们的权限是 0600,而不是 0644。我可以在服务器上看到所有之前上传的文件,权限值为 0644。另一个值得注意的事情是所有者/组值已从 258809/1015 更改为 258809/0。

从我的角度来看,我认为这是服务器配置的变化,但主机商表示这与他们无关,也没有更改任何设置。我还可以说,两年多来我没有对代码进行任何更改。

我已经做了一些测试,可以使用 chmod 函数更改权限,但我不想打开代码并浏览他们可以上传的每种类型的文件并更改代码。

我想知道的是,是否可以以某种方式更改配置以解决此问题?服务器的详细信息如下:

  • PHP 版本 4.4.1

  • Apache/1.3.33(Unix)

    任何帮助表示感谢,谢谢,Dafydd

答案1

这里有两个问题。首先,Apache 服务器现在在根组 (0) 中运行,而它之前在 1015 组中运行,因此显然某物已发生改变。Apache 具有配置选项来指定以哪个用户和组运行,而“组”选项已发生改变或被删除。

其次,关于权限,他们可能没有“改变”任何东西……他们只是从来没有设置过特定的 umask。Apache 使用启动它的用户的 umask,所以当他们第一次启动它时,umask 可能是 0022(可能是 0033)。当他们重新启动它以更改组设置时,他们的 umask 可能是 0077(或 0066)。同样,PHP 使用 Apache 的 umask。

解释 umask 需要一点工作量:基本上,umask 会从文件模式中“取消设置”权限位。大多数程序都尝试以 rw-rw-rw- 模式创建文件,以 rwxrwxrwx 模式创建目录。如果 umask 为 0022 (----w--w-),则这些位将被删除,最终文件为 rw-r--r-- ,目录为 rwxr-xr-x 。如果 umask 为 0077 (---rwxrwx),则文件为 rw------- ,目录为 rwx------ 。在二进制数学中,文件的最终模式是(mode & !umask)(仅限于正常权限位,而不是 umask 不会影响的 suid/sgid/sticky)。

除了让主机关闭并以所需的 umask 重新启动 Web 服务器之外,您还可以自己修改所有内容或调用umask(0022)在您的中央配置文件中(请注意那里的警告建议您在多线程服务器上使用 chmod())。

相关内容