計算機出現之初,它的作用就是幫助我們完成重複而枯燥的任務,因為它太擅長干這樣的事情了,而且看起來似乎是任勞任怨的。真的是這樣的嗎?在早期,計算機罷工大多數時候是因為硬體或者軟體出問題了,是真的沒辦法繼續工作了。而現在,計算機罷工又多了一個很重要的因素,那就是由於計算機安全上的因素造成的,如果你的系統許可權不嚴謹,系統或者軟體有漏洞就可能會被黑客利用,然後你的計算機就可能人為的罷工了。
今天我們就一起來系統的學學 Linux 系統上一些和許可權相關的知識,通過這些知識的學習,我們平時在使用 Linux 系統的時候就可以規範我們的操作,盡量避免系統處在危險之中。今天主要學習的內容如下:
我們在使用一些命令的時候,shell 可能會提示我們沒有許可權訪問。從使用 Linux 系統到現在,你一定遇到過下圖中類似的提示。
其實這些提示的意思就是作為一個普通用戶,沒有許可權來讀取這些文件。那許可權到底是個什麼東西呢?先別急,聽我慢慢道來。
一個用戶可以擁有文件和目錄。當一個用戶擁有一個文件或目錄時, 用戶對這個文件或目錄就有訪問許可權和控制許可權。用戶又會屬於一個由一個或多個用戶組成的用戶組,用戶組成員對這些文件和目錄的許可權由文件和目錄的所有者授予。除了對一個用戶組授予許可權之外,文件所有者可能會給其他用戶或者用戶組成員一些許可權。
上圖展示了 id 命令的使用和輸出結果,從輸出結果中,我們能獲取到一些重要的信息。
id
chaojun
在這裡用戶是 chaojun,用戶數組是 chaojun,其他就很多了,有 adm、cdrom、sudo 等等。
對於文件和目錄的訪問權力是根據讀訪問、寫訪問和執行訪問來定義的。我們來看看 ls -l test.txt 這個命令的執行結果(注意:test.txt 是我自己創建的一個文件,你可以把它換成你自己的文件)。
ls -l test.txt
test.txt
-rwx------ 1 chaojun chaojun 6375 11月 27 10:57 test.txt
這行內容的前十個字元是文件的屬性。這十個字元的第一個字元表明文件類型。下表是經常看到的文件類型(還有其它的,不常見類型):
-
d
l
c
b
剩下的九個字元叫做文件模式,代表著文件所有者、文件組所有者和其他人的讀、寫和執行許可權。
當設置文件模式後,r、w和x 模式屬性對文件和目錄會產生以下影響:
cd directory
下面是許可權屬性的一些例子:
-rwx------
-rw-------
-rw-r--r--
-rwxr-xr-x
-rw-rw----
lrwxrwxrwx
drwxrwx---
drwxr-x---
更改文件的許可權有兩種表示方法,一種是用數字表示許可權,另一種是用 rwx 表示許可權。為了說明怎麼用數字表示許可權,我們得先來了解一下八進位。
rwx
八進位(以 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 個二進位數非常有用處…
八進位(以 8 為基數)及其親戚十六進位(以 16 為基數)都是數字系統,通常被用來表示計算機中的數字。我們人類,因為(或者至少大多數人)天生有 十個手指的事實,利用以 10 為基數的數字系統來計數。計算機,從另一方面講,生來只有一個 手指,因此它以二進位(以 2 為基數)來計數。它們的數字系統只有兩個數值,0 和 1。 因此在二進位中,計數看起來像這樣:
因為十六進位中的兩個數字對應二進位的 8 位數字,我們可以看到 "43" 代表紅色,"6F" 代表綠色,"CD" 代表藍色。
通過八進位表示法,我們使用八進位數字來設置所期望的許可權模式。因為每個八進位數字代表了 3 個二進位數字,這種對應關係,正好映射到用來存儲文件模式所使用的方案上。下圖展示我們所要表達的意思:
現在我們要改變某個文件或者目錄的許可權,只需要輸入:chmod + 三位二進位 + 文件或者目錄名 即可。
chmod + 三位二進位 + 文件或者目錄名
chmod 命令支持一種符號表示法,來指定文件模式。符號表示法分為三部分:更改會影響誰, 要執行哪個操作,要設置哪種許可權。通過字元 「u」、「g」、「o」和 「a」 的組合來指定 要影響的對象,如下所示:
如果沒有指定字元,則假定使用 "all"。執行的操作可能是一個「+」字元,表示加上一個許可權, 一個「-」,表示刪掉一個許可權,或者是一個「=」,表示只有指定的許可權可用,其它所有的許可權被刪除。
許可權由 「r」、「w」和 「x」 來指定的實例:
u+x
u-x
+x
o-rw
go=rw
u+x,go=rw
當創建一個文件時,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 0000
-rw-rw-rw- 這個許可權被稱為原始許可權,現在我們執行:umask 0022 將掩碼恢復默認,然後在新建一個文件,這時在原始許可權的基礎上去掉掩碼為 1 的位上的許可權,也就是 -rw-rw-rw- 所對用的二進位數:110 110 110,去掉後就變成了:110 100 100。所以 Ubuntu 18.04 上,默認我們創建的文件或者目錄的許可權就是:-rw-r--r--。
umask 0022
你可能會在表示許可權的字元中除了 r、w、x,還會看到一些特殊的字元:s、t。這個我下篇文章再介紹了,不然篇幅太長了,大家看著也累。
有的時候,我們需要具有另一個用戶的身份。比如我們想要得到超級用戶特權,來執行一些管理任務,有時也需要變成另一個普通用戶,比如說測試一個帳號。 有三種方式,可以擁有多重身份:
su + 用戶名
exit
sudo + 命令
sudo apt update
這兩個命令參考前面的文章:Linux 文件許可權介紹
我們可以使用 passwd 命令,來設置或更改用戶密碼。命令語法:passwd [user]。只要輸入 passwd 命令,就能更改當前用戶的密碼。shell 會提示你輸入你的舊密碼和你的新密碼。大家可以試試,按照提示修改自己的用戶密碼。
passwd [user]
以上這兩個個命令的使用可以閱讀:Linux 用戶管理
歡迎關注知乎專欄:Linux 漫遊之旅,歡迎關注微信公眾號:Linux 漫遊之旅,免費提供 CSDN 下載服務。
推薦閱讀:
TAG:Linux | 許可權管理 | Ubuntu入門 |