Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

程式設計師聯盟發表於2019-01-23

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

-- 作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第二部分第五課:使用者和許可權,有權就任性
  2. 第二部分第六課預告:Nano文字編輯器和終端配置

使用者和許可權,有權就任性


上一課 Linux探索之旅 | 第二部分第四課:檔案操縱,股掌之中 中,我們學了不少很有用的基礎知識。

今天的標題也挺任性的,小編自認是一個很本分的人(真的嗎?),起這種標題也是“情非得已”。

第二部分的前幾課我們講解了終端,命令列,檔案和目錄,檔案操作。都算是Linux的重要基礎。

這一課我們來講一個極為重要的內容,可以說是Linux基礎中的重點:使用者和許可權。

我們知道Linux是一個多使用者系統,所以可以實現多人同時不同地登入一個Linux系統,而每個人有不同的許可權,這些許可權規定了每個人能夠做什麼,不能夠做什麼。

就好比一個市政廳,雖然可以有很多人同時在裡面辦公,但是不同層級的人能夠做的事是不一樣的。

正因為多使用者這個特性,所以更要嚴加管理每個使用者,以防止互相干擾,甚至越權行為。因為萬一有居心叵測的使用者擁有了高度許可權,對所有使用者豈不是一種威脅麼。

所以,Linux系統中的每個使用者都有自己獨立的賬號,而且其賬號受著許可權的制約。

是不是覺得躍躍欲試,我保證這一課會很有意思的。而且再提一次,這一課極為重要!

sudo命令:以root身份執行命令


在我們安裝Ubuntu系統的時候,到了最後幾步,安裝程式會讓我們建立自己的使用者名稱。比如,小編就建立了名為oscar的使用者。

在大多數的Linux發行版中(Ubuntu是一個Linux發行版),我們都建議初學者建立一個有限權利的賬戶。小編的oscar這個使用者就是有限許可權的賬戶。

也許你會問:“等一下,有沒有搞錯?這個Linux系統是我安裝的,我還不能想幹什麼就幹什麼了?為什麼我的權利是有限的?那我還怎麼任性啊?”

是的,而且這是一種安全機制。當然了,當我們在終端中使用命令列的時候,我們隨時可以說:我想要切換到什麼都可以做的使用者的身份。但是,預設情況下,我們是沒有為所欲為的許可權的,這會比較安全。

因為有些命令會對Linux系統的穩定性和安全性造成威脅。具有有限的許可權,意味著我們不能隨隨便便就執行一些可怕的命令,例如那個“草木為之含悲,風雲因而變色”的命令:

rm -rf /複製程式碼

我們在上一課講過,rm -rf / 這個命令會刪除你的所有東西。所以江湖上人人聞之色變,除了顫抖還是顫抖。

接下來,我們先了解一下Linux中使用者是如何組織的,然後再來學習如何變身為超級使用者。

Linux下的使用者組織


在Linux中,理論上說來,我們可以建立無數個使用者。但是這些使用者是被劃分到不同的群組裡面的。

有一個使用者,名叫root,是一個很特殊的使用者。字大管家,號超級使用者,江湖諢號“有錢任性”。因為在Linux系統中,它可以做任何事情。

我們用下圖來演示一下Linux中的使用者組織的一般可能形式:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

上圖中的群組,可以有好多不同的,我們舉了“家人”和“朋友”兩個例子而已。

在我們裝完Linux系統後,假如我們建立的個人使用者叫做oscar,那麼這時系統中只有兩個使用者:root和oscar。

root使用者是預設會建立的,因為是系統的大管家,超級使用者。

oscar則是小編自己建立的使用者。

我們只在必要時才會切換為root身份。這一課中你將學習到的幾個命令須要root身份才能執行。

其他時候,我們都是用有限許可權的使用者:oscar(當然,這是小編的情況,你的個人使用者可能叫xiaoming)。

這一簡單的保護措施大大地提高了Linux系統的安全性,有效防止誤操作或是病毒的攻擊。因為如果你是以個人使用者身份登入系統,被病毒控制了電腦,那麼它也只能做有限的事,不能為所欲為。但假如你以root使用者登入系統,那麼劫持你的病毒就可以胡作非為了,甚至毀了你的系統。

在Windows系統中,預設是以系統大管家或管理員賬戶登入,叫做Administrator。這也是Windows系統較Linux系統更加容易被病毒攻擊得逞的原因。

例外:Ubuntu系統是Linux系統中一個特例,它預設不允許以root使用者登入系統。root使用者存在,但是你不能直接登入。我們接下來會學習如何間接登入root。Ubuntu的開發者解釋說他們考慮到對於初學者,能登入root使用者太危險。

祕:但其實我們還是可以通過設定來允許Ubuntu直接登入root的。自己可以百度/Google。我就不把此方法告訴大家了,免得毀了系統來扔我雞蛋。

sudo命令:暫時成為root


預設地,我們是以個人使用者身份登入Ubuntu系統。在小編的情況,是oscar這個使用者。

在Ubuntu中預設不允許在開機時直接以root使用者登入,那麼我們要如何來執行一些只有root才有權利執行的命令呢?

別擔心,我們可以使用sudo這個命令暫時成為root,當一天的皇帝也是很開心的嘛。

sudo是英語Substitute User DO的縮寫,substitute是“替換,代替,替身”的意思,user是“使用者”的意思,do就是“做”的意思。所以連在一起就是“替換使用者來執行...”的意思。

因此,如果我們要執行只有root才可以執行的命令,那麼可以在此命令前面加上sudo命令,如下:

sudo command複製程式碼

終端會提示你輸入密碼,至少第一次會要求輸入密碼。此密碼就是你個人使用者的密碼,在小編的情況,就是我的oscar這個賬戶的密碼。

比如,我們可以用sudo命令配合date命令執行一下(放心,執行date命令不會有什麼危險):

sudo date複製程式碼

可以看到,在我們輸入 sudo date後,回車,終端要求我們輸入個人使用者的密碼,就是那一行:

[sudo] password for oscar:複製程式碼

意思是輸入oscar這個使用者的密碼(password是英語“密碼”的意思)。

小編輸入了oscar賬戶的密碼,雖然輸入密碼時是看不到任何字元的,這是為了安全。

輸入密碼之後,回車,date命令的執行結果就顯示給我們了,還記得我們的date命令麼?是的,它用於顯示當前日期和時間。

當然了,date這個命令並一定要是root使用者才能執行,所以沒什麼特別,只是給大家一個印象,如何用sudo命令暫時切換為root身份。

sudo su命令:一直成為root


有的人當一天皇帝就知足了,但有的人想要當得更久一些,甚至《向天再借五百年》,怎麼辦呢?

只需要使用 sudo su 這個組合命令,就可以一直成為root使用者了。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

終端會要求我們輸入個人使用者的密碼,就是那一行:

[sudo] password for oscar:複製程式碼

可以看到,執行了sudo su之後,我們的命令列提示符從 oscar@oscar-laptop:~$ 變成了 root@oscar-laptop:/home/oscar#

如果你還記得我們在命令列那一課裡講到的如何閱讀命令列提示符,你就會很容易明白此時我們已經完成了“屌絲逆襲”:

從oscar升級為root使用者了!(從第一個root可以看出,還有結尾處的#也表明此時是root身份)。

這個時候就要小心了,因為此時你已經可以為所欲為了。

當然了,如果你感覺有點不適應,訝異於幸福來得太突然,還留戀屌絲的身份,那麼可以退出root使用者,重新回到個人使用者身份,用 exit命令就可以完成(exit是英語“退出,離開”的意思):

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,當我們身為root時,只要執行exit命令,就隨時可以回到個人使用者。

在Ubuntu以外的其他Linux發行版,也許切換到root賬戶,不是用sudo su,而是隻需要su就可以了。當然我們比較建議再加一個橫線,用

su -複製程式碼

這樣不僅能切換為root,還可以直接定位到root的家目錄。而且可以直接使用root才能用的那些命令。

使用者管理的命令


既然你已經學會了如何暫時或一勞永逸地成為root使用者,那麼我們就可以來學習一些只有root使用者才能執行的命令了。

adduser命令就是其中之一。

adduser命令:新增新使用者


adduser這個命令,我們很容易理解其作用,因為完全可以顧名思義:add是英語“新增”的意思,user是英語“使用者”的意思,因此adduser就是用於新增使用者。

用法也很簡單,adduser命令後接我們要建立的使用者名稱。

如果你使用你的個人使用者身份來執行這條命令,終端會提示你沒有許可權:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,我們在oscar這個使用者的身份下,執行 adduser thomas,表示我們想要建立一個新使用者,叫做thomas。

但是不能執行,終端提示“adduser: Only root may add a user or group to the system”。

這句英語翻出來就是“adduser:只有root使用者才能往系統裡新增使用者或群組”。

太看不起人了,我不變身為鋼鐵俠你以為我只是託尼.斯塔克是吧?

所以我只能穿上sudo su這套“鋼衣”,先變身為鋼鐵俠,再來執行adduser thomas這個命令。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,我們成為root之後,執行adduser thomas就沒問題了,顯示thomas使用者被新增,使用者名稱是thomas,群組是thomas,建立/home/thomas這個thomas的家目錄,然後終端命令停在這一行:

Enter new UNIX password:複製程式碼

意思是“請為thomas這個使用者建立一個密碼”。

我們隨便填寫,然後回車,會讓我們再輸入一遍密碼確認。然後接著是一些配置資訊,比如thomas這個使用者的全名,房間號,工作電話,家庭電話,其他。我們通通可以不填寫,用Enter鍵略過,到了最後終端會提示:

Is the information correct ? [Y/n]複製程式碼

意思是“以上這些資訊都正確嗎?[正確請輸入y/不正確輸入n]”。

我們輸入y,回車。thomas使用者就正式建立好了。可以看一下此時/home目錄裡的內容,發現多了一個 thomas 目錄。也就是thomas這個使用者的家目錄。如下圖:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

passwd命令:修改密碼


如果之後你對設定的密碼不滿意,那麼可以用passwd命令來修改當前密碼。

passwd命令是password這個英語單詞的縮寫,表示“密碼”。

用法也類似adduser,只要在其後加上需要修改密碼的那個使用者名稱,例如:

passwd thomas複製程式碼

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

Enter new UNIX password的意思是“輸入新的密碼”

Retype new UNIX password的意思是“再輸入一遍密碼”

輸入兩次相同的新密碼之後,可以看到提示:password updated successfully,意思是“密碼更新成功”。

deluser:刪除使用者


既然有新增使用者的命令,那麼也一定有刪除賬戶的命令。

是的,我們可以用deluser命令來刪除已建立的賬戶。

deluser是delete和user的縮寫,delete是英語“刪除”的意思,user是“使用者”的意思。

用法同adduser,在後面接你要刪除的使用者名稱。例如:

deluser thomas複製程式碼

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,執行deluser thomas這個命令,終端不會提示你確認是否刪除,而是直接刪除了使用者thomas。

所以,deluser這個命令還是要謹慎使用。

因為如果你刪除的是你的個人使用者,例如小編的情況,假如我 deluser oscar。

那麼就會陷入囧境:在下次系統啟動時你就不能以oscar登入了,而Ubuntu預設又不允許root登入,你就會不知所措了。

單單用deluser命令,不加引數的話,只會刪除使用者,但是不會刪除在/home目錄中的使用者家目錄。如果你想要連此使用者的家目錄也一併刪除,可以加上 --remove-home 這個引數,如下:

deluser --remove-home thomas複製程式碼

這樣,不僅刪除了thomas這個使用者,連/home/thomas這個目錄也會刪除。

注意:adduser和deluser命令只是Debian一族(包括Ubuntu)才有的命令。其他的LInux發行版,一般來說,新增使用者和刪除使用者是用useradd和userdel命令。
而且,用useradd新增使用者之後,在預設的情況下,該賬號是暫時被封鎖的, 也就是說,該賬號是無法登入,須要用passwd命令來給新建立的使用者設定密碼之後才可以使用。

群組管理的命令


在這課的開頭,我們說了,Linux中每一個使用者都屬於一個特定的群組。

那你要問了:“那麼我們剛才建立的thomas是屬於哪個群組呢?我們以前建立的個人使用者oscar又屬於哪個群組呢?我們之前都沒配置呀。”

事實上,如果你不設定使用者的群組,那麼它預設會建立一個和它的使用者名稱一樣的群組,並且把使用者劃歸到這個群組。

我們可以用ls -l命令來看一下/home目錄下的內容:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,我們的oscar使用者和thomas使用者的家目錄分別是/home/oscar和/home/thomas。

在每一行的各列都有不同意義,我們之前的課程裡有講解過(Linux探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你)。

所以,第三列表示檔案或目錄的所有者,第四列表示檔案或目錄的所在群組。

可以注意到:oscar這個目錄的所有者是oscar,群組是oscar;thomas這個目錄的所有者是thomas,群組是thomas。

我們也注意到其他的兩個:image.bnp這個檔案的所有者是root,群組是root;swaroop這個目錄的所有者是root,群組是root。所以其實root這個群組是存在的,root使用者就屬於這個群組。

但是,把使用者分在不同的群組,到底有何意義呢?

在使用者不多的時候,我們會覺得一個使用者屬於一個群組(比如預設是與使用者名稱相同的群組名)是挺不錯的。但是一旦使用者一多,你可能就想要建立群組了。

我們來學習如何管理群組。當然,群組還有許可權的考量因素,我們這課之後會講許可權。

當然了,群組管理的命令也需要root身份。

addgroup:建立群組


addgroup是add和group的縮寫,add是英語“新增”的意思,group是英語“群組”的意思。所以addgroup命令用於新增一個新的群組。

用法也很簡單,和adduser命令類似,後接需要建立的群組名。例如:

addgroup friends複製程式碼

建立一個名為friends的群組,friends是英語“朋友”的意思,也是美劇《老友記》,哈哈。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

在上圖中,我們看到,用addgroup命令建立了一個新的群組,名叫friends,而且成功了。Done是英語“完成”的意思。

很不錯,不過目前friends這個群組還是空的,因為還沒有往裡面新增使用者呢。

usermod命令:修改使用者賬戶


usermod是user和modify的縮寫,user是英語“使用者”的意思,modify是“修改”的意思。usermod命令用於修改使用者的賬戶。

usermod命令有好多引數,可以實現不同的功能。不過我們暫時只需要記得它的兩個引數:

  • -l:對使用者重新命名,但是/home目錄中的使用者家目錄名不會改變,需要手動修改。

  • -g:修改使用者所在群組

用法很簡單,假如我要將thomas這個使用者放到我剛建立的friends這個群組裡,可以這樣寫:

usermod -g friends thomas複製程式碼

我們知道,使用者thomas之前的群組是thomas,預設的。執行完usermod -g friends thomas之後,thomas的群組就會變成friends了,但是在 /home/thomas這個目錄的資訊不變,仍舊顯示群組是thomas。

我們怎麼知道使用者thomas的群組已經改變為friends了呢?

我們可以用groups命令,這個命令可以獲知一個使用者屬於哪個(些)群組。

用法很簡單,後接使用者名稱就可以了,當然使用者要存在才行。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,thomas的群組是friends;root的群組就是root;oscar的群組有好幾個,說明小編加入了很多“組織”。

上圖中,我們確實看到了,/home/thomas這個目錄的資訊沒變,第四列表示群組的依舊是thomas。

當然我們也可以一次將一個使用者新增到多個群組,就用 -G 引數(大寫的G)。用法如下:

usermod -G friends,happy,funny thomas複製程式碼

以上命令把thomas新增到friends,happy和funny三個群組。記得群組名之間要用逗號分隔,而且沒有空格。

注意:使用usermod時要小心,因為配合-g或-G引數時,它會把使用者從原先的群組裡剔除,加入到新的群組。如果你不想離開原先的群組,又想加入新的群組,可以在-G引數的基礎上加上-a引數,a是英語append的縮寫,表示“追加”。例如:

usermod -aG happy thomas複製程式碼

以上命令就把thomas追加到群組happy裡了,這樣thomas就屬於兩個群組:friends和happy

可以用groups命令測試一下。

注意:groups命令如果單獨用,不加任何引數,會顯示當前使用者所在群組。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

記得,追加群組的時候,一定要用大寫的G這個引數,不能用小寫的g這個引數,即使只追加一個群組。

delgroup命令:刪除群組


delgroup是delete和group的縮寫,delete是英語“刪除”的意思,group是英語“群組”的意思。所以delgroup命令用於刪除一個已存在的群組。

用法很簡單,後接想要刪除的群組名:

delgroup happy複製程式碼

就刪除了happy這個群組。

再用groups命令測試,發現thomas只屬於friends群組了。因為happy這個群組被刪除了嘛。

注意:addgroup和delgroup命令只是Debian一族(包括Ubuntu)才有的命令。其他的LInux發行版,一般來說,新增使用者和刪除使用者是用groupadd和groupdel命令。

修改檔案的所有者和群組


只有root使用者可以修改一個檔案的所有者和群組。

比如說,小編自己的使用者oscar的家目錄有一個檔案,file.txt,是我建立的。

我們用ls -l命令來看一下它的資訊:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,file.txt的所有者和群組都是oscar。

現在我決定,把這個檔案轉讓給thomas,也就是讓file.txt的所有者變為thomas,怎麼做呢?

chown命令:改變檔案的所有者


此命令也需要root身份才能執行。

chown是change和owner的縮寫,change是英語“改變”的意思,owner是英語“所有者”的意思。

因此chown命令用於改變檔案的所有者。

用法也很簡單,後接新的所有者的使用者名稱,再接檔名。例如:

chown thomas file.txt複製程式碼

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,用chown命令,把file.txt檔案的所有者改為thomas之後,file.txt的所在群組是不變的,還是oscar。

正所謂“身在曹營心在漢”。那麼如何使它“身在曹營心也在曹營”呢?

就要用到chgrp命令了。

chgrp命令:改變檔案的群組


chgrp是change和group的縮寫,change是英語“改變”的意思,group是英語“群組”的意思。

chgrp命令用於改變檔案的群組。

用法也很簡單,後接新的群組名,再接檔名。例如:

chgrp thomas file.txt複製程式碼

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

好了,這下file.txt的所有者和群組都是thomas了。

其實,chown命令也可以改變檔案的群組,用法如下:

chown thomas:friends file.txt複製程式碼

這句命令就把file.txt這個檔案的所有者改為thomas,群組改為friends了。用法也很簡單,就是在所有者和群組之間用冒號隔開。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

-R引數:遞迴設定子目錄和子檔案


chown命令的-R引數非常有用,還記得以前我們有些命令也會使用-R引數麼?

是的,R是recursive的縮寫,表示“遞迴”。所以如果chown命令配上-R引數,就會使得被修改的目錄的所有子目錄和子檔案都改變所有者(或者連群組也改變,如果用上述冒號的方法來同時修改所有者和群組)。

例如,假如我突然變得“很壞”,想要把使用者thomas的家目錄的所有子目錄和檔案都佔為己有。我可以這麼做:

chown -R oscar:oscar /home/thomas複製程式碼

這樣不但使/home/thomas這個目錄的所有者和群組都變成oscar,而且其子目錄和子檔案也都是如此。

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,/home/thomas都歸我(oscar)所有了。

chmod命令:修改訪問許可權


好了,這一節我們要攻堅這一課最難的部分了:訪問許可權。

許可權的原理


在Linux系統裡,每個檔案和目錄都有一列許可權屬性。這一列訪問許可權指明瞭誰有讀的權利,誰有修改的權利,誰有執行的權利。

我們其實早就見過訪問許可權了,是的,就在我們執行ls -l命令的時候,顯示的每個檔案或目錄的第一列資訊就是訪問許可權。

比如我們在/home/oscar/linux_c目錄下執行ls -l命令試試(當然你可以在你的家目錄或其他目錄執行也可以,因為小編的家目錄東西太多了,比較亂):

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

上圖中檔案資訊的第一列比較複雜,我們可以看到不少 d,r,w,l,x等字母。如果不細分的話,這些我們可以通稱為檔案訪問許可權符。

以下列出我們看到的字母的含義:

  • d:是英語directory的縮寫,表示“目錄”。就是說這是一個目錄。

  • l:是英語link的縮寫,表示“連結”。就是說這是一個連結。

  • r:是英語read的縮寫,表示“讀”。就是說可以讀這個檔案。

  • w:是英語write的縮寫,表示“寫”。就是說可以寫這個檔案,也就是可以修改。

  • x:是英語execute的縮寫,表示“執行,執行”。就是說可以執行這個檔案。

如果x許可權在一個目錄上,那麼表示的是這個目錄可以被讀,也就是可以開啟此目錄來看其子目錄和子檔案,如果它同時有r許可權的話。

如果相應位置有字母,表示有相應許可權;如果相應位置是一個短橫 -,則表示沒有相應許可權。

為什麼我們看到這一排有好多個重複出現的r,w和x呢?

那是因為訪問許可權是按照使用者來劃分的:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

如上圖,除開第一個表示檔案或目錄屬性的符號(此處是d,表示目錄。如果是l,則是連結。還有其他字母,我們暫時不深究。如果是短橫-,那麼是普通檔案。),其他的9個符號被劃分為三組,從左到右分別表示:

  • 第一組rwx表示檔案的所有者對於此檔案的訪問許可權。

  • 第二組rwx表示檔案所屬的群組的其他使用者對於此檔案的訪問許可權。

  • 第三組rwx表示除前兩組之外的其他使用者對於此檔案的訪問許可權。

我們用一個具體的檔案來作為例子分析一下:

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,renamed_file這個檔案的訪問許可權是

-rw-r--r--複製程式碼

我們從左到右來分析這些符號都表示什麼:

  • -:第一個短橫表示這是一個普通檔案。如果此處是d,那麼表示目錄;如果是l,那麼表示連結,等等。

  • rw-:表明了檔案的所有者(此處是oscar)對檔案有讀,寫的許可權,但是沒有執行的許可權。也很好理解,因為這是一個普通檔案,預設沒有可執行的屬性。記住:如果有w許可權(寫的許可權),那麼表明也有刪除此檔案的許可權。

  • r--:表明檔案所在的群組(此處是oscar)的其他使用者(除了oscar之外)只可以讀此檔案,但不能寫也不能執行。“可遠觀而不可褻玩焉”。

  • r--:表示其他使用者(除去oscar這個群組的使用者)只可以讀此檔案,但不能寫也不能執行。

綜上所述,renamed_file這個檔案是一個普通檔案,不是一個目錄,也不是連結檔案,它的所有者oscar可以讀寫它,但不能執行;其他的使用者只能讀。

那麼root呢?對於此檔案root使用者的訪問許可權是什麼呢?

記住:root是超級管家,它有所有許可權,"只有它想不到的,沒有它做不到的"。
它可以讀、寫、執行任意檔案。

chmod命令:修改檔案的訪問許可權


既然我們已經學會了如何檢視和理解檔案的訪問許可權,我們就來學習如何修改檔案的訪問許可權吧。

我們要用到chmod命令,這個命令也是Linux中常用的命令。

畢竟“一朝權傾天下有”,“爭權奪利”誰不喜歡啊。開個玩笑...

開始講解之前,要說明一點,chmod命令不需要是root使用者才能執行。只要你是此檔案的所有者,你就可以用chmod來修改檔案的訪問許可權。

chmod是change和mode的縮寫,change是英語“改變”的意思,mode是“模式”的意思。chmod命令用於修改檔案的各種訪問許可權。

chmod這個命令充滿魅力,因為它的用法不止一種,好像一個千面女郎,令人著迷。

最常見的用法應該是數字式的。

用數字來分配許可權:chmod的絕對用法


我們接下來要做一些加法,大家準備好了嗎?不要讓小學數學老師哭暈在體育辦公室哦。什麼?你的小學數學是語文老師教的,好,算你厲害...

不要怕,只是做一些極為簡單的加法,我們只要心算就可以了。

事實上,Linux系統對每種許可權(r,w和x)分配了對應的數字:

許可權 數字
r 4
w 2
x 1

所以,如果我們要合併這些許可權,就需要做簡單的加法了:將對應的數字相加。

假如我們要分配讀,寫許可權,那麼我們就要用4+2,就等於6。數字6表示具有讀和寫許可權。

以下是可能的組合形式:

許可權 數字 計算
--- 0 0 + 0 + 0
r-- 4 4 + 0 + 0
-w- 2 0 + 2 + 0
--x 1 0 + 0 + 1
rw- 6 4 + 2 + 0
-wx 3 0 + 2 + 1
r-x 5 4 + 0 + 1
rwx 7 4 + 2 + 1

不難吧?

所以,對於訪問許可權的三組(所有者的許可權,群組使用者的許可權,其他使用者的許可權),我們只要分別做加法就可以了,然後把三個和連起來。

例如:640分別表示:

  • 檔案的所有者有讀和寫的許可權。

  • 檔案所在群組的其他使用者具有讀的許可權。

  • 除此之外的其他使用者沒有任何許可權。

因此,我們可以給的最寬泛的許可權就是 777:所有者,群組使用者,其他使用者都有讀,寫和執行的許可權。這樣,所有人就都可以對此檔案“為所欲為”了。

相反,如果許可權是000,那麼沒有人能對此檔案做什麼。當然,除了root,root可以做任何事。

我們現在來修改renamed_file的許可權試試:

chmod 600 renamed_file複製程式碼

Linux 探索之旅 | 第二部分第五課:使用者和許可權,有權就任性

可以看到,我們的renamed_file檔案的訪問許可權被修改為了

rw-------複製程式碼

正好是600。

所以現在只有oscar可以讀和寫此檔案,其他人都不能做什麼。當然,除了root之外。

用字母來分配許可權:chmod的相對用法


除了用數字,我們也可以用另一種方式來分配檔案的訪問許可權:用字母。

原理是類似的,但是有時用字母的方式更加精巧,因為不需要一次性把三組許可權都寫出來。

我們需要知道不同的字母代表什麼:

  • u:user的縮寫,是英語“使用者”的意思。表示所有者。

  • g:group的縮寫,是英語“群組”的意思。表示群組使用者。

  • o:other的縮寫,是英語“其他”的意思。表示其他使用者。

  • a:all的縮寫,是英語“所有”的意思。表示所有使用者。

當然了,和這些字母配合的還有幾個符號:

  • +:加號,表示新增許可權。

  • -:減號,表示去除許可權。

  • =:等號,表示分配許可權。

接下來,我們舉例說明如何使用:

#檔案file.txt的所有者增加讀和執行的許可權。
chmod u+rx file.txt

#檔案file.txt的群組其他使用者增加讀的許可權。
chmod g+w file.txt 

#檔案file.txt的其他使用者移除讀的許可權。
chmod o-r file.txt 

#檔案file.txt的群組其他使用者增加讀的許可權,其他使用者移除讀的許可權。
chmod g+w o-w file.txt 

#檔案file.txt的群組其他使用者和其他使用者均移除讀的許可權。
chmod go-r file.txt 

#檔案file.txt的所有使用者增加執行的許可權。
chmod +x file.txt 

#檔案file.txt的所有者分配讀,寫和執行的許可權;群組其他使用者分配讀的許可權,不能寫或執行;其他使用者沒有任何許可權。
chmod u=rwx,g=r,o=- file.txt複製程式碼

-R引數:遞迴地修改訪問許可權


-R引數可是“死性不改”,上一課可以配合cp命令來遞迴拷貝檔案,這一課又來“搗蛋”:

chmod配合-R引數可以遞迴地修改檔案訪問許可權。

假如我要只允許oscar這個使用者能讀,寫,執行/home/oscar這個目錄的所有檔案(當然,root不算,root可以做任何事),該怎麼做呢?

chmod -R 700 /home/oscar複製程式碼

就是這麼簡單。

終於結束了,長舒一口氣。

總結


  1. 在Linux系統中,每一個使用者都有自己獨立的賬戶。

  2. 使用者是被分組的。

  3. 存在一個超級使用者,也就是一般說的大管家,它有權利做任何事情,它就是root。它有權利安裝軟體,並且對系統設定做修改。

  4. 有一些命令要能執行須要先切換到root身份,我們可以用sudo這個命令來實現此切換。比如以下這些命令就需要在前面再加一個sudo:adduser(用於新增新使用者),deluser(用於刪除使用者),chmod(用於修改檔案的許可權)。

  5. 我們可以用chmod命令來修改檔案的訪問許可權。有三種許可權:r(讀許可權),w(寫許可權)和x(執行許可權)。

第二部分第五課預告


今天的課就到這裡,一起加油吧!

下一課我們學習:Linux探索之旅 | 第二部分第六課:Nano文字編輯器和終端配置


微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”

相關文章