利用文件系統的inode和block來分析文件(目錄)的權限問題。
- 為什么讀取一個文件還要看該文件路徑所有目錄的權限?
- 為什么目錄的w權限具有刪除文件的能力,而文件w權限不行。
inode:記錄文件的屬性,一個文件占用一個inode,同時記錄了文件數據所在的block號碼。Ext3文件系統inode大小為128B,Ext4文件系統inode大小為256B。
block:記錄了文件的內容,若文件太大會占用多個bolck塊。一般大小為1k、2k、4k。
inode和block在文件系統里,均用號碼標示。
如下:
hang@hang:/home$ ll -i 總用量 20
#inode號 #文件大小,這里是一個4k的block塊的大小
24641537 drwxr-xr-x 5 root root 4096 11月 27 19:19 ./ 2 drwxr-xr-x 24 root root 4096 11月 26 19:55 ../ 24641538 drwxr-xr-x 23 hang hang 4096 11月 28 13:47 hang/ 24642065 drwxr-xr-x 2 zncu zncu 4096 11月 25 20:47 zncu/ 24647652 drwxrws--- 2 root znha 4096 11月 27 20:54 znha/
其他更多的文件系統相關不在介紹,總之inode記錄了文件/目錄的權限和block號碼,block記錄了文件的實際內容、目錄下的文件名以及這些文件名的inode號。
例子:想要讀取/etc/passwd,經過了哪些流程。
root@hang:/# ll -di / /etc /etc/passwd 2 drwxr-xr-x 24 root root 4096 11月 26 19:55 // 17301505 drwxr-xr-x 131 root root 12288 11月 27 13:18 /etc/ 17304397 -rw-r--r-- 1 root root 2350 11月 26 20:08 /etc/passwd
1./的inode: 通過掛載點信息,找到/目錄的inode號(2),且該inode具有rwx權限,我們可以讀取inode號(2)所記錄的block塊內容。
2./的block: 在/目錄的block內容里找etc/目錄的inode號(17301505)
3./etc的inode: /etc的inode(17301505)具有rwx權限,我們可以讀取/etc的block塊的具體內容。
4./etc的block: 在block塊里找到passwd文件的inode(17304397)。
5.passwd的inode: 根據passwd文件的inode(17304397)得知具有讀取權限。
6.passwd的block: 根據inode(173044397)所記錄的block塊讀取passwd的具體內容。
可以看到,從根目錄一步一步到passwd需要驗證每一個目錄的權限,如果其中一個目錄不具有相應權限,那么這個操作就會失敗,如果無法進入/etc目錄,何談讀取passwd文件。
也可以得知為什么文件的刪除等操作是被目錄的w權限控制的,因為w權限可以具有修改block塊的能力,目錄的block記錄了文件名和文件inode,刪除文件就是block塊存儲的文件名和inode,而文件的block記錄的是文件具體內容,所以w權限是對文件內容的修改,而不具備刪除文件等權限。
http://www.cnblogs.com/yuhanghzsd/p/6109513.html