Linux——目錄與文件的權限意義

權限對文件的重要性

文件是實際含有數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件(binary program)等等。 因此,權限對於文件來說,他的意義是這樣的:

  • r (read):可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
  • w (write):可以編輯、新增或者是修改該文件的內容(但不含刪除該文件)
  • x (eXecute):該文件具有可以被系統執行的權限。

那個可讀(r)代表讀取文件內容是還好了解,那麼可執行(x)呢?這裏你就必須要小心啦! 因爲在Windows 底下一個文件是否具有執行的能力是藉由『 擴展名 』來判斷的, 例如:.exe, .bat, .com 等等,但是在 Linux 底下,我們的文件是否能被執行,則是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關係的!至於最後一個 w 這個權限呢?當你對一個文件具有 w 權限時,你可以具有寫入/編輯/新增/修改文件的內容的權限, 但並不具備有刪除該文件本身的權限!對於文件的 rwx 來說, 主要都是針對『文件的內容』而言,與文件檔名的存在與否沒有關係喔!因爲文件記錄的是實際的數據嘛!

權限對目錄的重要性

文件是存放實際數據的所在,那麼目錄主要是儲存啥玩意啊?目錄主要的內容在記錄文件名列表,文件名與目錄有強烈的關連啦! 所以如果是針對目錄時,那個 r, w, x 對目錄是什麼意義呢?

  • r (read contents in directory)表示具有讀取目錄結構列表的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的文件名數據。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
  • w (modify contents of directory)這個可寫入的權限對目錄來說,是很了不起的! 因爲他表示你具有異動該目錄結構列表的權限,也就是底下這些權限:
    (1)建立新的文件與目錄;(2)搬移該目錄內的文件、目錄位置。
    (3)將已存在的文件或目錄進行更名;(4)刪除已經存在的文件與目錄(不論該文件的權限爲何!)
    總之,目錄的w 權限就與該目錄底下的文件名異動有關就對了啦!
  • x (access directory)目錄不可以被執行,目錄的 x 代表的是用戶能否進入該目錄成爲工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登入 Linux 時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd(change directory)囉!

 現在假設『文件是一堆文件文件夾』,所以你可能可以在上面寫/改一些資料。而『目錄是一堆抽屜』,因此你可以將文件夾分類放置到不同的抽屜去。 因此抽屜最大的目的是拿出/放入文件夾喔!現在讓我們彙整一下數據:

根據上述的分析,你可以看到,對一般文件來說,rwx 主要是針對『文件的內容』來設計權限,對目錄來說,rwx 則是針對『目錄內的文件名列表』來設計權限。 其中最有趣的大概就屬目錄的 x 權限了!『檔名怎麼執行』?沒道理嘛!其實,這個 x 權限設計,就相當於『該目錄,也就是該抽屜的 " 鑰匙" 』啦! 沒有鑰匙你怎麼能夠打開抽屜呢?對吧!

大致的目錄權限概念是這樣,底下我們來看幾個範例,讓你瞭解一下啥是目錄的權限囉!

例題:

有個目錄的權限如下所示:

drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh

系統有個賬號名稱爲 vbird,這個賬號並沒有支持 root 羣組,請問 vbird 對這個目錄有何權限?是否可切換到此目錄中?

答:

vbird 對此目錄僅具有 r 的權限,因此 vbird 可以查詢此目錄下的文件名列表。因爲 vbird 不具有x 的權限,亦即 vbird

沒有這個抽屜的鑰匙啦! 因此vbird 並不能切換到此目錄內!(相當重要的概念!)

上面這個例題中因爲 vbird 具有 r 的權限,因爲是 r 乍看之下好像就具有可以進入此目錄的權限,其實那是錯的。 能不能進入某一個目錄,只與該目錄的 x 權限有關啦!此外, 工作目錄對於指令的執行是非常重要的,如果你在某目錄下不具有 x 的權限, 那麼你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的 r w 的權限。

很多朋友在架設網站的時候都會卡在一些權限的設定上,他們開放目錄數據給因特網的任何人來瀏覽, 卻只開放 r 的權限,如上面的範例所示那樣,那樣的結果就是導致網站服務器軟件無法到該目錄下讀取文件(最多隻能看到文件名), 最終用戶總是無法正確的查閱到文件的內容(顯示權限不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予 r 及 x 的權限,但 w 權限不可隨便給! 爲什麼 w 不能隨便給,我們來看下一個例子:

例題:

假設有個賬號名稱爲 dmtsai,他的家目錄在/home/dmtsai/,dmtsai 對此目錄具有[rwx]的權限。 若在此目錄下有個名爲 the_root.data 的文件,該文件的權限如下:

-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data

請問 dmtsai 對此文件的權限爲何?可否刪除此文件? 答:

如上所示,由於 dmtsai 對此文件來說是『others』的身份,因此這個文件他無法讀、無法編輯也無法執行, 也就是說,他無法變動這個文件的內容就是了。但是由於這個文件在他的家目錄下, 他在此目錄下具有rwx 的完整權限,因此對於 the_root.data 這個『檔名』來說,他是能夠『刪除』的! 結論就是,dmtsai 這個用戶能夠刪除 the_root.data 這個文件!

注意:上述的例子解釋是這樣的,假設有個莫名其妙的人,拿着一個完全密封的文件夾放到你的辦公室抽屜中,因爲完全密封你也打不開、看不到這個文件夾的內部數據(對文件來說,你沒有權限)。 但是因爲這個文件夾是放在你的抽屜中,你當然可以拿出/放入任何數據在這個抽屜中(對目錄來說,你具有所有權限)。 所以,情況就是:你打開抽屜、拿出這個沒辦法看到的文件夾、將他丟到走廊上的垃圾桶!搞定了 (順利刪除!)

還是看不太懂?有聽沒有懂喔!沒關係~我們底下就來設計一個練習, 讓你實際玩玩看,應該就能夠比較近入狀況啦!不過,由於很多指令我們還沒有教, 所以底下的指令有的先了解即可,詳細的指令用法我們會在後面繼續介紹的。

1、先用 root 的身份建立所需要的文件與目錄環境

我們用 root 的身份在所有人都可以工作的/tmp 目錄中建立一個名爲 testing 的目錄, 該目錄的權限爲744 且目錄擁有者爲 root。另外,在 testing 目錄下在建立一個空的文件, 檔名亦爲 testing。建立目錄可用 mkdir(make directory),建立空文件可用touch來處理。 所以過程如下所示:

2、一般用戶的讀寫權限爲何?觀察中

在上面的例子中,雖然目錄是 744 的權限設定,一般用戶應該能有 r 的權限, 但這樣的權限使用者能做啥事呢?由於鳥哥的系統中含有一個賬號名爲 dmtsai 的,請再開另外一個終端機,使用 dmtsai 登入來操作底下的任務!

3、如果該目錄屬於用戶本身,會有什麼狀況?

上面的練習知道了只有 r 確實可以讓用戶讀取目錄的文件名列表,不過詳細的信息卻還是讀不到的, 同時也不能將該目錄變成工作目錄(cd  進入該目錄之意)。那如果我們讓該目錄變成用戶的, 那麼用戶在這個目錄底下是否能夠刪除文件呢?底下的練習做看看:

透過上面這個簡單的步驟,你就可以清楚的知道, x 在目錄當中是與『能否進入該目錄』有關, 至於那個 w 則具有相當重要的權限,因爲他可以讓使用者刪除、更新、新建文件或目錄, 是個很重要的參數啊!這樣可以理解了嗎?! ^_^

4、用戶操作功能與權限

剛剛講這樣如果你還是搞不懂~沒關係,我們來處理個特殊的案例!假設兩個檔名,分別是底下這樣:

  • /dir1/file1
  • /dir2

假設你現在在系統使用 dmtsai 這個賬號,那麼這個賬號針對 /dir1, /dir1/file1, /dir2  這三個檔名來說, 分別需要『哪些最小的權限』才能達成各項任務? 彙整如下:

你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!爲啥?我們知道 /dir1 是個目錄, 也是個抽屜!那個抽屜的 r 代表『這個抽屜裏面有燈光』, 所以你能看到的抽屜內的所有文件夾名(非內容)。但你已經知道里面的文件夾放在哪個地方,那,有沒有燈光有差嘛?你還是可以摸黑拿到該文件夾的!對吧! 因此,上面很多動作中,你只要具有 即可!r  是非必備的!只是,沒有r 的話,使用 [tab] 時,他就無法自動幫你補齊檔名了!這樣理解乎?

注意:看了上面這個表格,你應該會覺得很可怕喔!因爲,要讀一個文件時,你得要具有『這個文件所在目錄的 x 權限』纔行!所以,通常要開放的目錄, 至少會具備 rx 這兩個權限!現在你知道爲啥了吧?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章