起因
服务器上有个文件需要通过PHP
程序来删除,但是生成文件的程序并不是和PHP
是同一个权限用户,也不在同一个组里。写好PHP
代码后,直接测试,满怀期待的得到一个权限报错,但没有想到的是文件被正常删除了,并没有报错。
遂直接上服务器上用PHP
的用户身份尝试确实能正常删除。通过ll
命令查看确认不是PHP
所在的用户权限。
如上图,我们PHP
是www-data
用户组,为什么可以删除root
下的文件呢?
发现
我们注意到ll
命令显示的权限部分尾部多了个+
号,问题应该就是这里了。
通过一番查询得知这是开启了Linux
的ACL
权限控制,可通过getfacl
命令取得某个文件/目录的 ACL
配置项目。ACL权限详细说明
[root@www ~]# getfacl acl_test1
# file: acl_test1 <==说明档名而已!
# owner: root <==说明此文件的拥有者,亦即 ll 看到的第三使用者字段
# group: root <==此文件的所属群组,亦即 ll 看到的第四群组字段
user::rwx <==使用者列表栏是空的,代表文件拥有者的权限
user:vbird1:r-x <==针对 vbird1 的权限配置为 rx ,与拥有者并不同!
group::r-- <==针对文件群组的权限配置仅有 r
mask::r-x <==此文件默认的有效权限 (mask)
other::r-- <==其他人拥有的权限啰!
通过命令我们可以看到www-data
是拥有文件的读写权限的,一切都明了了。