關於Linux系統的文件權限,你需要了解這些內容

道阻且長,行則將至。埋頭苦幹,不鳴則已,一鳴驚人!加油騷年

1 前言

  鳥哥的Linux私房菜:“Linux最優秀的地方之一,就在於它的多用戶,多任務環境。而爲了讓各個用戶具有較保密的文件數據,因此文件的權限管理就變得很重要了。”

本文爲自己認真閱讀《鳥哥的Linux私房菜》對應內容後,總結記錄所得。如果有誤,還望指正!謝謝

  Linux一般將文件可存取訪問的身份分爲3個類別,分別是:owner、group、others,且三種身份各有read、write、execute等權限。

  本文將會圍繞以下方面展開:
在這裏插入圖片描述

2 基本概念

2.1 用戶和用戶組的基本概念

  用戶及用戶組的基本概念,以實際中一個家庭爲例,假設有一家人,家裏只有三兄弟,分別是王大毛、王二毛、王三毛這3個人,家庭的戶主是王大毛。簡要分析如下:

  • 文件所有者(用戶):在這個家庭中,王大毛、王二毛、王三毛,分別有屬於自己的房間,那麼他們就是這個房間的所有者(用戶)。此時王二毛可以進入王三毛的房間,但是卻只能看看,什麼也不能動,因爲這些東西都是王三毛的。
  • 用戶組:因爲這三個人是一家人,所以他們可以在公共的客廳一塊活動,大家都可以在客廳做自己的事情,比如看電視,聽音樂等。

2.2 用戶和用戶組的基本特徵

  用戶、用戶組、其他這幾個類別的特徵是什麼呢?

  • 用戶:每個用戶,都有自己的空間,數據存儲空間,工作空間等;
  • 用戶組:同一個用戶組的成員,可以有共享的空間交流;不同用戶組的成員,不能互相訪問;比如上邊王大毛的家庭,另外一個家庭的用戶張三,就不能去訪問。除非得到王大毛家庭用戶的“邀請”。
  • 其他:另外家庭的用戶張三,就是其他。

2.3 Linux下默認文件存放路徑

  在Linux系統下,是有一個默認的路徑,默認文件來存放用戶和用戶組的相關信息,分別如下:

  • /etc/passwd:存放所有的系統上的賬號與一般身份用戶,以及root的相關信息;
  • /etc/shadow:記錄個人的密碼;
  • /etc/group:記錄Linux所有的組名。

  需要特別注意的是:這三個文件是Linux系統裏面賬號、密碼、用戶組信息的集中地,一定不要隨便刪除這三個文件。

3 Linux的文件屬性

3.1 查看文件屬性

  當我們在Linux系統下,使用 ls -l 命令查看目錄文件時,會發現有很多的內容,我剛開始的時候瞭解的也不是很深入,只是知道個大概,今天認認真真看了看書,做一個總結。

  關於Linux下 ls 命令的相關參數,可以參考菜鳥教程 - ls,部分命令參數截圖如下:
在這裏插入圖片描述

3.2 文件屬性分析

  我參考自己的Ubuntu,拿如下幾個文件舉例:

列1 列2 列3 列4 列5 列6 列7
drwxrwxrwx 2 zhaoc zhaoc 4096 10月 16 22:50 Music
drwxr-xr-x 2 root root 4096 3月 24 21:50 vim
-rw-r–r-- 1 root root 438 3月 15 15:49 exports
  • 列1:代表這個文件的類型與權限;這一列,如果仔細觀察就會發現,每一個都是由10個字符組成(由於編輯器原因,可能會連到一塊),下邊對這10個字符分開來說:
    • 第一個字符:代表這個文件是“目錄、文件或鏈接文件等”,就是文件的類型,不同的 字母 代表的含義是不一樣的:
      • [ d ]:代表目錄,即此文件類型爲一個目錄類型,也就是常見的文件夾;如上邊的“Music”文件夾;
      • [ - ]:代表文件,就是一個最小的單元,也就是windows下常見的基本文件等;如上邊的“exports”文件;
      • [ l ]:小寫字母“L”,代表連接文件(linkfile);
      • [ b ]:表示設備文件裏面的可供存儲的接口設備;
      • [ c ]:表示設備文件裏面的串行端口設備,例如鍵盤、鼠標等(一次性讀取設備);
    • 第2-4個字符:這三個字符代表文件所有者的權限,如上述“Music”文件,所有者的權限就是 [rwx],也就是可讀,可寫,可執行權限;
    • 第5-7個字符:代表同用戶組的權限,也就是同一個用戶組內的其他用戶,對這個文件的權限。以“vim”文件爲例,同用戶組的權限就是 [r-x],即可讀,可執行權限;
    • 第8-10個字符:代表其他非本用戶組的權限。以“exports”文件爲例,其他非本用戶組的權限爲 [r–],也就是可讀權限;
  • 列2:表示有多少文件名連接到此節點。通俗的理解就是此文件夾下,有多少個文件夾。按照我自己的測試,這個只會顯示有多少個文件夾,而不包含文件。另外需要注意的是,這個數量包含隱藏文件夾的數量,可以參考下圖做一個對比,11-Linux文件夾下邊只有一個文件夾,但是此處顯示的文件名卻是3,那是因爲還有2個隱藏文件夾,注意這兩個隱藏文件夾前邊的文件類型也是 d
    在這裏插入圖片描述
  • 列3:表示這個文件或“目錄”的“所有者賬號”,按我的理解,就是這個文件是誰第一個創建出來的。
  • 列4:表示這個文件所屬的用戶組,Group。
  • 列5:表示這個文件的容量大小,默認單位爲B
  • 列6:表示這個文件第一次創建的日期,或者是最近的修改日期。其實也就是最後一次修改的日期。補充一點,如果希望顯示完整的時間格式,可以使用如下命令:
ls -l --full-time

在這裏插入圖片描述

  • 列7:這一列就是文件名啦。需要了解的是,以英文符號 “.” 開頭的文件,爲隱藏文件。

4 如何改變文件屬性與權限

  有幾個常用的更改文件屬性、文件權限的命令。先列出來,在一一分析:

  • chgrp:改變文件所屬用戶組;
  • chown:改變文件所有者;
  • chmod:改變文件的權限;

4.1 改變所屬用戶組:chgrp

  更改文件/目錄所屬用戶組,一般我們較爲常用的就是使用 chgrp 命令。其實這個命令就是英文 change group 的縮寫;

  需要注意的是,要被改變的組名必須要在 /etc/group 文件內存在纔可以,否則就會報錯。

  基本的命令格式如下:

chgrp [-R] [所屬羣組] [文件或目錄]

[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。

  更爲詳細的信息可以參考:菜鳥教程 - chgrp,裏邊有更爲詳盡的解釋及示例。

4.2 改變文件所有者:chown

  更改文件/目錄的所有者,一般常用的命令就是 chown 命令,也就是英文 change owner 的縮寫;

  同樣需要注意的是,用戶必須是已經存在於系統中的賬號,也就是在 /etc/passwd 這個文件中有記錄的用戶名稱才能改變。

  基本的命令格式如下:

chown [-R] [賬號名稱] [文件或目錄]

[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。

  如果需要同時更改文件的所有者和用戶組,可以使用如下命令:

chown root:root filename

  需要同時更改文件所有者及用戶組時,推薦使用冒號 “:” ;如果需要單純的修改用戶組怎麼辦?可以使用如下命令:

chown .root filename

  此種情況下,可以使用英文的小數點 “.

4.3 改變文件權限:chmod

  這個命令,可以說是在實際使用中,最常用的一個命令之一。

  基本的命令格式如下:

chmod [-R] [xyz] [文件或目錄]

[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。

  而這個命令,稍微大點來說,有兩種不同的用法,下邊分開描述。

4.3.1 數字類型改變文件權限

  通過直接使用數字方法,改變文件權限,在實際中是較爲常用的方法。簡單的來說,一個文件/目錄,有三種不同的身份,每種身份有三種不同的權限,按照二進制來劃分如下:

r w x r w x r w x
4 2 1 4 2 1 4 2 1

  同樣,拿上述三個文件,做個分析

列1 列2 列3 列4 列5 列6 列7
drwxrwxrwx 2 zhaoc zhaoc 4096 10月 16 22:50 Music
drwxr-xr-x 2 root root 4096 3月 24 21:50 vim
-rw-r–r-- 1 root root 438 3月 15 15:49 exports

  如果我要將 Music 設置爲當前權限(rwxrwxrwx),應該怎麼做,分析,此文件擁有全部的權限,如果要設置爲此權限類型,應該使用如下命令:

chmod 777 Music

  同理,如果要將 exports 設置爲當前權限(rw-r–r--),設置命令如下:

chmod 644 exports

  總結一下經驗就是,使用數組類型改變文件權限時,將對應位權限轉換爲二進制數值,通過此命令設置文件權限即可。

4.3.2 符號類型改變文件權限

  所謂的符號類型,就是使用類似於字母的方式,來改變文件權限。我們常用的身份有 user、group、others 這三種身份,因此 Linux 中通過 u g o 來代表三種身份,另外用 a 代表全部的身份;

  具體的權限類型就可以用 r w x 來表示;

  操作方式可以用如下三種方式表示:

  • +:表示給此文件/目錄,加入某種權限,除此之外的其他權限不變;按我的理解就是隻修改對應部分的權限;
  • -:表示除去此文件/目錄的某種權限,除此之外的其他權限保持不變;
  • =:表示給文件/目錄設置權限,此種方式會覆蓋原來的所有權限內容。

  用上述 “exports” 文件舉例,此文件的權限爲(rw-r–r--),我們在設置時,可以使用如下命令:

chmod u=rw,go=r exports

  上述命令解釋過來,就是給文件所有者 “u” ,設置可讀,可寫的權限;給用戶組和其他用戶設置可讀權限。

  需要注意的是:u=rw,go=r 這條命令,是連在一起的,中間不能有任何空格

  如果我們不知道某個文件原來的屬性,只想給這個文件的每個用戶增加一個可寫入的權限,就可以使用如下命令:

chmod a+w filename

  同樣的,如果是要給這個文件的所有用戶去掉可執行權限,則可以使用如下命令:

chmod a-x filename

  通過上面兩個示例,可以知道,在 + - 狀態下,只要是沒有指定到的選項,則該權限“不會被變動”。

5 目錄與文件的權限意義

  目錄與文件的權限,對於數據的安全是有很重要的作用的,下邊分開來介紹文件權限對於一般文件與目錄文件有何不同

5.1 權限對文件的重要性

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

  • r(read):可讀取此文件的實際內容,如讀取文本文件的文字內容等;
  • w(write):可以編輯、新增或者是修改該文件的內容,但是不包含刪除該文件;也就是說寫權限只能對文件的內容進行修改。
  • x(execute):該文件具有可以被系統執行的權限。此時需要注意windows下可執行文件與Linux系統下可執行文件的不同。windows是根據文件的“擴展名”來判斷文件是否有可執行權限;而Linux是通過判斷此文件是否有 “x” 權限,來決定是否可以執行。
  • 總結:對於文件來說,所具有的權限是對文件的內容的權限,但並不具備刪除該文件本身的權限。因爲文件記錄的是實際的數據。

5.2 權限對目錄的重要性

  文件是存放實際數據的所在,目錄主要的內容是記錄文件名列表,文件名與目錄有強烈的關聯。所以對於目錄時,不同的權限也有不同的作用:

  • r(read):表示具有讀取目錄結構列表的權限;也就是說,你可以看到這個目錄下有哪些文件列表,不過也就只是看看而已;
  • w(write):這個可以寫入的權限對目錄來說是很強大的,它表示你具有更改該目錄結構列表的權限:
    • 新建新的文件與目錄;
    • 刪除已經存在的文件與目錄(不論該文件的權限爲何);
    • 將已存在的文件或目錄進行重命名;
    • 轉移該目錄內的文件、目錄位置。
    • 總結一下:目錄的w權限就與該目錄下面的文件名變動有關聯。
  • x(execute):目錄的可執行權限有什麼用?目錄不能被用來執行,但是目錄的x 可執行權限代表的是用戶能否進入該目錄成爲工作目錄的用途。

5.2.1 目錄實際舉例1

  舉例說明目錄的可執行權限有什麼作用,假設有個目錄,權限如下:

drwxr--r-- 3 root root 4096 3月 24 21:50 filename

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

  回答:zhaoc 對此目錄僅具有 r 的權限,因此 zhaoc 可以查詢此目錄下的文件名列表。因爲 zhaoc 不具有 x 的權限,所以 zhaoc 並不能切換到此目錄內這一點很重要

5.2.2 目錄實際舉例2

  假設我的賬號名稱爲 zhaoc,我的主文件夾在 /home/zhaoc 這個路徑下,zhaoc對此目錄具有完全的 [rwx] 權限,如果在此目錄下有一個文件 filename,改文件的權限如下:

-rwx------ 1 root root 4365 Sep 19 23:20 filename

  問題:zhaoc 對此文件夾的權限是什麼?可否刪除此文件?

  回答:由上述文件權限列表可知,此時 zhaoc 對此文件來說是 “others”的身份,因此這個文件他無法讀,無法編輯,也無法執行,也就是說他無法變動這個文件的內容。但是,由於這個文件在他的主文件夾下,他在此目錄下具有 [rwx] 的完整權限,因此對於 filename 這個 “文件名” 來說,zhaoc 是能夠 “刪除” 的,也就是說 zhaoc 這個用戶能夠刪除 “filename” 這個文件。

6 結合工作實際

  結合我目前工作經驗來看,在實際工作中,文件權限的重要性在開發服務器上會得到明顯體現。比如我剛到公司的時候,所有文件權限都是隻讀;目錄權限爲可讀、可執行;也就是說,我對服務器上的任何東西都沒有寫入權限;這樣很明顯的一個好處就是,防止新人不小心刪除服務器的文件,給公司造成損失。

  等到後來我在公司待了一段時間,熟悉了一些東西、需要接觸項目開發的時候,就給我開放了對服務器特定目錄的可寫操作,保證我可以在此文件夾內,進行代碼修改、提交等操作。

7 總結

  1. 對用戶,用戶組等概念特徵,有了一個基本瞭解;
  2. 對文件屬性有了一個基本認識,以及文件屬性的查看方式等;
  3. 對改變文件屬性與權限的三種方法,有了更深入的瞭解;
  4. 對一些特定情況下的使用權限,有了很好的認識;

本篇文章就是基於書本內容的一個閱讀,與自己深入瞭解後的一個筆記總結。若有錯誤之處還望指正,希望對您能有幫助!感覺不錯可以留個贊哈,方便更多的人看到,謝謝各位!

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