2011年6月27日 星期一

Mac OSX 裡的 Shared 及 Public 檔案夾 ?


很久以前我曾經說過,Mac OS 跟 Mac OSX 是完全不同的作業系統,主要的差別就在於 Mac OSX 的系統核心是源自於 BSD,故屬於 Unix like 系統的一員 [1]。也因此 Mac OSX 有著 Unix 系統的諸多特性,其中最重要的就是 -- 權限控管

這次的主題是 "共享" (Shared) 及 "公用" (Public) 檔案夾,這兩個檔案夾是系統預設的,各自有不同的用途,不過很多人始終搞不清楚它們在幹什麼。為了要解釋這兩個檔案夾,必須從 "檔案夾使用權限" 的基本原理講起,以下我先以一張圖為例 [2] :


在 Unix 系列的系統中,每個檔案及檔案夾都有一組存取權限,分為 "存取者" 及 "存取方法"。

存取者 :
  • 持有人 (Owner) : 也就是創造該檔案 (夾) 的使用者,廣義地說,就是 "將該檔案 (夾) 帶進作業系統的使用者 (比如說從網路下載檔案)"。
  • 所屬群組 (Group) : 一個檔案 (夾) 可隸屬於一個群組,該群組的使用者可以對該檔案 (夾) 有特殊的存取權限。
  • 其他人 (Others) : 除了上述之外的任何使用者。 
存取方法 :
  • 讀取 (Read,r) : 簡單的說就是看到該檔案夾包含哪些檔案,或該檔案的內容。
  • 寫入 (Write,w) : 新增檔案至該檔案夾中,或更改檔案內容及名稱 (並存檔) [3]。
  • 執行 (Execute,x) : 這種權限只存在於可直接執行 (就是滑鼠點兩下) 的應用程式 (application) 及腳本 (script) 檔案中,而本篇文章的主題為檔案夾,故不在 "執行" 權限上多加著墨。(20110904 Update : 檔案夾也可能有 "執行" 權限,意指可以用 "cd" 指令進入該目錄,不過若沒有 "讀取" 或 "寫入" 權限的話也是沒啥用就是了 .....)

每一個 "存取者" 及 "存取方法" 都可以互相搭配,而且存取方法可以複選。以檔案夾為例,如上圖,最左側 (最上層) folder 的存取權限限制該檔案夾內的檔案及子檔案夾能否被使用者看到 (讀取) 或是允許新增項目 (寫入),而其子檔案夾遵循的遊戲規則也是依此類推。

對權限有了基本的認知之後,開始進入正題 (終於 .... orz) :

1. 共享 (Shared) 檔案夾  /Users/Shared/
Mac OSX 是一個多使用者的作業系統,藉由權限控管,每個使用者可使用相同的應用程式 (例如放在 /Application/ 中的程式),也可擁有自己的儲存空間,即為俗稱的 "家目錄"。家目錄一般以 "~/" 來代表,絕對位置為 "/Users/使用者帳號/",裡面的東西是該使用者的私人檔案及種種偏好設定檔,其他使用者是看不到的 (嘿 ~ 我知道很多人這樣想,可是不完全對,我文末會解釋)。

可是,若我想將某些檔案分享給同一台 Mac 的其他使用者該怎麼辦 ? 此時就要使用共享檔案夾。如下圖,比如說我的 Mac 裡有 home 及 apple 兩個 "自定" 使用者 [4] :


共享檔案夾跟其他使用者的家目錄位於同一層級,這個檔案夾由系統產生,不屬於任何一個使用者,若將其打開並叫出簡介視窗 :


如圖,持有人為  system、群組 wheel 及其他人都被允許 "讀取及寫入" [5],這代表著所有人都可以將檔案 (夾) 丟到這個檔案夾,並且讀取這個檔案夾裡的所有檔案 (夾),以達到分享檔案的目的。不過值得注意的是,在 Unix 類型的系統裡,任何檔案 (夾) 不管被複製或搬移到何處,其都保有著原本的存取權限,而在 Mac OSX 裡,當一個檔案 (夾) 被創造出來時,預設是其持有人擁有 "讀取及寫入" 的權限,而群組成員及其他人都只有 "讀取" 的權限,故在共享資料夾中,每個使用者只能增減或修改自己存入的檔案 (夾),對於其他使用者存入的檔案 (夾) 僅能讀取而已 (當然,這是在未手動修改過權限的預設情形下)。

2. 公用 (Public) 檔案夾  ~/Public/
公用檔案夾比起共享檔案夾更少人用,它的位置在個人家目錄下,一般以 "~/Public/" 表示,絕對路徑是 "/Users/使用者帳號/Public/"。它的構想跟共享檔案夾有些類似,簡單的說就是搞小團體 .... =  =+  不想將檔案放在共享檔案夾給所有人瞻仰,又不知道怎麼設立群組,那就直接進入欲分享檔案之人的家目錄下,尋找其 "公用" 檔案夾,進入後會發現那是一個唯讀的檔案夾,裡面的檔案是該使用者要分享給其他人的,故我們 (其他人) 不能刪改或更名。重點是公用檔案夾裡存在著一個非常特別的檔案夾 -- 投遞箱 (Drop box),它的存取權限是 "只供寫入",圖示上也多了一個藍色的小箭頭,這個檔案夾除了持有人之外都不能打開 (讀取) 它,但是可以丟 (寫入) 東西進去,所以其他人看不到你分享給該使用者的東西,相對地,你也看不到其他使用者分享了什麼東西給該使用者。下圖是簡單的螢幕擷圖,我的帳號為 home,進入 apple 的公用檔案夾中,並嘗試打開 "投遞箱" .....


Finder 隨即跳出權限不足的警告,因為那個檔案夾只供寫入。從左側的簡介視窗可以看出只有持有人 apple 擁有 "讀取及寫入" 的權限,這樣他才能知道別人分享了哪些檔案給他,而藉由查看被分享之檔案的持有人身份,也能得知是哪些人分享了檔案給他,這點非常有用。那麼,自己的公用檔案夾又是什麼樣的情形呢 ? 如下圖 :

 

自己的公用檔案夾不僅有特殊的圖示 (10.4 跟 10.5 的圖示不同,不過都是特殊的圖示),而且自己 (持有人) 有著 "讀取及寫入" 的權限,就連投遞箱也一樣,故其上沒有藍色的小箭頭。除此之外,正由於自己是持有人,故可以在簡介視窗中直接修改群組成員及其他人的存取權限 !! 這個功能可是非常威的,省去了打終端機指令的麻煩。

=====================

以上,大致解釋了 "共享" 及 "公用" 檔案夾的運作原理。看起來很有用,可是為何很多人使用 Mac OSX 很多年都不知道這兩個玩意在幹啥呢 ? 因為 Mac 本身是以家用的 "個人" 電腦為目標銷售族群,而不是 "多人" 使用的伺服器,故很多人的 Mac 自始至終都只有登錄一個使用者帳號,故這兩個檔案夾就形同虛設了。不過我還是建議一般用戶不要以 "管理者" 帳號進行日常的使用,最好多開一個 "一般使用者" 的帳號來作為日常使用的帳號,這樣可以降低自己的權限,在遭受惡意軟體攻擊及自己做傻事時多一層防護 ....。

最後,我解釋一下文中提到的 "個人家目錄的東西別的使用者看不到" 為何是錯的。原因在於 -- 在 Mac OSX 裡,當一個檔案 (夾) 被創造出來時,預設是其持有人擁有 "讀取及寫入" 的權限,而群組成員及其他人只具有 "讀取" 的權限。上述幾句話我在前面某段中有提過一次,所以 ... 看出端倪了嗎 ? 其他人可以讀取,就代表還是看得到裡面的內容阿 !! 以下是我 (home) 進入另一個使用者 apple 的家目錄下看到的東西 :


不過 Mac OSX 也不是笨蛋,它幫使用者建立好的特殊檔案夾 (如音樂、照片、影片 .... 等),都預設 "除了持有人之外均無存取權限" (所以檔案夾上面有一個紅色的禁止標誌) [6],故其他使用者都看不到裡面的內容。可是僅只於此,使用者自己建立的檔案 (夾) 它就管不到了,比如說上圖的 Mercury 檔案夾,就是 Mercury Messenger 自動幫使用者建立的,雖然其他使用者只有讀取權限,可是也夠了,裡面的內容一覽無遺 (還可以複製一份帶走 ...),包括用 Mercurry 跟正妹聊天的對話紀錄 ..... 嘖嘖嘖 ..... 所以很多程式將內含使用者資訊的檔案夾建立在 "文件"、"圖片" 等預設檔案夾裡不是沒有原因的,那跟隱私權有很大的關係。

對了,若你發現你已經在家目錄下建立了檔案夾,且擔心其他使用者偷看,將其改個權限即可,這應該不是什麼難事。


附註
1. 不過 Mac OSX 已經取得 Unix 的認證,故它現在是 "真正" 的 Unix,不只是 Unix "like"。
2. 本篇文章以下的截圖都取自 Mac OSX 10.4,和 10.5 之後的系統僅是圖示上的不同。
3. 故若你想讓別人看你的 Word 或 Pages 等可編輯之檔案的內容,但又怕對方竄改你硬碟裡的原稿,除了轉成 pdf 檔,然後把原稿藏起來之外,利用權限管理也是一個方法,沒有寫入權限的使用者就算打開檔案也不能修改存檔 (當然,對方可以複製一份給他自己改個爽 ....)。
4. Unix 類的作業系統都會有一些 "系統" 使用者,這些使用者是系統創造的,用某些終端機指令可以看得到,避免扯太多就先不提了 .....
5. wheel 是 Unix / BSD 系統內一種特殊的群組,意指 "有能力使用 su 指令取得 root 權限" 之使用者的群組,在 Linux 裡已不再使用,這裡可以先不理會這玩意,反正權限都一樣 .....。
6. "公用" 檔案夾當然是不能有禁止標誌。至於 "網站" 檔案夾是為了架設網站而設計,裡面若有存放網頁檔,就可藉由開啟系統偏好設定的 "網頁共享",將該台 Mac 作為網站的伺服器,故任何人都被賦予對該檔案夾有讀取的權限。

此外,眼尖的人可能會注意到視窗的左下角有兩個奇怪的圖案,這兩個圖案同樣出現在 Mac OSX 10.5 之後的 Finder 視窗。右側的 + 代表 "可讀取",左側的 X (其實是一支筆再畫一條線) 代表 "不可寫入",使用者可以由此快速地得知對該資料夾的存取權限。

2 則留言:

  1. 「Mac OSX 已經取得 Unix 的認證,故它現在是 "真正" 的 Unix,不只是 Unix "like"。」
    我想請教Unix like的定義~~
    是指像Linux符合POSIX那樣嗎?不過Windows不是也有POSIX...
    還有Darwin的核心mach和BSD到底又是什麼關係勒...

    回覆刪除
  2. Unix like 的定義不是很明確 ... 只要中心思想跟 Unix 類似的作業系統都算。比如說 BSD 基本上很接近 "免費的 Unix";Linux 的內核是全部重寫過的,完全沒有用到 Unix 的 code;Mac OSX 的核心是基於 BSD,只是後來經過大幅改寫。不過它們的設計邏輯都跟 Unix 類似,故都屬於 Unix like 的一員,至於遵守 POSIX 規範只是它們的共通點之一。而 Windows 也遵守一定程度的 POSIX 規範,但是沒用,因為它骨子裡的設計邏輯跟 Unix 截然不同,故當然不屬於 Unix like 成員之一。

    Darwin 是一個由 BSD、NeXTSTEP 及一些自由軟體所組成的系統核心,而 Mach 是其中最重要的 "微核心",大致上的關係就是這樣吧,若要再深入一點請去問相關科系的人囉 ....

    回覆刪除