文章目錄
- 一、權限的認識
- 二、linux的權限本質
- 三、linux的用戶
- su指令
- sudo提權
- 四、linux角色
- 五、文件權限屬性
- 六、修改權限的指令操作
- chmod指令(權限只會驗證一次)
- chown/chgrp指令
- 修改文件權限的八進制方案
- 七、文件類別詳解
一、權限的認識
- 什么是權限?
生活中處處都有權限,本質就是你要做一件事能還是不能的問題,有權限就能做,沒權限就算你想做也不能做- 為什么linux要有權限?
首先linux是一款多用戶的操作系統,也就意味著可能同時會有多個人來進行登陸訪問,如果一個用戶可以隨意讀取或修改其他用戶的文件,不就亂套了,所以權限本質就是為了更好的用戶管理。
二、linux的權限本質
在linux下權限=人+文件屬性,第一次聽可能很難理解,小編會在接下來的介紹中慢慢讓大家接受并理解的。
權限是針對特定的群體的,也就是是與人就關,在linux下有兩類人:普通用戶和root。
人訪問的目標主體要具備天然的屬性才能訪問,比如你在現代2025年就不能成為秦始皇去騎北極熊。在linux中由于一切皆文件,所以linux下的目標主體當然就是文件,文件一般具有三個屬性:可讀、可寫、可執行,如果用戶有讀一個文件的權限,但是文件本身沒有可讀屬性,那也讀不了。
所以你就通過設定文件特定的屬性,來約束特定的群體具有特定的權限。
三、linux的用戶
在linux中,用戶一般分為兩類,一類是超級用戶root,在99%的情況下不受權限的約束,屬于linux系統中的特權級別,一類是普通用戶,會受到一定的約束。
su指令
該指令可以實現root用戶與普通用戶之間互相切換。 su 用戶名
指令就可以切換到目標用戶,root切換到普通用戶是直接切換,不需要密碼普通用戶若想切換為root需要輸入root用戶的密碼。這里還有一個快捷熱鍵,ctrl+d可以切換回上一個用戶。
除了上面指令可以切換外,直接 su 也可以由普通用戶切換為root,因為普通用戶可以由多個,但是root只有一個,所以su默認就是切換到root。 還有一個指令su -,也可以完成由普通用戶到root的切換,它和上面兩個指令的區別是它會以目標用戶重新登陸的方式切換,上面兩個指令只是切換用戶身份,不進行二次登陸所以不改變當前路徑。
su也可以普通用戶與普通用戶之前切換,這種方式需要輸入登陸目標的用戶的密碼。
sudo提權
這里有一個場景,普通用戶想安裝軟件,安裝軟件本質就是將文件拷貝到指定系統的指定路徑下,而大多數情況操作系統不會讓普通用戶拷貝,只有root能拷貝,那這意味著只有root才能安裝軟件?這樣顯然與我們常識相背,所以linux支持讓普通用戶短暫提高權限,也就是sudo提權。示例如下:
總結:sudo是一條能讓普通用戶的指令進行短暫提權的指令。
這里我想讀者應該和小編第一次接觸這個知識一樣,sudo是輸入的普通用戶自己的密碼,(這里輸入自己的密碼是合適的,因為sudo是讓普通用戶能短暫提權,如果要輸入root的密碼那sudo也需要管理員來操作,那和切換到root賬號就沒有本質區別了)那我每隔一定時間sudo一次,那我一直都有root的權限,那root不就形同虛設了嗎?
所以linux有一個規定,普通用戶默認是不能sudo提權的,(虛擬機除外)普通用戶sudo報錯如下:
我們看到是因為普通用戶沒在一個叫做sudoers的文件里,sudoers是一個只能由root訪問修改的屬于root的配置文件,該文件相當于linux系統里的白名單,只有在該白名單里的用戶可以進行sudo提權,普通用戶默認是不在這個白名單里的,只有root把該用戶添加到了這個白名單他才能sudo。所以以后文件被惡意修改后也只能是白名單里的用戶操作的,可以縮小追查范圍。
四、linux角色
在現實世界,一個人所擁有的權限是由這個人的角色決定的,比如校長叫張三,他能開除學生學籍不是因為他是張三,而是因為他是校長這個角色,所以我們可以認為權限是依附于角色的。
在linux系統里存在三種角色,一種是文件的擁有者(owner),一種是所屬組(group),一種是其他(other)。下面我們以hello.c文件為例來講解:
用ll指令查看文件屬性只會顯示文件的擁有者和所屬組,不會顯示other,因為識別出用戶既不是擁有者也不是所屬組那么他就是other。
那么角色和我們前面 介紹的用戶有什么關系呢,相信大家都能猜個7788,答案是角色是由用戶來扮演的。
文件的擁有者是指文件是由誰創建的,該文件屬于誰,我相信這很好理解,但是所屬組小編認為有必要詳細解釋一下:
如果文件角色只有owner和other的話,組長想看你寫的代碼那你只能開放other權限,就相當于你對所有other都開放了權限可以看你的代碼,就有可能讓其他組的競爭對手看到你的代碼。所以linux引入了所屬組,因為組長肯定在組內,只要把組權限放開組長就能看了。所屬組的存在就是方便對文件權限進行局部范圍組級別的管理。
五、文件權限屬性
文件的常見權限有三個:r(讀),w(寫),x(可執行)。
我們看上圖,文件權限也會顯示在文件詳細屬性里,其中r w x權限順序固定無法修改,以r為例,若該文件可讀則顯示r,若不可讀則顯示-。
我們現在就可以將用戶、角色、文件屬性結合到一起來表達一個文件的權限,以test.c為例:
test.c文件的擁有者是root,所屬組也是root,該文件的擁有者對應的權限是可讀可寫不可執行,該文件的所屬組對應的權限是可讀不可寫不可執行,other沒在這里體現出來,該文件other對應的權限的可讀不可寫不可執行。
注意:文件具有可執行權限不代表該文件可以被執行,文件想要被執行需要兩個條件:文件本身是可執行文件且該文件有可執行權限
六、修改權限的指令操作
我們前面介紹過權限=人+文件屬性,所以要修改一個文件的權限可以從兩方面入手,一是修改文件的角色,二是修改特定角色的權限。
chmod指令(權限只會驗證一次)
我們先來介紹修改文件屬性的指令操作,只有root或文件的擁有者可以修改文件權限,(但是文件的擁有者無法更改文件的擁有者和所屬組,后面再細講)chmod就是修改文件屬性的指令,具體用法如下:
只有普通用戶才受文件權限的約束,root是不受文件權限的約束的,所以這也可以印證之前介紹的root是linux系統中的特權。
下面我們再看一個例子:
當我們把user的讀寫權限去掉后,那么在扮演user的用戶就算還扮演文件的所屬組,他也無法具有所屬組擁有的權限了,這就間接證明了一個結論:當用戶訪問文件時,確定自己相對文件的身份角色,只會驗證一次,也就是說,權限只會驗證一次。
下面我們用指令chown來直接證明。
chown/chgrp指令
chown可以更改文件的擁有者,chgrp可以更改文件的所屬組,下面這個例子可以證明權限只會驗證一次:
由于現在test.txt文件的擁有者被改為了root,所以whb就會被驗證為所屬組,所屬組就有對應的讀寫權限。
chown還可以通過以下指令同時更改文件的擁有者和所屬組:
這里小編還想仔細聊聊有關修改文件對應角色的用戶的問題:
1、首先文件的角色是不能被修改的,也就是無法修改ll后顯示出來的文件屬性的那個特定位置代表的角色和權限,只能修改角色下的用戶,也就是修改擁有者或者所屬組是誰。
2、沒有修改文件other的指令,因為修改擁有者和所屬組就是在變相修改other。
3、文件的擁有者只能更改文件的屬性,但是他不能更改文件的擁有者和所屬組。因為把文件的擁有者和所屬組修改為別人或者別組需要征得別人的同意,但是再linux中我們無法征得別人同意,所以要把文件的擁有者和所屬組修改為別人需要超級用戶的權限,也就是直接用root修改或者sudo提權修改。
修改文件權限的八進制方案
我們知道文件的一個角色有三種權限,是否有權限可以被看作數字1和0,有權限為1,沒有權限為0,所以一個角色的的權限就有8種可能,我們可以用數字0~7來表示這8種可能,我們就可以用這樣的8進制方案來修改文件屬性:
七、文件類別詳解
之前我們已經接觸過了普通文件(-),和目錄(d),其實linux中的文件不止這兩類,下面我們來詳細認識一下有哪些文件和文件對應的特點:
- 普通文件( - ): 如源代碼、文本、動靜態庫、可執行
- 目錄( d ):
- 鏈接文件( l )
- 管道文件( p )
- 字符文件( c ): 如鍵盤、顯示器,它必須按順序輸入輸出,不支持隨機讀寫,以字節為單位,這種文件都是以字符的形式輸入輸出,比如輸出一個1234到顯示器上,是用printf或cout格式化輸出,以字符’1‘’2‘’3‘’4‘顯示在顯示器上
- 塊設備文件( b ): 如磁盤, 它支持隨機隨機讀寫,以塊(4kb)為單位
以上就是小編分享的全部內容了,如果覺得不錯還請留下免費的關注和收藏如果有建議歡迎通過評論區或私信留言,感謝您的大力支持。
一鍵三連好運連連哦~~