👦個人主頁:Weraphael
?🏻作者簡介:目前正在學習c++和算法
??專欄:Linux
🐋 希望大家多多支持,咱一起進步!😁
如果文章有啥瑕疵,希望大佬指點一二
如果文章對你有幫助的話
歡迎 評論💬 點贊👍🏻 收藏 📂 加關注😍
目錄
- 一、Linux下用戶的分類
- 1.1 用戶切換
- 二、用戶和用戶組
- 2.1 文件擁有者(概念)
- 2.2 用戶組(概念)
- 2.3 其他人(概念)
- 三、文件權限
- 3.1 文件屬性
- 3.2 修改文件權限
- 3.2.1 數字類型修改文件權限
- 3.2.2 符號類型修改文件權限
- 3.3 修改文件所屬組
- 3.4 修改文件擁有者
- 3.5 默認權限
- 3.5.1 權限掩碼
- 四、目錄權限
- 五、粘滯位
- 5.1 引入
- 5.2 如何設置粘滯位
一、Linux下用戶的分類
Linux
下有兩種用戶:超級用戶(root
)、普通用戶
- 超級用戶:基本不權限的約束。命令提示符是
#
- 普通用戶:受權限的約束。命令提示符是
$
1.1 用戶切換
- 普通用戶 ->超級用戶
【命令】
su / su -
【說明】
- 輸入的密碼是超級用戶的密碼
- 退回普通用戶
exit
or 熱鍵Ctrl + d
- 超級用戶 -> 普通用戶
【命令】
su 普通用戶名
【說明】 不要密碼,從這可以看出超級用戶基本不權限的約束
- 普通用戶 -> 另一個用戶
【命令】
su 另一個用戶名
【說明】 密碼需要輸入另一個用戶的密碼
這里就不為大家演示了
- 對某條指令提權(不用轉化
root
)
【命令】
sudo 某條指令
【說明】輸入的是普通用戶的密碼
大家可能會有疑問,我們對指令進行提權,為什么輸入的是普通用戶的密碼?
大家可以先在自己的命令行解釋器輸入sudo 隨便一個指令
,其實目前我們普通用戶沒辦法執行sudo
,因為系統默認不信任你。除非未來將普通用戶添加到系統的信任名單里。由于目前知識有限,后期帶領大家配置。
二、用戶和用戶組
2.1 文件擁有者(概念)
初次接觸Linux
的同學會覺得很怪異,為什么Linux
會有這么多用戶,還分什么用戶組?
其實這個“用戶與用戶組”的功能可是相當健全并且好用的一個安全防護措施。這是因為Linux
是一個多人多任務的系統,因此可能有很多人同時使用同一個服務器來進行開發,這就涉及到每個人的隱私權,有的人不喜歡把自己寫的代碼給別人看(因為自己寫的代碼時常會有bug
,就像每個人的內褲一樣,有漏洞就不喜歡給別人看),因此文件擁有者的角色就顯得相當重要。
2.2 用戶組(概念)
用戶組是最有用的功能之一,就是當你在團隊進行協同開發的時候。舉例來說,假設你和你的舍友一起進入到騰訊實習。你在項目A
組,而你的舍友在項目B
組。這兩個組的項目是王者榮耀,哪個組寫的好就采用哪個組。假設某一天,你的老板要檢查你們組的代碼寫的怎么樣,但不能讓項目B
組看到你們組的文件內容,此時該如何是好?
因此,是不是可以將老板拉入你們組(用戶組),這樣老板能看到整個組的開發進度,而別的組看不到,很方便吧!
這樣說可能還不容易理解。再舉一個例子,假設有一家人,爸爸叫張三,家里有三兄弟,三個人都有自己的房間,并且擁有一個客廳。
- 用戶的意義:由于三兄弟都有自己各自的房間。所以他們不能闖入別人的房間窺視他人的隱私。
- 用戶組的概念:由于客廳是共用的,三兄弟可以在客廳做任何事情,因為大家都是一家人。
這樣說大家應該有點了解了吧!張三家就是所謂的用戶組,至于三兄弟就是用戶,而這三個用戶是在同一個用戶組里。而三個用戶雖然在同一個用戶組內,但是有各自的私人空間,而設置用戶組共享,則可讓大家共同分享。
2.3 其他人(概念)
有一個叫李逵,它是三兄弟中張飛的同班同學,那么李逵就可以通過張飛進入張三的家,也可以通過張飛的同意進入他的房間。因此,李逵就是所謂的其他人(Others
)
因此,我們可以知道,在Linux
里面,任何一個文件都具有用戶(User
)、所屬組(Group
)以及其他人(Other
)三種身份,我們可以將以上的說明用下面的圖來解釋
不過,這里有一個特殊的人物要介紹,那就是神父。神父具有神力,它想干嘛就可以干嘛。不打啞謎了,這個人其實在Linux
中擔任root
。所以要小心,這個root
可是神父!
三、文件權限
3.1 文件屬性
在上篇博客講過,查看文件屬性的指令是ls -al
或者是ll
現在我們來拆分,以上字符串到底是什么意思
第一欄代表文件的類型和權限。這個地方最需要注意,仔細看的話,你應該可以發現這一欄其實有十個字符。
-
第一個字符代表這個文件是目錄或文件等。其中
a.out
的第一個字符是-
,因此是文件。
-
接下來的字符中,以三個位一組,且均為
[rwx]
的三個參數的組合。其中,[r]
代表可讀、[w]
代表可寫、[x]
代表可執行。要注意的是這三個權限的位置不會改變,如果沒有權限,就會出現減號[-]
而已。
- 實際例子
以下我在普通用戶wj
中創建普通文件test.c
并往里頭寫你好 testUser
,并且文件的擁有者和所屬組都是wj
,那么另一個普通用戶testUser
能否看文件呢?
答案是可以的,首先testUser
不是擁有者,也不是所屬組,那就是其他人,而文件test.c
對于其他人的權限只有r--
,因此是可以讀的,但是不能寫
那么現在還有一個問題,超級用戶root
可以讀和寫嗎?
通過以上實驗我們發現,超級用戶可以既可以查看、也可以修改(其實也可以執行,這里就不演示了)。那有的人就很奇怪,root
既不是擁有者,也不是所屬組,怎么可能可以做得到?
別忘了,超級用戶root
可是神父,具有神力,可以掌握一切!
3.2 修改文件權限
文權限修改使用的命令是chmod(change mode)
。但是,權限的設置方法有兩種,分別可以使用數字或者符號來進行權限修改。
3.2.1 數字類型修改文件權限
Linux文件的基本權限就只有9
個,分別是擁有者(owne
r)、所屬組(group
)、其他人(others
)三種身份各有自己的讀(read
)、寫(write
)、執行(execute
)權限。假設現在有一個文件權限字符是[rwxrwxrwx]
,這9
個權限是三個三個一組。其中,我們可以使用數字來代表各個權限,各權限的數組對照表如下:
r:4 (2^2)
w:2 (2^1)
x:1 (2^0)
每種身份(owner
、group
、others
)各自的三個權限(r
、w
、x
)數字是需要累加的,例如當權限為[rwxrwx---]
,數字則是:
owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
所以等下我們設置權限時,該文件的權限數字就是770
,修改權限的命令chmod
的語法是:
chmod [權限數字] [文件或目錄]
舉個例子:假設現在有一個普通文件的權限是[rw-rw-r--]
,現在我要讓每種身份的人都可以執行此文件[rwxrwxr-x]
,那么權限數字就是775
3.2.2 符號類型修改文件權限
因為九個權限分別是user
、group
、others
三種身份,那么我們就可以借u
、g
、o
來代表三種身份的權限。此外,a
則代表all
,也就是全部人的身份。那么讀寫的權限就可以寫成r
、w
、x
。因此,符號類型修改文件權限的語法如下:
chmod [身份] [設置符號] [權限] [文件或目錄]
// 身份選項:u、g、o
// 設置符號:+(加入)、-(移除)
// 權限:r、w、x
我們可以來實踐一下,假設有一個文件test.txt
的權限為[-rwx---r-x]
,那我現在我想讓所屬組和其他人都具有r
、w
、x
權限,那么命令應該為chmod g+rwx,o+rwx test.txt
接下來我再假設所有人(包括擁有者)都不許對test.txt
有讀、寫和可執行權限
3.3 修改文件所屬組
修改文件擁有者的基本指令是chgrp(change group)
。注意,要被修改的組名必須在/etc/group
文件中存在才行
假現將text.txt
文件的所屬組改為tempuser
(此用戶我已經創建好了)
奇怪,為什么提示說“操作不被允許”?我們知道:你拿一個東西需要征得別人的允許,同樣的,你給別人一個東西也需要征得別人的允許。因此,現在有一個暴力的方法,將自己提升為神父root
,別人不要也得要
3.4 修改文件擁有者
修改文件擁有者的基本指令是chown(change owner)
,要注意的是,用戶必須是已經存在系統中的賬號,也就是在/etc/passwd
這個文件中有記錄的用戶名稱才能被修改
假設你已經是root
身份了,現將text.txt
文件的擁有者改為tempuser
(此用戶我已經創建好了)
那么現在我要將擁有者和所屬組全部改回wj
,又該怎么做呢?難道要分別使用兩個指令來更改?會不會麻煩了些?
3.5 默認權限
無論是創建文件還是創建目錄,系統都會分配默認權限
首先給出結論
- 系統默認給普通文件的起始權限是
666
,即[rw-rw-rw-]
- 默認給目錄的起始權限是
777
,即[rwxrwxrwx]
奇怪?那么為什么創建出來的默認權限和我們說的不一樣?
3.5.1 權限掩碼
這是因為Linux
存在權限掩碼umask
在CentOS 7.6
中,默認的權限掩碼為0002
,平臺不同,權限掩碼可能存在差異
- 需要注意的是:
umask
的數字指的是該默認值需要減掉的權限
什么意思呢?以文件為例:在上面我們說過了,系統默認給普通文件的起始權限是666
,轉換為二進制1010011010
,默認的權限掩碼轉換為二進制0000000010
。由于umask
的數字指的是該默認值需要減掉的權限,因此666
的二進制從右向左的第二個1
需要去掉,因此最后的結果是110110100
,轉換為權限rw-rw-r--
,這下剛剛好也解釋完了
但是默認權限的計算方式是以下這樣的:
- 默認權限的計算方式:
默認權限 = 起始權限 & (~umask)
目錄默認權限的計算也是一樣的這里就不為大家演示了
四、目錄權限
目錄的基礎權限也是:r(讀)
、 w(寫)
、 x(可執行)
r
:是否允許查看該目錄中的內容
w
:是否允許當前目錄進行創建、更改、刪除
x
:是否允許用戶進入當前目錄
五、粘滯位
5.1 引入
大家想想:有多個人在一個共享目錄里分享文件,那么里頭的人是否能刪除你的文件呢?
竟然可以刪除!!那這就很可怕了。
假設一個公司有一個共享目錄,供多個員工存儲和共享文件。如果沒有粘滯位,某個員工誤刪了其他員工的文件,那么對于其他員工來說,他們將無法恢復自己的文件,也無法確定是誰刪除了自己的文件,這會導致很大的不便和困擾。
因此才有了粘滯位:一般是給共享目錄設置,當一個目錄被設置粘滯位了后,只有文件所有者和超級用戶root
才能夠刪除或重命名該目錄下的文件,其他用戶則不能進行這些操作。
5.2 如何設置粘滯位
使用chmod
命令可以設置和取消目錄的粘滯位。對于一個目錄,設置粘滯位的命令為:
chmod +t [共享目錄]
取消粘滯位的命令為:
chmod -t [共享目錄]
以后在這種共享目錄中,別的用戶就無法刪除里頭的文件。