PHP/Linux 文件权限

PHP/Linux 文件权限

我可以问一个关于文件权限的问题吗?我设置了运行 Apache 的 Ubuntu 服务器。我有一个简单的 php 上传表单,能够按如下方式将文件上传到 /var/www/site/uploads。

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 1736
drwxrwxrwx 2 www-data www-data    4096 Oct 18 02:53 ./
drwxrwxrwx 3 sandbox  sandbox     4096 Oct 18 00:42 ../
-rw-r--r-- 1 www-data www-data  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 www-data www-data  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 www-data www-data 1451489 Oct 18 02:53  
 6453_3d_landscape_hd_wallpapers_green.jpg

有没有办法上传文件,它们显示为

-rw-r--r-- 1 sandbox sandbox  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 sandbox sandbox  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox sandbox 1451489 Oct 18 02:53     
 6453_3d_landscape_hd_wallpapers_green.jpg

这样我就可以直接将它们提供给正在等待/正在运行的 shell 脚本。现在正在等待的脚本(移动、校验和、重命名、调整大小等)无法对具有 www-data 属性的已上传文件执行任何操作。如果我只是以本地帐户的身份执行操作,例如

sandbox@sandbox-virtual-machine:/var/www/site/uploads$touch testfile

然后脚本就可以按我想要的方式运行了。任何建议我都会很感激,提前谢谢大家。

感谢大家给予我帮助,让我能够进步。

现在我快要解决了,并附加输出

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 388
drwxrwxrwx 2 www-data www-data   4096 Oct 18 04:22 ./
drwxrwxrwx 3 sandbox  sandbox    4096 Oct 18 04:17 ../
-rw-r--r-- 1 sandbox  sandbox  166947 Oct 18 04:21 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox  sandbox  219808 Oct 18 04:20 adafruit_pi.png
-rw-rw-r-- 1 sandbox  sandbox       0 Oct 18 04:22 test

我如何设置上传文件(如“test”)的权限,但中间组有差异。例如 adafruit_pi.png Vs test。请问我应该将哪条语句插入 php 代码?

答案1

PHP 在 apache 下作为 webapp 运行,这就是www-data您看到的用户。

上传后,您可以使用以下命令更改文件的所有者和组:

exec( 'chgrp sandbox 3*.jpg' );
exec( 'chown sandbox 3*.jpg' );

请注意,更改权限后,Web 服务器将无法写入文件,也无法删除或移动它们。

答案2

尝试将用户 www-data 添加到沙盒组

答案3

尝试更改 apache 服务的用户和组:在 apache 配置文件中搜索(我认为在 ubuntu 中位于 /etc/apache2/apache2.ini)并搜索以下行:

User www-data
Group www-data

并更改www-datasandbox

请注意,sandbox用户应该具有对 webroot 文件夹的读/写的权限。

希望能帮助到你。

注意:这应该为了测试目的而实现,不建议用于生产环境。

相关内容