我可以问一个关于文件权限的问题吗?我设置了运行 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-data
为sandbox
。
请注意,sandbox
用户应该具有对 webroot 文件夹的读/写的权限。
希望能帮助到你。
注意:这应该为了测试目的而实现,不建议用于生产环境。