Linux 許可權管理

計算機出現之初,它的作用就是幫助我們完成重複而枯燥的任務,因為它太擅長干這樣的事情了,而且看起來似乎是任勞任怨的。真的是這樣的嗎?在早期,計算機罷工大多數時候是因為硬體或者軟體出問題了,是真的沒辦法繼續工作了。而現在,計算機罷工又多了一個很重要的因素,那就是由於計算機安全上的因素造成的,如果你的系統許可權不嚴謹,系統或者軟體有漏洞就可能會被黑客利用,然後你的計算機就可能人為的罷工了。

今天我們就一起來系統的學學 Linux 系統上一些和許可權相關的知識,通過這些知識的學習,我們平時在使用 Linux 系統的時候就可以規範我們的操作,盡量避免系統處在危險之中。今天主要學習的內容如下:

  • id:顯示用戶身份號
  • chmod:更改文件許可權
  • umask:設置默認的文件許可權
  • su:以另一個用戶的身份來運行 shell
  • sudo:以另一個用戶的身份來執行命令
  • chown:更改文件所有者
  • chgrp:更改文件組所有權
  • passwd:更改用戶密碼

1. 用戶、用戶組和其他

我們在使用一些命令的時候,shell 可能會提示我們沒有許可權訪問。從使用 Linux 系統到現在,你一定遇到過下圖中類似的提示。

其實這些提示的意思就是作為一個普通用戶,沒有許可權來讀取這些文件。那許可權到底是個什麼東西呢?先別急,聽我慢慢道來。

一個用戶可以擁有文件和目錄。當一個用戶擁有一個文件或目錄時, 用戶對這個文件或目錄就有訪問許可權和控制許可權。用戶又會屬於一個由一個或多個用戶組成的用戶組,用戶組成員對這些文件和目錄的許可權由文件和目錄的所有者授予。除了對一個用戶組授予許可權之外,文件所有者可能會給其他用戶或者用戶組成員一些許可權。

上圖展示了 id 命令的使用和輸出結果,從輸出結果中,我們能獲取到一些重要的信息。

  • uid:在安裝系統的時候我們會新建一個普通用戶 chaojun (當然,也是可以在系統安裝好後另外新建的其他用戶,這裡我登錄的用戶是 chaojun,所以我輸入 id 命令後得到的結果中 uid 這個欄位的名字就是 chaojun),這裡的 uid 就像身份證號碼和身份證號碼對應人一樣,它代表著一種對應關係,其中,身份證號碼是:1000,名字是 chaojun
  • gid:gid 是用戶 chaojun 所屬的用戶組的身份對應信息
  • groups:這個欄位後面的值是很多用逗號隔開的值,代表這 chaojun 這個用戶還屬於這些用戶組,這些用戶組成員共同擁有的許可權,chaojun 這個用戶也是擁有的。

在這裡用戶是 chaojun,用戶數組是 chaojun,其他就很多了,有 adm、cdrom、sudo 等等。

2. 讀取、寫入和執行

對於文件和目錄的訪問權力是根據讀訪問、寫訪問和執行訪問來定義的。我們來看看 ls -l test.txt 這個命令的執行結果(注意:test.txt 是我自己創建的一個文件,你可以把它換成你自己的文件)。

-rwx------ 1 chaojun chaojun 6375 11 27 10:57 test.txt

這行內容的前十個字元是文件的屬性。這十個字元的第一個字元表明文件類型。下表是經常看到的文件類型(還有其它的,不常見類型):

  • -:普通文件
  • d:目錄
  • l:符號鏈接。注意對於符號鏈接文件,剩餘的文件屬性總是 "rwxrwxrwx",而且都是虛擬值。真正的文件屬性是指符號鏈接所指向的文件的屬性
  • c:字元設備文件。這種文件類型是指按照位元組流來處理數據的設備。 比如說終端機或者數據機
  • b:塊設備文件。這種文件類型是指按照數據塊來處理數據的設備,例如一個硬碟或者 CD-ROM 盤

剩下的九個字元叫做文件模式,代表著文件所有者、文件組所有者和其他人的讀、寫和執行許可權。

當設置文件模式後,r、w和x 模式屬性對文件和目錄會產生以下影響:

  • r
    • 文件:允許打開並讀取文件內容
    • 目錄:允許列出目錄中的內容,前提是目錄必須設置了可執行屬性(x)
  • w
    • 文件:允許寫入文件內容或截斷文件。但是不允許對文件進行重命名或刪除,重命名或刪除是由目錄的屬性決定的
    • 目錄:允許在目錄下新建、刪除或重命名文件,前提是目錄必須設置了可執行屬性(x)
  • x
    • 文件:允許將文件作為程序來執行,使用腳本語言編寫的程序必須設置為可讀才能被執行
    • 目錄:允許進入目錄,例如:cd directory

下面是許可權屬性的一些例子:

  • -rwx------:一個普通文件,對文件所有者來說可讀、可寫、可執行。其他人無法訪問
  • -rw-------:一個普通文件,對文件所有者來說可讀可寫。其他人無法訪問
  • -rw-r--r--:一個普通文件,對文件所有者來說可讀可寫,文件所有者的組成員可以讀該文件,其他所有人都可以讀該文件
  • -rwxr-xr-x:一個普通文件,對文件所有者來說可讀、可寫、可執行。也可以被其他的所有人讀取和執行
  • -rw-rw----:一個普通文件,對文件所有者以及文件所有者的組成員來說可讀可寫
  • lrwxrwxrwx:一個符號鏈接,符號鏈接的許可權都是虛擬的,真實的許可權應該以符號鏈接指向的文件為準
  • drwxrwx---:一個目錄,文件所有者以及文件所有者的組成員可以訪問該目錄,並且可以在該目錄下新建、重命名、刪除文件
  • drwxr-x---:一個目錄,文件所有者可以訪問該目錄,並且可以在該目錄下新建、重命名、刪除文件,文件所有者的組成員可以訪問該目錄,但是不能新建、重命名、刪除文件

3. chmod - 更改文件許可權

更改文件的許可權有兩種表示方法,一種是用數字表示許可權,另一種是用 rwx 表示許可權。為了說明怎麼用數字表示許可權,我們得先來了解一下八進位。

3.1. 八進位

八進位(以 8 為基數)及其親戚十六進位(以 16 為基數)都是數字系統,通常被用來表示計算機中的數字。我們人類,因為(或者至少大多數人)天生有 十個手指的事實,利用以 10 為基數的數字系統來計數。計算機,從另一方面講,生來只有一個 手指,因此它以二進位(以 2 為基數)來計數。它們的數字系統只有兩個數值,0 和 1。 因此在二進位中,計數看起來像這樣:

0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011…

在八進位中,逢八進一,用數字 0 到 7 來計數,像這樣:

0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21…

十六進位中,使用數字 0 到 9,加上大寫字母」A」到」F」來計數,逢 16 進一:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13…

雖然我們能知道二進位的意義(因為計算機只有一個手指),但是八進位和十六進位對什麼好處呢? 答案是為了人類的便利。許多時候,在計算機中,一小部分數據以二進位的形式表示。 以 RGB 顏色為例來說明。大多數的計算機顯示器,每個像素由三種顏色組成:8 位紅色,8 位綠色, 8 位藍色。這樣,一種可愛的中藍色就由 24 位數字來表示:

010000110110111111001101

我不認為你每天都喜歡讀寫這類數字。另一種數字系統對我們更有幫助。每個十六進位 數字代表四個二進位。在八進位中,每個數字代表三個二進位數字。那麼代表中藍色的 24 位二進位能夠壓縮成 6 位十六進位數:

436FCD

因為十六進位中的兩個數字對應二進位的 8 位數字,我們可以看到 "43" 代表紅色,"6F" 代表綠色,"CD" 代表藍色。

現在,十六進位表示法(經常叫做「hex」)比八進位更普遍,但是我們很快會看到,用八進位 來表示 3 個二進位數非常有用處…

通過八進位表示法,我們使用八進位數字來設置所期望的許可權模式。因為每個八進位數字代表了 3 個二進位數字,這種對應關係,正好映射到用來存儲文件模式所使用的方案上。下圖展示我們所要表達的意思:

現在我們要改變某個文件或者目錄的許可權,只需要輸入:chmod + 三位二進位 + 文件或者目錄名 即可。

3.2. 通過字元改變許可權

chmod 命令支持一種符號表示法,來指定文件模式。符號表示法分為三部分:更改會影響誰, 要執行哪個操作,要設置哪種許可權。通過字元 「u」、「g」、「o」和 「a」 的組合來指定 要影響的對象,如下所示:

  • u:"user" 的簡寫,意思是文件或目錄的所有者
  • g:用戶組
  • o:"others" 的簡寫,意思是其他所有的用戶和用戶組
  • a:"all" 的簡寫,是 "u", "g"和 "o" 三者的聯合

如果沒有指定字元,則假定使用 "all"。執行的操作可能是一個「+」字元,表示加上一個許可權, 一個「-」,表示刪掉一個許可權,或者是一個「=」,表示只有指定的許可權可用,其它所有的許可權被刪除。

許可權由 「r」、「w」和 「x」 來指定的實例:

  • u+x:為文件所有者添加可執行許可權
  • u-x:刪除文件所有者的可執行許可權
  • +x:為文件所有者,用戶組,和其他所有人添加可執行許可權。 等價於 a+x
  • o-rw:刪除其他人的讀許可權和寫許可權
  • go=rw:給文件所屬的組和文件所屬者/組以外的人讀寫許可權。如果文件所屬組或其他人已經擁有執行的許可權,執行許可權將被移除
  • u+x,go=rw:給文件擁有者執行許可權並給組和其他人讀和寫的許可權。多種設定可以用逗號分開

4. umask - 設置默認許可權

當創建一個文件時,umask 命令控制著文件的默認許可權。umask 命令使用八進位表示法來表達從文件模式屬性中刪除一個位掩碼。我們可以在終端輸入 umask 命令來查看默認值:

chaojun@ubuntu:~$ umask
0022
chaojun@ubuntu:~$

可以看到,Ubuntu 18.04 默認的 umask 是 0022,這個值代表的意思就是我們在創建文件和目錄的時候,默認的許可權要去掉掩碼為 1 的位,0022 表示成二進位是:000 000 010 010,去掉為 1 的位上的許可權,這裡先忽略前面的三個 0,這涉及到特殊的許可權,我下篇文章介紹。當我們創建文件或者目錄的時候,如果沒有掩碼,也就是 umask = 0000 的時候,文件或者目錄的許可權是:-rw-rw-rw-,這個可以通過先執行 umask 0000 命令,然後再新建一個文件來驗證。

-rw-rw-rw- 這個許可權被稱為原始許可權,現在我們執行:umask 0022 將掩碼恢復默認,然後在新建一個文件,這時在原始許可權的基礎上去掉掩碼為 1 的位上的許可權,也就是 -rw-rw-rw- 所對用的二進位數:110 110 110,去掉後就變成了:110 100 100。所以 Ubuntu 18.04 上,默認我們創建的文件或者目錄的許可權就是:-rw-r--r--

你可能會在表示許可權的字元中除了 r、w、x,還會看到一些特殊的字元:s、t。這個我下篇文章再介紹了,不然篇幅太長了,大家看著也累。

5. 切換用戶

有的時候,我們需要具有另一個用戶的身份。比如我們想要得到超級用戶特權,來執行一些管理任務,有時也需要變成另一個普通用戶,比如說測試一個帳號。 有三種方式,可以擁有多重身份:

  • 註銷系統並以其他用戶身份重新登錄系統
    • 這個註銷登錄其他用戶和 Windows 是差不多的,所以這裡就不介紹了。
  • 使用 su 命令
    • 比如我們要切換到其他用戶,使用 su + 用戶名 這個命令,需要輸入要切換成為的那個用戶的用戶密碼,切換過去完成了相應的任務想要退出那個用戶重新回到之前的用戶可以使用 exit 命令退出
  • 使用 sudo 命令
    • sudo 命令主要是使用 root 用戶來執行命令,命令格式是:sudo + 命令,比如:sudo apt update 就是使用 root 用戶的許可權來更新軟體索引,這裡值得注意的是,使用 sudo 的時候需要輸入的密碼不是 root 用戶的密碼,而是當前用戶的密碼。

6. chown 和 chgrp

這兩個命令參考前面的文章:Linux 文件許可權介紹

7. 更改用戶密碼

我們可以使用 passwd 命令,來設置或更改用戶密碼。命令語法:passwd [user]。只要輸入 passwd 命令,就能更改當前用戶的密碼。shell 會提示你輸入你的舊密碼和你的新密碼。大家可以試試,按照提示修改自己的用戶密碼。

8. 拓展閱讀

  • adduser
  • useradd

以上這兩個個命令的使用可以閱讀:Linux 用戶管理

歡迎關注知乎專欄:Linux 漫遊之旅,歡迎關注微信公眾號:Linux 漫遊之旅,免費提供 CSDN 下載服務。

推薦閱讀:

TAG:Linux | 許可權管理 | Ubuntu入門 |