0

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

如果我将所有目录和文件 CHMOD 到 777,一切正常,但如果我执行 755,那么脚本会因权限错误而死。

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

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

谁能指出我正确的方向?

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

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

User/Group      nobody(99)/99 
4

5 回答 5

2

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

于 2012-09-16T20:54:30.367 回答
2

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

您应该真正阅读linux 文件权限以了解它们是如何工作的。

我建议您使用 775 或 770。最后一位数字是系统上的任何人或浏览您网站的任何 shmoe 都可以执行的操作,因此您希望它尽可能低。

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

于 2012-09-16T20:55:55.227 回答
1

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

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

于 2012-09-16T20:56:17.157 回答
1

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

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

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

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

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

于 2012-09-16T20:59:56.077 回答
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 {} +");

?>
于 2017-04-24T12:09:14.207 回答