起因
服務器上有個文件需要通過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
是擁有文件的讀寫權限的,一切都明瞭了。