日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux文件權(quán)限隱藏的細(xì)節(jié)深入分析( 二 )


◆實(shí)驗(yàn)3, 目錄文件: /test(rwx), 普通文件: /test/file(r--), 目錄文件: /test/dir(r-x), 普通文件: /test/dir/file(rw-), 當(dāng)前目錄:/test
$ mv file file2$ mv dir dir2$ lsdir2 file2很順利, 因?yàn)?test/file與/test/dir的父目錄/test的權(quán)限給的太寬松了,是rwx 。$ rm -f file2$ rm -rf dir2rm: cannot remove "dir2/file": permission denied$ ls -r.:dir2./dir2:file到這里, 我們已經(jīng)絲毫不奇怪普通文件/test/file2被刪除, 但具有同等地位的目錄文件/test/dir2卻安然無恙 。當(dāng)執(zhí)行rm -rf dir2時(shí), 由于存在普通文件/test/dir2/file, 系統(tǒng)便嘗試先刪除它, 也就相當(dāng)于修改目錄文件/test/dir2的內(nèi)容, 但它的權(quán)限是只讀, 不能進(jìn)行修改,也就相當(dāng)于不能刪除/test/dir2/file, 又由于/test/dir2與/test/dir2/file有依存關(guān)系, /test/dir2也就自然會(huì)被保留下來 。
回顧上一個(gè)操作(mv dir dir2),為什么目錄文件/test/dir卻可以被更名呢?由于更名操作并不涉及到自身的內(nèi)容被修改,修改的只是父目錄的內(nèi)容,而進(jìn)行刪除操作時(shí),父目錄的內(nèi)容固然要被修改,但也同時(shí)也要修改自身的內(nèi)容(因?yàn)橐獎(jiǎng)h除該目錄下的文件),這就不被允許了 。如果/test/dir2的權(quán)限是可寫, 或者目錄下沒有子文件, 那么它的下場(chǎng)就和/test/file2一樣, 被刪除 。
通過前面的幾個(gè)操作,可以看到,文件有這么幾個(gè)關(guān)鍵狀態(tài):被讀、被改寫、被改名、被刪除、被執(zhí)行 。然而系統(tǒng)只區(qū)分三種權(quán)限,即讀、寫、執(zhí)行(rwx) 。那么改名與刪除這兩個(gè)操作是否系統(tǒng)就置之不理了呢?不是的,系統(tǒng)將這兩個(gè)操作歸入被操作文件的上一級(jí)目錄來管理 。那么又是以何種方式來管理的呢?答案是目錄將其下的所有文件看作是它的內(nèi)容 。這樣,當(dāng)用戶更名或刪除某個(gè)文件時(shí),執(zhí)行的是對(duì)上一級(jí)目錄的寫操作,屬于rwx三種權(quán)限之一的w操作,并沒有逃出系統(tǒng)的管理范圍 。
我們的大腦總是活躍的, 能想象出各種各樣的事情, 能把許多簡(jiǎn)單的東西組合成很復(fù)雜東西, 上面幾個(gè)實(shí)驗(yàn)不正是這樣嗎, 象這樣的實(shí)驗(yàn)我們還可以設(shè)計(jì)出許多, 但做的越多, 腦子似乎越亂(我已經(jīng)有一點(diǎn)了), 你能記的住這么多嗎? ok, 我們也許能將它想的簡(jiǎn)單一些, 只需注意兩個(gè)方面, 一是要清楚目錄的內(nèi)容是什么;二是要明白文件權(quán)限中的w(write)的真正含義 。仔細(xì)想想, 不是嗎?
◆補(bǔ)充:
在實(shí)驗(yàn)1中, 如果用vim對(duì)file進(jìn)行編輯, 并且強(qiáng)制保存(w!), 是可以成功的 。這并不是說vim就可以繞開系統(tǒng)的安全機(jī)制,而是vim耍了一個(gè)小小的把戲,它是先刪除這個(gè)文件,而后又生成一個(gè)同名的新文件 。但有一個(gè)情況例外,就是當(dāng)這個(gè)文件有另外一個(gè)硬鏈接文件存在時(shí),vim會(huì)拒絕強(qiáng)制保存,仔細(xì)想想,當(dāng)進(jìn)行刪除操作后,文件還存在,并沒有被真正刪除,而這時(shí)再新建一個(gè)文件,雖然同名,但已經(jīng)不是原來的那個(gè)文件了!筆者曾對(duì)此事也頗為疑惑,為了求證,仔細(xì)閱讀了vim6.2的源代碼,才找到答案 。有興趣的讀者也可看一看,具體內(nèi)容在src/fileio.c中 。

推薦閱讀