我有一个网站所有网站共享相同的“图像”文件夹的networking。 我创build了/ home / _images / entities,并且从所有的网站链接了它,并且在Apache上打开/ images /在我得到的图像列表的任何网站上都可以查看。
问题是将PHP脚本的进程ID更改为文件所有者ID的suPHP ,所以当我加载site1.com时 ,所有脚本都以user1执行(并且使用这些脚本创build的文件/文件夹属于user1:user1)。 当我加载site2.com时 ,所有脚本都以user2身份执行(使用这些脚本创build的文件/文件夹属于user2:user2)。 所有这些用户不属于同一个组,我不想改变它,因为它是cPanel / WHM服务器,所以我恐怕如果我改变(初级?)组的所有用户,我会搞砸了。
因此,我需要设置它,以便所有新创build的文件夹和/ home / _images /实体(由root拥有)下的文件对每个人都具有读/写权限。
这是我使用的命令:
setfacl -Rdm o::rwx /home/_images/entities
要检查它:
root@server1 [~]# getfacl /home/_images/entities/ getfacl: Removing leading '/' from absolute path names # file: home/_images/entities/ # owner: root # group: root user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx
这看起来不错,但是当我尝试通过site1.com上传图像时,它看起来像这样:
root@server1 [/home/_images/entities]# ls -l total 24 drwxrwxrwx+ 5 root root 4096 Jan 14 06:25 ./ drwxrwxrwx 5 root root 4096 Jan 12 13:08 ../ drwxrwxr-x+ 3 user1 user1 4096 Jan 14 06:25 1/
并在文件夹“1”是图像(和拇指文件夹):
root@server1 [/home/_images/entities/1]# ls -l total 236 drwxrwxr-x+ 3 user1 user1 4096 Jan 14 06:25 ./ drwxrwxrwx+ 5 root root 4096 Jan 14 06:25 ../ -rw-rw-rw- 1 user1 user1 225569 Jan 14 06:25 689048f221ab7c556f4d482a9d92b2d6.jpg drwxrwxr-x+ 2 user1 user1 4096 Jan 14 06:25 thumbs/
我的问题:
1)为什么新创build的文件夹没有“写入”权限的其他人[不是用户和/或组]? 如果我从site1.com上传第一张图片,则无法从其他网站上传其他图片,而所有网站都可以显示这些图片。
2)权限列表的末尾是什么? (drwxrwxr-X +)
3)为什么新创build的文件只有“rw”权限的用户,组别和其他人,而不是执行权限? 我实际上并不需要设置执行标志,但从我的命令你可以看到我已经设置“o :: rwx”,所以它应该在那里(或不?
其实真正的问题是#1 – 其他用户不能写入这个文件夹,所以用户不能从其他网站上传图片,也没有其他网站可以创build(丢失)缩略图。
应用程序(在本例中为suPHP)可以覆盖默认值并显式设置他们想要的权限。 如果suPHP强制将“其他”的权限设置为除您想要的外的其他权限,则解决方法是为包含user1以及所有其他所需用户的其他组(包括user)添加ACL:
setfacl -Rdm g:users:rwx /home/_images/entities
那么suPHP可能会单独留下这个许可。 请注意,从安全的angular度来看,这样做也更好,因为您只向用户组授予写权限,而不是授予世界。
+表示存在ACL,所以其他权限除了列出的ugo设置外,还有效。 你必须运行getfacl才能看到它们。
我认为这与#1是一样的:因为suPHP明确地覆盖了执行权限。 应该适用与#1相同的解决scheme。