【问题标题】:Uploading files with PHP on a linux machine在 Linux 机器上使用 PHP 上传文件
【发布时间】:2017-08-26 02:18:03
【问题描述】:

我正在尝试在无头 raspbian 机器上制作某种云应用程序。 测试在 windows8.1 上运行的 wamp-server 上进行。 PHP版本是5.6

代码在我的测试窗口上运行良好,但是在我的 linux 服务器上运行相同的代码时遇到了问题。我已将问题缩小到(背后的 linux 用户)我的 PHP 代码对它应该存储文件的文件夹没有写权限这一事实。

我可以想到两种方法来解决这个问题:要么给那个 php-user 权限,要么改变 php 代码背后的用户。如果可以根据脚本进行更改,最后一个将非常有趣。

所以,对于我的具体问题:

1) 我在哪里可以找到我的 PHP 代码正在使用的用户?

2) 我可以更改我的 PHP 代码使用的用户吗,最好是在每个项目的基础上?

编辑:

我的脚本以 root 身份运行,如 echo get_current_user(); 所示。我将所有文件的所有权更改为 root:webhosting,之前是 ftpuser:ftpgroup。但是,当将权限设置为 770 时,我被拒绝访问

EDIT2:

当使用 var_dump(posix_geteuid()); 而不是 get_current_user(); 时,我得到 UID 33,它与用户 www-data 匹配。

解决方案:

通过查看带有 var_dump(posix_geteuid(); 的 EUID,我能够验证与 get_current_user(); 不匹配的实际用户。使用sudo chown -R www-data:www-data <root of site> 更改目录和其中的所有文件我设法设置了正确的权限。

【问题讨论】:

  • 你知道你运行的是什么网络服务器吗?如果是这样,您可以看到谁在运行它。例如,我运行ps aux | grep httpd,它显示用户“apache”正在运行httpd。所以,我必须授予 apache 读取/写入文件夹的权限。
  • 1) 你可以试试de.php.net/get_current_user 2) 好吧,不行
  • 就像塞巴斯蒂安说的你可以使用echo get_current_user(); 来显示当前用户。您是否在初始 tmp 文件夹或目标文件夹中遇到权限问题?要改变你可以做chown user | chmod 755 /var/www/html/myuploaddir你也可能对owncloud项目感兴趣,它是一个开源的灯云项目

标签: php linux raspbian user-permissions


【解决方案1】:

我不确定具体是什么,但通常当我遇到类似问题时,我将所有权更改为 www-data:www-data,如果需要上传文件夹,我将文件夹权限更改为 0755,将内部文件权限更改为 0644 .

编辑

出于安全考虑,我更改了权限设置。

【讨论】:

  • 777 是个糟糕的建议,通常会使服务器面临安全漏洞。
  • @Goose 很好,有时 0755 也可以工作。
  • 文件上的可执行位通常会导致安全问题。文件上的 644 和文件夹上的 755 更加标准。 664 和 775 有时是必要的。
  • 我要补充一点,777 从来都不是必需的。此外,考虑到他正在上传文件,使用安全的文件权限更为重要。 security.stackexchange.com/questions/109674/…
  • @Goose 它解决了我的问题。他提到“如果有必要”,这对大多数人来说可能就足够了,而且很可能有一些用例。很遗憾您只能将一个答案标记为解决方案,因为您的答案也是有效的。
【解决方案2】:

您的 PHP/Apache 用户可能是 www-data。你可能想运行这样的东西。

sudo find path/to/project/ -exec chown www-data:root {} \;

文件权限也可能是个问题。如果是这样,运行类似的东西。

sudo find path/to/project/ -type d -exec chmod 775 {} \;
sudo find path/to/project/ -type f -exec chmod 664 {} \;

【讨论】:

  • 似乎也是一个有效的解决方案。但是我将其更改为 www-data:www-data 并将自己添加到该组。考虑到我使用的帐户是(几乎)与 root 相同级别的完整管理员帐户,这是修复它的好方法还是坏方法? +1 使用这样的查找突击队
  • 我建议不要将自己添加到 www-data,将人类系统用户与网络服务器系统用户分开通常是个好主意。很可能无关紧要,但是假设您被黑了,很高兴知道他们是黑了网络服务器还是只是黑了您的 ssh。是的,我个人更喜欢 find over -recursive flags。
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 2015-11-20
  • 2018-09-18
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
相关资源
最近更新 更多