所以,基本上问题就在标题和更详细的场景中:
我有一个用 PHP 编写的站点后端(在 linux 服务器 - centos 6 上),实际上我只有 2 个可以访问它的用户。他们需要能够通过某种形式上传图像。所以,我制作了简单的上传脚本,但无论如何(或者我不知道:/),上传只适用于设置为 777 的文件夹权限,所以我的问题是这样可以,还是我应该实现一些更好的'在这种情况下的常见做法?
所以,基本上问题就在标题和更详细的场景中:
我有一个用 PHP 编写的站点后端(在 linux 服务器 - centos 6 上),实际上我只有 2 个可以访问它的用户。他们需要能够通过某种形式上传图像。所以,我制作了简单的上传脚本,但无论如何(或者我不知道:/),上传只适用于设置为 777 的文件夹权限,所以我的问题是这样可以,还是我应该实现一些更好的'在这种情况下的常见做法?
您不需要 777 的目录权限。您需要确定该目录可由 Web 服务器用户写入,这意味着使其归 Web 服务器用户所有或由其组设置为的另一个用户所有Web 服务器用户和组可写权限。
因此,例如,如果您的 Web 服务器用户是www-data
(其他常见的可能性包括apache, httpd, www
):
# Set ownership to the web server user
chown www-data uploads_dir
# and make it writable by the web server user
# could also be 755 (readable by others)
chmod 700 uploads_dir
或者,如果它必须由您的帐户用户拥有(例如在共享主机上),请将组设置为 Web 服务器用户:
chown youruser:www-data uploads_dir
# and make it group-writable:
chmod 775 uploads_dir
底线是,将 777(全局可写)权限分配给目录通常不是一个好主意。此外,uploads_dir
理想情况下,应该将其放置在 Web 服务器的文档根目录之外,因此它不可用 vit HTTP 请求。
一个解决方案是使用 FastCgi。
这使得新文件和目录归同一个用户和组所有。
FastCgi 有性能损失,但您会获得一些额外的安全性,因为它限制了 php。如果您要托管具有多个用户的多个网站,这可能是一个好主意。
您还可以使用 suphp 之类的东西以用户身份运行 php 脚本,同时保留使文件夹不能被任何其他用户或组写入的能力。
不过,您需要对您的网络服务器进行管理访问。