【发布时间】: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_uploads和whoami && 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