前言:
? ? ? ? 上兩篇文章我們講到了,關于Linux中的基礎指令。
? ? ? ?【Linux】初見,基礎指令-CSDN博客【Linux】初見,基礎指令(續)-CSDN博客
? ? ? ? 本文我們來講Linux中關于權限中的一些指令
shell命令?
Linux嚴格來說是一個操作系統,我們稱之為“核心”(kernel)。而作為用戶的我們并不能直接與核心交流,這時候就有一個中間人的角色出現:將我們的指令翻譯為核心可以看懂的符號,交由核心執行,并將執行結果翻譯并返回給我們。
這個中間人就是“包裹”在核心外的“外殼程序”,介于我們和核心之前。我們稱之為:shell命令
從技術層面來講,shell的最簡單定義就是:命令解釋器。其主要功能就是:
????????1.將命令翻譯后交給核心執行
????????2.將核心執行的結果翻譯并返回給我們?
形象理解shell:
????????假如小y過年回家打算相親了,打算小y并不擅長與異性交流,這時候就拜托了媒人王姨作為中間人,幫忙小y和異性之前傳話。這時候王姨就是“外殼程序”shell。
為什么要有shell?
????????1.方便用戶使用
????????2.作為外殼程序,保護核心
補充:
權限概念
Linux中權限分為兩種:root賬號、普通賬號
root賬號:為超級權限賬號,不受任何權限限制
普通賬號:受到權限限制,在Linux中只能做有限的事
su?
命令:su? 用戶名
功能:切換賬號
hyc@hcss-ecs-4ce7:/$ whoami
hyc#切換root賬號執行su即可
hyc@hcss-ecs-4ce7:/$ su
#輸入root賬號密碼
Password:
root@hcss-ecs-4ce7:/# whoami
root#切換普通賬號:su 用戶名(不需要密碼)
root@hcss-ecs-4ce7:/# su hyc
hyc@hcss-ecs-4ce7:/$ whoami
hyc
補充:普通用戶 -> root賬號,除了su可以實現,su -也可以實現。但是區別是?
hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su
Password:
root@hcss-ecs-4ce7:/# whoami
root
root@hcss-ecs-4ce7:/# pwd
/hyc@hcss-ecs-4ce7:/$ pwd
/
hyc@hcss-ecs-4ce7:/$ su -
Password:
root@hcss-ecs-4ce7:~# whoami
root
root@hcss-ecs-4ce7:~# pwd
/root#我們可以看到su、su-,都成功的切換到了root。
#不同的是su切換賬號并不會改變之前所處路徑,既su不會改變位置
#而su-會改變位置,之前是/下,切換之后在/root下
sudo:短暫的指令提權
????????如果我們需要使用root權限來執行一些指令,但是卻沒有root密碼怎么辦?
????????在指令最前面加上sudo,就可以使用root權限執行命令
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc:
?????????這樣確實方便,但是有一個問題:那豈不是人人都可以使用root權限了?這不亂套了?
????????Linux設計者當然考慮到了這個問題,普通用戶如果想要使用sudo進行指令提權。必須要root賬號給予普通賬號提權權限才行。所以并不是什么普通賬號都可以進行提權
沒有提權權限的賬戶,就會顯示以下報錯
hyc@hcss-ecs-4ce7:~$ sudo ls
[sudo] password for hyc:
hyc is not in the sudoers file. This incident will be reported.
總結:
普通 -> root:su(不會改變位置)
? ? ? ? ? ? ? ? ? ? ? su-(會改變位置:默認切換至家目錄)
root -> 普通:su? 用戶名
sodu : 指令提權
權限管理
權限的本質是:能做或者不能做什么事情(控制用戶行為,防止錯誤操作)
理解:
? ? ? ? 1.權限限制的是人
? ? ? ? 2.權限要求目標必須具備對應屬性:權限:角色+目標屬性(權限)
屬性
對于Linux中的屬性來說主要為三個:讀、寫、執行
讀:r
寫:w
執行:x
之前我們說過第一個字母代表文件屬性,而后面的一串字符則代表該文件的權限。
r:對文件來說,代表可以讀取文件內容;對目錄來說,代表可以瀏覽目錄內容
w:對文件來說,代表可以修改文件內容;對目錄來說,代表可以刪除目錄中的內容
x:對文件來說,代表可以執行該文件;對目錄來說,代表可以進入該目錄
但是為什么這里有多個wrx呢?這就涉及到角色的問題。
角色
上面我們說了權限=角色+對應屬性。
屬性代表相應的角色擁有什么權限,那么我們是如何分辨角色呢?如何知道角色對應所擁有的權限呢?
首先我們可以通過命令行得知我們當前的角色、或者使用whoami指令
然后根據當前用戶,來判斷其說擁有的權限
解釋:
? ? ? ? 我們當前用戶是root,對于第一個目錄來說,我們就是其擁有者。所對應擁有的權限則是rwx
而什么是所屬組?什么是other呢?
? ? ? ? 所屬組就是當前角色不是擁有者,但是與擁有者在同一個隊伍中。這時候就會匹配所屬組權限,這時候這個角色就是所屬者。
? ? ? ? 所屬組的存在是為了更精細化的權限管理。舉例:a組和b組都在同一臺Linux機器上開發項目,a組項目代碼需要公開出來讓a組全體成員都能看見,但是不希望b組看見。這時候就只需要將a組全體成員納入所屬組中,然后將other權限關閉,就可以實現。(現在很少用到了,了解即可)
? ? ? ? other就是既不屬于擁有者,也不屬于所屬者的角色。這時候就會匹配other權限。
如何描述文件權限信息?
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt
? ? ? ? ? 對于new.txt這個文件來說權限的描述應該為:擁有者權限為rw,所屬組權限為r,other權限為r。
文件權限表示方法
1.字符表示法
????????3個字母為一組,分別為:r、w、x,如沒有對應權限則用 " - "表示。其順序是固定的不可交換
2.8進制表示法?
? ?
chmod指令
語法:chmod? 參數? 權限? 文件名
功能:改變文件權限(只有root或者文件擁有者才有資格修改權限)
選項:
-R:遞歸的將目錄下的文件權限全部修改
參數:
u:擁有者
g:所屬組
o:other
a:有所用戶
實際操作展示 :
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt#關閉u的w權限
root@hcss-ecs-4ce7:~# chmod u-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-r--r--r-- 1 root root 22902 May 18 11:51 new.txt#開放u的w權限
root@hcss-ecs-4ce7:~# chmod u+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt#關閉u的多條權限
root@hcss-ecs-4ce7:~# chmod u-rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
----r--r-- 1 root root 22902 May 18 11:51 new.txt#開放u的多條權限
root@hcss-ecs-4ce7:~# chmod u+rw new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt#開放g的w權限
root@hcss-ecs-4ce7:~# chmod g+w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-rw-r-- 1 root root 22902 May 18 11:51 new.txt#關閉g的w權限
root@hcss-ecs-4ce7:~# chmod g-w new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt#以此類推,其他的權限操作類似
另外也可以通過八進制來實現多個用戶權限的修改:
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt#通過3個8進制數字實現,對多個用戶權限修改
root@hcss-ecs-4ce7:~# chmod 000 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
---------- 1 root root 22902 May 18 11:51 new.txtroot@hcss-ecs-4ce7:~# chmod 663 new.txt
root@hcss-ecs-4ce7:~# ls -l
total 28
drwxr-xr-x 5 root root 4096 May 20 13:58 new
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt
修改權限注意事項
1.任何人都可以修改文件權限嗎?
? ? ? ? 只有root和文件擁有者才能修改權限!
2.如果在進行相應操作時沒有權限會怎么樣?
? ? ? ? 系統會拒絕我們的指令請求
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txthyc@hcss-ecs-4ce7:~$ chmod u-r new.txt
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
--w-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txthyc@hcss-ecs-4ce7:~$ cat new.txt
cat: new.txt: Permission denied
3.確定權限信息時,系統會先確認誰?
? ? ? ? 先確認擁有者權限,再確認所屬組,最后是other。權限只會確定一次,不會多次確定,第一次匹配上的權限既為我們當前角色所擁有的權限。
4.root賬號權限?
????????擁有最高權限,不受一切權限的限制。所有設定的限制只針對普通賬號有用。
5.可執行權限?
? ? ? ? 我們之前所講的例子中都沒有可執行樣例,其實可執行程序是.exe文件。普通文件一般沒有x權限,當然即使擁有x權限也無法執行,因為其本身就不是可執行文件。
chown與chgrp指令
語法:chown? ?用戶名? ?文件名
功能:改變文件或目錄的擁有者
選項:-R 遞歸的修改目錄中所有文件的擁有者
語法:chgrp? 所屬組名? ?文件名
功能:修改文件或目錄的所屬組
選項:-R遞歸修改目錄中所有文件的所屬組
使用chown修改擁有者、chgrp修改所屬組出現問題?
hyc@hcss-ecs-4ce7:~$ ls -l
total 0
-rw-rw-rw- 1 hyc hyc 0 May 24 23:07 new.txthyc@hcss-ecs-4ce7:~$ chown root new.txt
chown: changing ownership of 'new.txt': Operation not permittedhyc@hcss-ecs-4ce7:~$ chgrp root new.txt
chgrp: changing group of 'new.txt': Operation not permitted
原因:
? ? ? ? 系統并不支持隨意的將文件的擁有者或所屬組修改,這一操作只有root權限才能被允許。所以在要在這句指令前加上sodu,或者切換為root賬號。
下面我切換為root賬號作為演示:
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 root root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chown hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc root 22902 May 18 11:51 new.txt
root@hcss-ecs-4ce7:~# chgrp hyc new.txt
root@hcss-ecs-4ce7:~# ls -l
total 24
-rw-rw--wx 1 hyc hyc 22902 May 18 11:51 new.txt
目錄權限問題
1.rwx對于目錄來說意味這什么?
沒有r權限,無法查看其內容
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-r new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
d-wxrwxr-x 2 hyc hyc 4096 May 26 15:41 newhyc@hcss-ecs-4ce7:~$ ls new
ls: cannot open directory 'new': Permission denied
沒有w權限,無法在其內部創建文件
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drwxrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ chmod u-w new
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
dr-xrwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ ls
newhyc@hcss-ecs-4ce7:~$ touch ./new/my.txt
touch: cannot touch './new/my.txt': Permission denied
沒有x權限,無法進入目錄
hyc@hcss-ecs-4ce7:~$ ls -l
total 4
drw-rwxr-x 2 hyc hyc 4096 May 26 15:41 new
hyc@hcss-ecs-4ce7:~$ cd new
bash: cd: new: Permission denied
rwx這三個權限都與目錄的正常使用相關,所以我們創建的目錄默認權限這三個都有。
2.理解Linux中多用戶是如何相互“隔離”的?
root@hcss-ecs-4ce7:~# ls -l /home
total 8
drwxr-x--- 3 hyc hyc 4096 May 26 15:41 hyc
drwxr-x--- 2 ye ye 4096 May 26 16:03 ye
所有用戶的other權限都是全部關閉的,任意用戶都無法進入。這就帶來了“隔離”
3.缺省權限
對于普通文件:默認起始權限是666
對于目錄:默認起始權限是777,帶x
但我們看到的默認權限一般都不是我們說所的起始權限 ,這是為什么?
root@hcss-ecs-4ce7:~# ls -l
total 4
drwxr-xr-x 2 root root 4096 May 26 16:59 new
-rw-r--r-- 1 root root 0 May 26 16:40 new.txt
因為Linux中存在一個東西叫做權限掩碼(umask)
root用戶的權限掩碼為:022
普通用戶的權限掩碼為:002
root@hcss-ecs-4ce7:~# umask
0022
(最前面的0表示八進制)
最終的權限=起始權限&(~umask)
umask的目的是什么?
? ? ? ? 凡是出現在umask上的權限,都不會出現在最終的權限上面。
umask為什么會出現?
? ? ? ? 可以讓我們自定義默認權限,是一種靈活滿足需求的表現
4.文件的刪除由誰決定?
? ? ? ? 一個文件是否可以被刪除與文件本身無關,而在于目錄的w權限。
粘滯鍵
????????如果有兩個或者多個用戶需要在文件層面上的相互合作,那么所創建的文件就不能在私人目錄下。將目錄創建根目錄下,這樣所有用戶就都可以訪問并寫入自己的內容。
? ? ? ? 但是這里存在一個問題,就是如果在眾多用戶中存在隔壁公式派來的內鬼(bushi),內鬼可以刪除自己的文件也可以刪除被人的文件(文件是否可以被刪除與自己無關,與文件的w權限有關)!
? ? ? ? 這該怎么辦??關閉w權限嗎?不行,這會影響其他用戶的正常使用,那怎么辦?
Linux給粘滯鍵有效的解決這一問題?
chmod +t
給權限加上粘滯位,加上粘滯位的目錄有以下效果:
1.文件只能被root刪除
2.文件只能被其擁有者刪除
3.文件只能有該目錄的擁有者刪除
其實系統已經為我們準備好了這一特殊目錄,就是根目錄下的temp目錄
我們可以看到temp的other權限最后一個字母是t,這就代表粘滯位。?
一般需要文件上的多人合作,都是在temp里進行。