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

在php中创建、移动和删除文件而不将目录和文件权限设置为777?,php,apache,security,permissions,chmod,Php,Apache,Security,Permissions,Chmod,正如标题所示,我需要能够从php中创建、移动和删除文件和文件夹 如果我将所有目录和文件CHMOD到777,一切都会很好,但是如果我使用755,那么脚本就会因权限错误而死亡 据我所知,使用777权限是不安全的,不应该这样做。我有一个VPS,但当我主持许多网站(其中一些是其他人控制的)时,有多个用户,不管怎样,我想做任何“最佳实践” 所以,基本上,我想知道的是我应该怎么做?我不熟悉php和“网站管理员”,不知道该怎么办 谁能给我指一下正确的方向吗 最后一点注意:除了能够移动和删除从php创建的文件外

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

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

据我所知,使用777权限是不安全的,不应该这样做。我有一个VPS,但当我主持许多网站(其中一些是其他人控制的)时,有多个用户,不管怎样,我想做任何“最佳实践”

所以,基本上,我想知道的是我应该怎么做?我不熟悉php和“网站管理员”,不知道该怎么办

谁能给我指一下正确的方向吗

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

编辑:我可能需要指出的是,我运行了phpinfo()并在“PHP学分”部分找到了以下内容:


为了能够在没有0777权限的情况下操作文件和目录,这些文件和目录需要与您的PHP脚本运行的用户相同。

为了能够在没有0777权限的情况下操作文件和目录,这些文件和目录需要与您的PHP脚本运行时的用户相同。

为所有者可以做什么、所有者的用户组可以做什么(同一用户组中所有者的对等方)以及其他人可以做什么设置权限。这就是3个数字的含义:753代表所有者为“7”,代表团体为“5”,代表其他人为“3”。“7”表示完全访问(读、写、执行)。读取并执行“5”。您需要具有写入权限才能删除

你应该仔细阅读,看看它们是如何工作的

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


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

权限设置为所有者可以做什么,所有者的用户组可以做什么(同一用户组中所有者的对等方),以及其他人可以做什么。这就是3个数字的含义:753代表所有者为“7”,代表团体为“5”,代表其他人为“3”。“7”表示完全访问(读、写、执行)。读取并执行“5”。您需要具有写入权限才能删除

你应该仔细阅读,看看它们是如何工作的

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


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

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


您不需要提供execute priv,但需要提供目录上的execute,以便进程可以执行更改目录(cd)之类的操作。

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


您不需要提供execute priv,但需要提供目录上的execute,以便进程可以执行更改目录(cd)之类的操作。

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

通常,Web服务器(Apache)提供的文件必须由Apache子进程读取并可访问,该子进程将在www data(或等效)中运行,因此必须是o:r。同样,指向这些文件的路径上的任何目录都必须是o:e

因此,您大致有两种选择:(i)使用suEXEC/suPHP/FastCGI模板在所属目录的UID中启动PHP脚本,以及(ii)在mod_php5下运行脚本,并在www data拥有的需要脚本写访问权限的任何目录中创建脚本

就机器资源而言,第二种方法是最有效的,但它非常不安全,因为它实际上让用户完全R/W访问userB的资源等等


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

这与基于UID和GID的基本访问控制有关。我假设您的“多次使用”都有自己的用于FTP(和SSH?)访问的UID

通常,Web服务器(Apache)提供的文件必须由Apache子进程读取并可访问,该子进程将在www data(或等效)中运行,因此必须是o:r。同样,指向这些文件的路径上的任何目录都必须是o:e

因此,您大致有两种选择:(i)使用suEXEC/suPHP/FastCGI模板在所属目录的UID中启动PHP脚本,以及(ii)在mod_php5下运行脚本,并在www data拥有的需要脚本写访问权限的任何目录中创建脚本

这是第二个美联社
User/Group      nobody(99)/99 
<?php

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

?>