使用 PHP/Apache 上传文件夹的正确权限是啥?

Posted

技术标签:

【中文标题】使用 PHP/Apache 上传文件夹的正确权限是啥?【英文标题】:What are the proper permissions for an upload folder with PHP/Apache?使用 PHP/Apache 上传文件夹的正确权限是什么? 【发布时间】:2010-09-05 21:00:57 【问题描述】:

很抱歉这个基本问题 - 我是一名 .NET 开发人员,对 LAMP 设置没有太多经验。

我有一个允许上传到特定文件夹的 php 站点。有人告诉我,此文件夹需要由网络服务器用户拥有才能使上传过程正常工作,因此我创建了该文件夹,然后将权限设置为:

chown apache:apache -R uploads/
chmod 755 -R uploads/

现在唯一的问题是FTP用户根本无法修改上传的文件。

是否有权限设置允许我仍然上传文件,然后以网络服务器用户以外的用户身份修改它们?

【问题讨论】:

【参考方案1】:

您可以创建一个新组,其中 apache 用户和 FTP 用户作为成员,然后在上传文件夹 775 上设置权限。这应该使 apache 和 FTP 用户都能够写入文件夹中的文件,但是防止其他人修改它们。

【讨论】:

别忘了你可以通过chmod u+rwX,go+r theFolder 来避免钝角的魔法数字! 这可能不是他所说的,因为他提到上传文件的方式与网站用户上传文件的方式相同。你需要权限 777 上传文件夹只能包含 jpg、gif 等文件。当然不是,比如说,某人上传的 php 文件或 shell 脚本文件。有没有办法避免apache服务器执行上传文件夹中的php文件? @Toskan 以避免在您的上传文件夹中运行 php 文件,我通常这样做。创建一个 .htaccess 文件并将这一行放入其中: php_flag engine off 在这种情况下,攻击者可以通过自己上传来覆盖 .htaccess【参考方案2】:

如果你真的想这样做,我会接受 Ryan 的回答。

通常在 *nix 环境中,您总是希望尽可能少地放弃权限。

10 次中有 9 次,755 是理想的权限 - 因为唯一能够修改文件的用户将是网络服务器。如果您确实需要更改此设置,请与您的 ftp 用户在组中将其更改为 775。

由于您自己承认您是 php 新手,因此这里有一个有助于提高上传服务安全性的链接: move_uploaded_file

【讨论】:

【参考方案3】:

我会支持创建一个有权上传的 ftp 组的想法。但是,我认为没有必要给予 775 许可。 7 代表读、写、执行。通常您希望允许某些组进行读写,但根据具体情况,可能不需要执行。

【讨论】:

【参考方案4】:

我会补充一点,如果您使用的是 SELinux,您需要确保类型上下文是 tmp_t 您可以使用 chcon 实用程序来完成此操作

chcon -t tmp_t 上传

【讨论】:

【参考方案5】:

重要的是apache 用户和组应至少具有read 访问权限,在某些情况下应具有execute 访问权限。其余的您可以授予0 访问权限。

这是最安全的设置。

【讨论】:

【参考方案6】:

还要记住 CHOWNchgrp 您的网站文件夹。试试myusername# chown -R myusername:_www uploads

【讨论】:

【参考方案7】:

根据@Ryan Ahearn 的回答,以下是我在Ubuntu 16.04 创建一个用户front 的操作,该用户仅对nginx 的web 目录/var/www/html 具有权限。

步骤:

* 前置步骤: *服务器的基本准备, * 创建用户'dev' 这将是“/var/www/html”的所有者, * * 安装 nginx, * * * 创建用户'front' sudo useradd -d /home/front -s /bin/bash front 须藤密码前面 # 创建主文件夹,如果不存在, sudo mkdir /home/front # 设置新主文件夹的所有者, sudo chown -R front:front /home/front # 切换到用户, 苏前 # 复制 .​​bashrc,如果不存在, cp /etc/skel/.bashrc ~front/ cp /etc/skel/.profile ~front/ # 启用颜色, vi ~front/.bashrc # 取消注释以“force_color_prompt”开头的行, # 退出用户 出口 * * 添加到组“开发”, sudo usermod -a -G dev 前端 *更改网络目录的所有者, sudo chown -R dev:dev /var/www * 更改网络目录的权限, chmod 775 $(查找 /var/www/html -type d) chmod 664 $(查找 /var/www/html -type f) * * 重新登录为 'front' 使组生效, * * 测试 * * 好的 *

【讨论】:

以上是关于使用 PHP/Apache 上传文件夹的正确权限是啥?的主要内容,如果未能解决你的问题,请参考以下文章

上传 900MB(或更大)文件:PHP、Apache、本地网络

上传 900MB(或更大)文件:PHP、Apache、本地网络

php apache上传超过100兆视频时候,报错

php文件上传限制大小问题

php文件上传限制大小问题

Docker php apache权限被拒绝