在php中创建,移动和删除文件而无需将目录和文件权限设置为777?

时间:2012-09-16 20:36:01

标签: php apache security permissions chmod

正如标题所示,我需要能够从php创建,移动和删除文件和文件夹。

如果我将所有目录和文件CHMOD到777,一切都很好,但如果我做755那么脚本会因为权限错误而死亡。

根据我的阅读,使用777权限是不安全的,不应该这样做。我有一个VPS,但有多个用户,因为我托管了许多网站(其中一些是其他人可以控制的),无论如何,我想做任何“最佳实践”。

所以,基本上,我想知道的是我应该如何呢?我是php和“webmastering”的新手,我不知道该怎么做。

有人能指出我正确的方向吗?

最后一点:除了能够移动和删除从php创建的文件外,脚本还需要移动和删除通过FTP从Windows机器上传的文件(我已经注意到默认情况下,当我上传文件时,CHMOD是755)。

编辑:我可能提到我运行phpinfo()并在“PHP Credits”部分找到以下内容可能与我相关:

User/Group      nobody(99)/99 

5 个答案:

答案 0 :(得分:2)

为了能够操作没有0777权限的文件和目录,这些文件和目录需要由PHP脚本运行的同一用户拥有。

答案 1 :(得分:2)

权限设置为所有者可以执行的操作,所有者的用户组可以执行的操作(所有者在同一用户组中的对等方)以及其他任何人都可以执行的操作。这就是3个数字的含义:753对于所有者来说是“7”,对于组来说是“5”,对于其他人来说是“3”。 “7”是完全访问(读,写,执行)。读取并执行“5”。您需要写入权限才能删除。

你应该真正阅读linux file permissions,看看它们是如何运作的。

我建议您使用775或770.最后一位是系统上的任何人或浏览您网站的任何shmoe所能做到的,所以您希望它尽可能低。

就您的ftp脚本和未来的其他用户而言,只需确保它们与您的apache用户位于同一组中。或者,为您想要访问的帐户设置一个组,并将其添加到其中。

答案 2 :(得分:1)

您无需将内容更改为777,即为所有者,组和来宾提供所有权限(读取,写入,执行)。你可以将它设置为755甚至700,只要所有者是运行PHP进程的任何东西。通常这将是Apache用户,因为PHP脚本在Apache进程下运行。

您不需要提供执行权限,但是您需要对目录执行execute,以便进程可以执行更改目录(cd)等操作。

答案 3 :(得分:1)

Nate,这涉及基于UID和GID的访问控制的基本101。我假设您的“多次使用”每个都有自己的UID用于FTP(和SSH?)访问。

通常,Web服务器(Apache)提供的文件必须由Apache子进程读取,这些进程将在 www-data (或等效)中运行,因此必须是o:r它们路径上的目录必须是o:e。

所以你大致有两个选择:(i)使用suEXEC / suPHP / FastCGI模板在拥有目录的UID中启动PHP脚本,以及(ii)在mod_php5下运行你的脚本并创建你需要脚本的任何目录写入权限由 www-data 拥有。

第二种方法在机器资源方面效率最高,但非常不安全,因为它实际上为用户提供了对用户B资源的完全R / W访问等等。

没有办法摆弄这个圆圈。如果您无法保证所有用户之间的共享信任,那么您必须阅读并实施基于(i)选项的解决方案。

答案 4 :(得分:0)

通常文件夹应该有755,文件应该有644权限设置。 我在PrestShop项目上工作时遇到了这个问题。

以下PHP脚本解决了我的问题。

<?php

exec ("find /path/to/folder -type d -exec chmod 0755 {} +");
exec ("find /path/to/folder -type f -exec chmod 0644 {} +");

?>