Unix與Windows在檔案許可權控制上的差異分析

Unix作業系統在檔案許可權控制上,跟Windows作業系統上還是有比較大的差異。簡單的來說,Unix的檔案許可權控制要比Windows作業系統複雜的多。雖然其維護起來具有一定的難度,但是這也保證了Unix作業系統的檔控制要比Windows作業系統的檔控制安全的多。下面筆者就對兩個作業系統在檔案許可權控制上的差異做一些分析。如果有說得不對的地方,還請大家多多批評改正。

無論是微軟作業系統還是Unix作業系統,其許可權控制的基本模型就如下圖所示。不過他們在具體的實現上有很大的差異。

差異一:檔案執行許可權上的差異分析

假設現在有使用者A,其在Unix作業系統上建立了一個檔案text。通常情況下,這個使用者A就是檔案text的所有者。所有權這對檔具有完全控制的許可權,即具有讀、寫、執行的許可權。而在Windos作業系統下,則沒有控制的這麼嚴格。在Windows下其許可權只有讀、寫的控制,而沒有細化到執行的許可權。這就是兩個作業系統在檔案許可權控制上的一個重要差異。Unix在對檔專門進行了執行許可權的控制,這對於Unix作業系統的安全性具有很大的幫助。如現在有一個程式開發小組,其成員包括用戶A與用戶B。他們在開發一個磁片清理的程式。為了安全起見,這個指令檔案當然不能夠隨意執行。不然的話很可能會造成磁片檔意外刪除的。為此用戶A就可以控制,用戶B可以查看或者編輯這個指令檔,但是不能夠執行。要測試的話,必須有用戶A來進行。這就可以保障這個指令檔案不會被未經授權的用戶執行。但是在Windows系統下就沒有這方面的控制。

差異二:相同的組不同的用戶具有不同的許可權

在Unix系統中,即使相同組的使用者,預設情況下其對於檔案的許可權也是不同的。如現在一個組其有用戶A與用戶B。現在用戶A創建了一個test檔案。預設情況下使用者A與使用者B對這個檔案具有不同的許可權。如用戶A對這個檔案具有讀、寫、執行的許可權。但是用戶B對這個檔案則只有讀寫的許可權。但是在Windows系統下,則這方面不是這麼控制的。在預設情況下,Windows作業系統下同一個組的使用者往往具有相同的許可權。

在Unix系統中,預設情況下組具有檔的讀、寫許可權。文件所有者自有一組組許可權,它優先於用戶組的組許可權。當用戶放棄了檔案的所有權之後(如把檔的所有權轉移給了其他用戶),則其就會自動繼承用戶組的組許可權。如果現在這個組中的用戶A已經創建了一個檔案text。那麼後來加入到這個組中的用戶,也對這個檔案具有讀寫的許可權。不過要注意,沒有執行許可權。也就是說,通常情況下只有root帳戶與檔案的所有權者對檔案具有執行許可權。其他的用戶都不具有這個許可權。當然檔案的所有者人與root帳戶可以把這個檔案執行許可權賦予給其他人。這裡要注意,只有檔案的所有權人與root帳戶才可以更改檔案的許可權,其他用戶都不可以。這也是筆者下面要談到的兩個系統的第三個差異。

差異三:誰可以更改檔案的許可權

在Windows作業系統中,往往只要對這個檔案具有寫許可權的人就可以這個檔案的許可權。如用戶A創建了一個檔案。同時他允許用戶B對這個檔案具有完全控制許可權。那麼這個用戶B就可以修改用戶的許可權,如用戶B可以讓其他組的用戶也可以修改這個檔案。顯然這會給檔案帶來一定的安全隱患。

在Unix作業系統上,這個許可權控制就相對安全一點。因為通常情況下,只有檔案的所有權人與root帳戶才能夠修改檔案的許可權。如現在用戶A創建了一個text檔案。預設情況下使用者A具有這個檔案的讀寫執行的全部許可權。而同一個組的用戶具有這個檔案的讀寫許可權。注意即使用戶B具有檔案test的寫許可權,其仍然不能夠變更這個檔案的許可權。如把這個檔案的讀許可權賦予給其他沒有這個讀許可權的用戶。或者說把其他用戶的寫許可權取消掉等等,都是不行的。即使用戶A給了用戶B讀、寫、執行等檔案的全部許可權,使用者B也不能夠更改這個檔案的許可權,或者把許可權賦予給其他用戶。簡單的說,無論其他用戶是否對檔案具有完全控制許可權,只有root 用戶與檔案的所有權者才能夠更改檔的許可權。這是Unix系統的一個強制限制。

另外需要說明的是,在Unix系統下檔案許可權包括三方面的內容,即所有權者許可權、同組其他成員的許可權、組用戶的許可權。預設情況下,所有權者對檔案具有讀寫二個許可權。同組其他成員與組用戶都有讀寫檔案的許可權。不同的Unix版本在這方面可能也有所差異。如有的Unix版本的作業系統,組使用者與其他成員的許可權只有讀,而沒有寫。也就是說,後面有用戶加入到這個組,則這用戶對原有的檔案也只有讀的許可權。也就是說,檔或者目錄創建之後,系統會自動賦予他們一組預設的許可權。這組預設的許可權是由一個叫做許可權遮罩字的參數所確定的。如筆者現在使用的一個Unix系統,一個檔案的預設設置中所有的用戶都具有讀取的許可權,但是只有檔的所有權人才具有檔的寫入許可權。系統工程師可以根據自己的實際需要更改這個預設設置。如他希望同組的其他用戶也具有檔寫入的許可權。為此系統工程師就需要使用chmod命令來改變這個預設設置。

如果要更改檔案的許可權,Unix作業系統提供了兩種方式,分別為相對模式與絕對模式。相對模式是在原有的許可權基礎上進行修改,chmod許可權修改命令只修改命令列中指定的許可權,而其他許可權將保持不變。而絕對模式則是直接設置檔案的最終許可權。而在Wincows系統中,則只能夠通過相對模式來更改檔案許可權(雖然Windows系統中沒有這個相對模式的概念)。在絕對模式中,分別利用三個八進位數字表示三個許可權。如4表示讀許可權、2表示寫許可權、1表示執行許可權。如果系統工程師需要為檔設置不同的許可權,只需要進行簡單的加減計算即可。如需要給某個使用者某個檔案的讀寫執行許可權,則就是對他們相加即4 2 1=7即可。這個許可權設計很容易記憶,很很容易實現。故筆者在Unix系統中,基本上都是採用絕對模式來更改檔案的許可權。利用相對模式還需要先瞭解原有的許可權情況,然後再進行配置,反而操作起來麻煩一點。

差異四:Unix檔案許可權控制的漏洞

雖然Unix提供了比較複雜的許可權控制體系,但是人無完人,其還是存在比較大的漏洞。如現在用戶A創建了一個檔案text。其設置只有其自己對這個檔案具有讀寫許可權,其他用戶都沒有對這個檔案具有寫許可權。那麼這個檔案能否被其他用戶刪除呢?答案是可以的。因為檔案許可權不僅跟文件本身的許可權相關,還跟目錄的許可權有關。如果這個目錄允許使用者B具有修改的許可權,那麼用戶B即使不具有用戶A創建的檔案test的人和許可權,其也可以刪除這個檔案。為此,如果用戶B懊惱用戶A不給其看檔案中的內容,那麼其一氣之下就把這個檔案給刪除了。那麼不是會給用戶A造成不必要的損失嗎?其實這種情況不僅Unix系統存在,在Windows作業系統下也存在。

如在Windows下,用戶A把某個檔案設置為唯讀,而且還為這個檔案設置了密碼。但是只要其他使用者對這個目錄具有修改的權利,那麼其他用戶還是可以在檔案所有權者不知情的情況下刪除這個檔案。即使其有唯讀與檔案密碼保護,也照刪不誤。故要做到檔真正的安全,還需要檔案許可權與目錄許可權配合使用才行。

(此篇文章為網路轉載,如有冒犯,請來信告知,當即刻移除!)