💓博主CSDN主頁:杭電碼農-NEO💓
?
?專欄分類:Linux從入門到開通?
?
🚚代碼倉庫:NEO的學習日記🚚
?
🌹關注我🫵帶你學更多操作系統知識
? 🔝🔝
Linux權限
- 1. 前言
- 2. shell命令以及運行原理
- 3. 普通用戶與超級用戶
- 3.1 對指令提權
- 4. 文件的權限以及角色屬性
- 4.1 角色屬性
- 4.2 文件的類型
- 4.3 文件的讀寫權限
- 4.4 讀寫權限的二進制表示
- 5. 文件的權限的修改方式
- 5.1 文件權限的八進制修改方式
- 6. 修改文件的擁有者/所屬組
- 7. 對文件夾的權限理解
- 8. 默認權限以及權限掩碼
- 8.1 權限掩碼相關的計算
- 8.2 修改權限掩碼
- 9. 總結以及拓展
1. 前言
Linux的內容是錯綜復雜的,是學不完的
專欄Linux從入門到開通只講解
比較重要的知識以及面試常考的內容
本章重點:
- 對shell外殼和Linux內核的理解
- 普通用戶和超級用戶的區別
- 文件對應的三個權限
- 修改文件權限或擁有者/所屬組
- 目錄文件和普通文件的區別
- 默認權限以及權限掩碼
2. shell命令以及運行原理
Linux操作系統嚴格來說是:
Linux內核+Linux外殼+配套程序
外殼也就是shell
那么為什么要存在外殼呢?
有兩個原因:
命令行解釋
(充當媒婆)
內核的設計非常復雜,使用者無法
直接向Linux內核進行溝通,也無法
直接讀懂內核執行完命令的結果
所以shell外殼充當"媒婆"這一角色
來往于操作者和內核之間
- 外殼程序將用戶輸入的指令解釋后
傳遞給內核 - 內核執行命令后得到的結果經外殼
處理后傳遞給用戶
保護內核
(充當保安)
有時用戶想要內核執行的命令過于離譜
或者使用的指令內核根本做不到
那么此指令根本不會"打擾"內核
它會在shell外殼進行翻譯時就被駁回!
-
就像你暗戀的女生有男朋友了
你還要媒婆幫你說媒 -
這個請求會在媒婆這一階段就駁回!
注:shell是對所有命令行解釋器的統稱
Linux下的shell外殼是bash
而windows下的shell外殼是
圖形化界面
3. 普通用戶與超級用戶
一個Linux賬號只有一個超級用戶:
root
創建的其余用戶都叫做普通用戶
比如我的Linux下有幾個普通用戶:
假如你想要切換用戶
使用指令:
su 用戶名
注:超級用戶切換為普通用戶不用輸密碼
普通用戶切換為root或其他普通用戶需要密碼
3.1 對指令提權
假如我現在是普通用戶
但我只想用root賬號執行一條命令
如果切換為root那么太麻煩了
使用指令:
sudo 提權的指令
這樣就可以進行提取了
使用sudo命令的前提是:
此用戶被添加到了sudoers白名單
(作為了解,后期會講)
4. 文件的權限以及角色屬性
當我們使用ll指令查看文件信息時
會打印出這樣的信息:
紅色框中有十列
藍色框中有兩個名字
用以下的圖來理解:
4.1 角色屬性
先看用藍色和紫色框起來的地方
前者是代表文件的擁有者
后者是代表文件的所屬組
所屬組的名字是此組組長的名字!
對于文件來說,除了擁有者和所屬組
還有other這個概念
other代表除了擁有者和所屬組的其他人
比如現在我使用用戶kwy創建一個文件:
擁有者就變成了kwy
4.2 文件的類型
再看最左邊十列,第一列代表文件類型
可以發現,普通文件的第一列是:-
而目錄文件的第一列是: d
對于現階段而言,只需要掌握
文件夾和普通文件即可!
4.3 文件的讀寫權限
前十列的后九行代表了文件的讀寫權限
它們三個三個為一組
比如kwy.txt文件:
擁有者可讀可寫不可執行
所屬組可讀可寫不可執行
other可讀不可寫不可執行
下面這張表格可以總結:
注:讀對應指令:cat等等
寫對應指令:nano等等
然而可執行暫時不用管
4.4 讀寫權限的二進制表示
有權限代表1,沒有權限代表0
上面的表格可以總結出以下二進制形式:
這里使用八進制來表示是因為
某用戶的最大權限是111
111的十進制是7,沒有超過8!
kwy.txt文件的二進制形式可以寫做:
6 6 4
5. 文件的權限的修改方式
想要修改用戶的讀寫權限:
使用指令:
chmod [參數] 權限 文件名
比如我把kwy.txt文件加上wx權限:
注:只有文件的擁有者或root可修改文件權限
若你沒有讀權限去訪問文件時會報錯:
root是超級管理員,權限不能限制root的訪問!
5.1 文件權限的八進制修改方式
修改文件權限時,除了使用±號
還可以用八進制進行修改:
將kwy.txt文件改成所有人可讀可寫:
這里的666的二進制形式是:
110 110 110
所有人的讀寫權限都存在,而執行權限無
將kwy.txt文件的other所有權限去掉:
6. 修改文件的擁有者/所屬組
修改擁有者:
使用指令:
chown 用戶名 文件名
將kwy.txt文件的擁有者改成root:
修改所屬組
使用指令:
chgrp 所屬組 文件名
需要注意的點:
很明顯一個普通用戶是無法把自己的文件
給另外一個用戶的,因為這十分不安全!
只有root賬號或者使用sudo提權
才能將文件的擁有者/所屬組修改!
7. 對文件夾的權限理解
和普通文件不同,文件夾的讀寫
和可執行權限對應的功能十分不同
- 讀權限( r ):用戶能否查看文件夾下文件的信息
- 寫權限( w ):用戶能否在此文件夾下創建/刪除文件
- 可執行權限( x ): 用戶能否進入此文件夾
比如在我的目錄下有一個source文件夾:
擁有者可以進入文件夾,并且可以創建/刪除文件
也可以使用ls相關指令查看文件的信息
但是所屬組和other不能創建或刪除文件
現在切換為用戶kwy并且進入此文件夾:
當我創建文件時,權限就被限制了!
8. 默認權限以及權限掩碼
我們先創建一個目錄和一個普通文件:
我們會發現以下規律:
- 目錄的默認權限為:
7 7 5
- 普通文件默認權限:
6 6 4
這是為什么呢?
其實文件的默認權限有兩個因素決定:
- 文件的起始權限
- 文件的權限掩碼
文件的起始權限:
- 目錄的起始權限為:
7 7 7
- 普通文件的起始權限為:
6 6 6
文件的權限掩碼:
查看文件的權限掩碼:
使用指令:
umask
我的機器上默認為002
用起始權限777-002=775
剛好就等于目錄的默認權限
而起始權限666-002=664
剛好也等于普通文件的默認權限
8.1 權限掩碼相關的計算
其實文件的默認權限并不是簡單的等于:
起始權限 - 權限掩碼
它的公式是:
最終權限=起始權限&(~權限掩碼)
公式不好記,但是說起來簡單易懂
- 將權限掩碼和起始權限變成二進制
- 將這兩個二進制對一一對應
- 權限掩碼為1,起始權限為1時,起始權限改為0
- 權限掩碼為0,起始權限也為0時,起始權限不變
可以用下面這張圖來理解:
8.2 修改權限掩碼
Linux系統的功能做的很全
即使有些功能不經常用
修改權限掩碼:
使用指令:
umask 期望的權限掩碼的八進制
比如現在將權限掩碼修改為777:
此時,新創建的文件或文件夾什么權限都沒了!
9. 總結以及拓展
Linux中的權限十分分明,一個用戶
能干什么不能干什么都已經規定好了
不會出現你的某位同事刪掉你的代碼這種事情
拓展: 粘滯位
假設你和你的同事在同一個目錄下工作
你要創建文件就必須有目錄的w權限
而擁有w權限也不一定完全安全.
可能你的小組某個"間諜"
會刪除你們小組所有文件
然而想要正常工作又必須將w權限放開
為了解決可以創建文件而不能刪除他人文件
這個問題,引申出了粘滯位
詳情請看:粘滯位講解