【问题标题】:How to make directory outside of current directory?如何在当前目录之外创建目录?
【发布时间】:2017-03-05 13:32:30
【问题描述】:

我正在尝试通过将文件上传到public_html 之外的目录来创建一种安全的方式来处理文件上传。

我正在测试我的脚本,当我执行 sudo php receive_files.php 时我的脚本可以工作,但是当我在没有 sudo 的情况下运行 receive_files.php 时,我得到了 failed to open stream: Permission denied.

现在回到var/www/html/mysite/public_html的所有权限都设置为755。我尝试将它们全部更改为775,但命令仍然不起作用 没有sudo。而且我很确定这不安全。我该如何解决这个问题?

我的代码:

$encoded_file = $_POST['file'];
$user_id = $_POST['user_id'];
$decoded_file = base64_decode($encoded_file);

$new_directory = "../../../../../../user_uploads/$user_id/";

if(!file_exists($new_directory)){
    mkdir($new_directory, 0775, true);
    file_put_contents($new_directory . $decoded_file);
}

【问题讨论】:

  • 权限的工作方式如下:xyz - x = 所有者,y = 组,z = 全部。如果您将权限更改为 775 并在命令行中执行文件,则您正在运行该命令的用户需要拥有该路径,或者位于拥有该路径的组中。请添加ls -l user_uploadswhoami && groups 的输出。是否有权限问题应该说清楚
  • 所有var/www/及其子目录都归root所有,属于root组。那么你是说我应该将所有者和组更改为 www-data 吗?
  • Web 服务器(即 www-data)需要访问文件(读/写取决于文件),如果您要以其他用户身份运行命令,则需要访问文件www-data(或 www-data 组中的用户)。
  • 因此,为了从 Web 界面测试和运行它,我可以将 www-data 和我自己添加到一个组中,比如说 scriptgroup。然后我可以模仿用户从 Web 界面上传时的 php 警告/通知?
  • 只需将自己添加到www-group,将web dir/files添加到www-group并根据需要在组权限上设置权限,即chmod -R x7z user_uploads

标签: php linux ubuntu file-upload permissions


【解决方案1】:

当您不是某物的所有者或您尝试更改权限时,需要 Sudo。因此,如果您希望 php 脚本能够访问上层目录。更改上层目录的组或用户所有者与 php 执行器相同,在大多数情况下它的 www-data

您可以使用

检查 php 脚本的所有者

ls -al

然后使用更改所有者

chown -hR www-data:www-data directorypath

更多细节查看chown命令手册

这很可能会解决您的问题

附加信息

指定绝对路径而不是相对路径解决了这个问题

【讨论】:

  • 我尝试将所有者和组更改为 www-data:www-data for /var/ 和子目录到 receive.php (所有这些目录:var/www/html/mysite/public_html /receive.php) 但我得到了同样的错误
  • 你的脚本是否在 public_html 下工作,我的意思是当你直接在 public_html 中创建时
  • 是的。我以前使用 public_html 下编写的文件进行了所有工作,我所做的只是将 ../../../../../../ 添加到 $new_directory 变量
  • 尝试使用完整路径而不是相对路径,例如 /var/html/somedir
  • 还可以在 php.net/manual/en/function.mkdir.php 上查看 cmets 关于 umask 的信息
猜你喜欢
  • 2013-01-12
  • 2016-07-29
  • 2021-09-30
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2020-09-17
相关资源
最近更新 更多