文章目錄

1.Shell命令以及運行原理
2.Linux權限的概念
2.1用戶介紹
2.2用戶切換指令 su
當前所處目錄不變
當前所處目錄改變
3.Linux 權限管理
3.1文件訪問者的分類
3.1.1 擁有者
3.1.2 所屬組
3.1.3 other
3.1.4 總結
3.2文件類型和訪問權限
3.2.1文件類型
3.2.2 基本權限
3.3文件權限值的表示方法
3.3.1字符表示法
3.3.2數字表示法
3.3.3總結?
3.4文件訪問權限的相關設置方法
chmod指令?
chown指令
chgrp指令
umask 文件掩碼
3.5目錄的權限
概念?
粘滯位
4.總結
??Linux嚴格意義上說的是一個操作系統,我們稱之為“核心(kernel) “ ,但我們一般用戶,不能直接使用kernel。而是通過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。如下圖,藍色箭頭表示用戶通過Shell與Linux Kernel 溝通,綠色箭頭表示 Linux Kernel 通過Shell 返回給用戶一些信息。

??對比windows GUI(圖形用戶界面),我們操作windows 不是直接操作windows內核,而是通過圖形接口,點擊,從而完成我們的操作(比如進入D盤的操作,我們通常是雙擊D盤盤符,在Linux下就相當于cd指令)。
? shell 對于Linux,有相同的作用,主要是對我們的指令進行解析,解析指令給Linux內核。反饋結果在通過內核運行出結果,通過shell解析給用戶。
? 那么shell存在的意義是什么呢?一方面,是為了幫忙進行命令行傳遞和返回結果,另一方面是保護操作系統。此外,shell在執行命令的時候,會創建子進程來執行。
2.Linux權限的概念 2.1用戶介紹? 首先要清楚?Linux 下有兩種用戶:超級用戶(root)、普通用戶。(類似于 Windows 下的 管理員用戶和普通用戶。)
超級用戶(root):可以在linux系統下做任何事情,不受限制。
普通用戶:在linux下做有限的事情。
超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”。
? 可以根據下圖來看,上層的紅色方框是 root ,一來根據 [ ] 最左邊看出,而來也可以根據命令提示符 “#” 看出;下層紅色方框的用戶是 leo ,是一個普通用戶,使用 su leo ,保持當前目錄不變,用戶換成leo,由于當前目錄是屬于 root 的,leo沒有權限查看,所以用ls、ll 都會提示無權限,只有使用 cd ~ 進入leo自己的家目錄,才可以操作。(后面會解釋為什么leo沒有權限,以及su leo,)

? 如上圖,有時候我們會涉及到切換用戶的場景,此時就需要使用 su 指令。?
命令: su [用戶名]
功能:切換用戶。
? 例如,要從root用戶切換到普通用戶user,則使用 su user。 要從普通用戶user切換到root用戶則使用 su root(root可以省略),此時系統會提示輸入root 用戶的口令。
當前所處目錄不變? 使用 su [用戶名] 就可以實現當前目錄不變,用戶改變。比如下方,一開始的用戶是root,并且處于root 的家目錄,然后使用 su leo 指令,切換為 leo 用戶,可以看出,當前所處的目錄名是 root ,這是 root 用戶的目錄,使用 ls 指令,提示無權限查看。
? 同樣的,我現在是leo用戶,直接輸入 su 并回車,提示Password: ,這時輸入root的密碼即可,切換為root用戶,可以發現目錄是root的家目錄,使用ls指令查看當前目錄的內容,確實如此。

? 使用 su - [用戶名] 可以實現:將目錄改為 更換后的用戶的家目錄 ,并且用戶改變。比如下方,一開始是root 用戶,且所處目錄是root 的家目錄,然后使用 su - leo 切換為leo 用戶,切換之后可以看到,目錄也換為leo用戶的家目錄。
? 然后使用 su - 切換成超級用戶,看到,所處目錄也自動切換成了root 的家目錄。

? 文件訪問者,是對于文件而言,誰來訪問,具體可以分為 擁有者、所屬組、其他:
3.1.1 擁有者文件和文件目錄的擁有者: u---User
文件和文件目錄的所有者所在的組的用戶: g---Group
其它用戶: o---Others?
? 顧名思義,就是文件的擁有者,所有者可以對文件進行任何操作,畢竟屬于?“我” 的,“我” 想要刪除就刪除,想要修改就修改,隨便我怎么操作。
3.1.2 所屬組? 比如一個團隊A,協作開發一個項目,團隊老大 小a 建立了一個目錄(即 小a 是這個目錄的擁有者),里面包含項目的所有內容,那么,這個目錄總不可能只有 小a 可以訪問吧?畢竟每一個組員都要負責自己的那一部分。但是,如果 小a 把這個目錄的權限打開,讓其他人可以訪問、修改,固然達到了組員可以進行操作的目的,但是——如果有另一個團隊B,也在開發相同類型的項目,那么,這個團隊里面的任何成員,只要找到 小a 建立的那個目錄,他們就可以隨便訪問團隊A的項目,這肯定不合適。要達到如下圖的要求,只有團隊A的成員可以訪問該項目。

? 所以,由于類似的需求,就產生了所屬組的概念,一般而言,一個文件的所屬組擁有對文件進行操作的權限。當然,所屬組是由一個一個用戶組成的,比如一個目錄的所屬組 里面的成員是 zhangsan、lisi、wnagwu,那么這三位用戶里的任何一個,都可以對該目錄進行的操作,他們三個對這個目錄的權限是一樣的,而其他人(除了root和這個目錄的擁有者)對該目錄只有 很有限的權限,或者沒有任何權限。
3.1.3 other? 一個用戶,既不是文件的擁有者,也不是文件所屬組里的一員,那么對于這個文件而言,這個用戶就是該文件的other,對應的權限一般比較少。
3.1.4 總結? 在這里是否會將文件訪問者和用戶搞混?其實很容易區分,用戶就相當于我們生活中的一個一個人,而文件訪問者就相當于一個個身份。一個人,在公司是員工,在家里是父親/母親,這兩個身份不沖突。同樣的,對于不同的文件而言,用戶也可以是不同的訪問者。
?如下,使用 ll 查看詳細信息時,中間兩個內容,第一個是代表該文件的擁有者,第二個內容是代表該文件的所屬組。那么other如何判斷呢?很簡單,當一個用戶想要操作某個文件時,這個用戶既不是擁有者,也不是所屬組,自然就是other了。

? 如下,使用 ll 指令查看當前目錄下的內容的詳細信息時,每一行的第一個字符,代表的就是該文件的類型。

d:文件夾
-:普通文件l:軟鏈接(類似Windows的快捷方式)
b:塊設備文件(例如硬盤、光驅等)
p:管道文件
c:字符設備文件(例如屏幕等串口設備)
s:套接口文件
? 值得注意的是,Linux 環境下,文件類型和文件后綴無關。?首先看到 try.c 里面是一個 C 語言的代碼。然后用gcc 編譯 ,得到 a.out 這個可執行文件。當文件后綴名是 .out ,可以執行。后綴換成 .txt ,依然可以執行。后綴換成 .c 依然可以執行,但是,執行 try.c ,卻不可以。充分說明了,文件類型和文件后綴無關。

? 如下,既然文件訪問者分為三種類型,那么每一種類型都應該有對應的權限。在每一個文件的詳細信息中,除去開頭的一個字符,后面九個字符,頭三個是擁有者的權限,中間三個是所屬組的權限,最后三個是other的權限。(這些符號具體什么意思下文會介紹。)

? 文件的基本權限可以分為三個:讀、寫、執行,可以表示為 rwx? 。
3.3文件權限值的表示方法 3.3.1字符表示法讀(r/4): Read對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限
寫(w/2): Write對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限
執行(x/1): execute對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限
“—”表示不具有該項權限?
? 字符表示法順序是固定的,第一個位置是讀,第二個位置是寫,第三個位置是執行,比如:rwx 表示讀、寫、執行權限均有;-wx表示有寫、執行權限,沒有讀的權限;r-x 表示有讀、執行權限,沒有寫的權限;---表示什么權限都沒有。
3.3.2數字表示法? 數字表示法是八進制的。上文講到,三個字符為一組并且位置固定,那么從二進制來看就把它這樣子看:對應位置有該權限,就是1,沒有則是0。比如:000 表示什么權限都沒有;100表示有讀的權限,沒有其他權限;010表示有寫的權限,其他權限沒有;101表示有讀和執行的權限,其他權限沒有。
? 上面是從二進制來看,細分到每一個權限的。那么把三個權限看作整體,就是八進制,比如 二進制是000,對應八進制0,沒有任何權限; 二進制 100,對應八進制4,只有讀權限; 二進制 101 ,對應八進制5,有讀和執行權限;二進制 011,對應八進制3,有寫和執行權限。
3.3.3總結?? 如下可以很好總結這里的內容:
| 權限 | 二進制 | 八進制 | 描述 |
|---|---|---|---|
| --- | 000 | 0 | 沒有任何權限 |
| --x | 001 | 1 | 只有執行權限 |
| -w- | 010 | 2 | 只有寫入權限 |
| -wx | 011 | 3 | 只有寫入和執行權限 |
| r-- | 100 | 4 | 只有只讀權限 |
| r-x | 101 | 5 | 可讀可執行權限 |
| rw- | 110 | 6 | 可讀可寫權限 |
| rwx | 111 | 7 | 可讀可寫可執行權限 |
chmod
?功能: 設置文件的訪問權限
格式: chmod [參數] 權限 文件名
常用選項:
R ->遞歸修改目錄文件的權限
說明:只有文件的擁有者和root才可以改變文件的權限
關于chmod命令的權限值的格式:?
① 用戶表示符+/-=權限字符
+:向權限范圍增加權限代號所表示的權限
-:向權限范圍取消權限代號所表示的權限
=:向權限范圍賦予權限代號所表示的權限
用戶符號:
u:擁有者
g:擁有者同組用
o:其它用戶
a:所有用戶

②三位8進制數字
? 如下,三位八進制數字,第一位是擁有者的權限,第二位是所屬組的權限,第三位是其他的權限,對著上面的權限和八進制表很容易看懂。

? 該指令是更改文件擁有者。
?chown
功能:修改文件的擁有者
格式: chown [參數] 用戶名 文件名
? 如下,當前用戶是root,所以可以隨意更改任意文件的擁有者。?

? 不難猜測,該指令是更改文件的所屬組。
chgrp
功能:修改文件或目錄的所屬組
格式: chgrp [參數] 用戶組名 文件名
常用選項: -R 遞歸修改文件或目錄的所屬組

??新建文件夾默認權限=0666,新建目錄默認權限=0777。但實際上你所創建的文件和目錄,看到的權限往往不是上面這個值。原因就是創建文件或目錄的時候還要受到umask(掩碼)的影響。假設默認權限是mask,則實際創建的出來的文件權限是:? mask & (~umask)。掩碼也是八進制的,表示的也是權限,直白地說就是,文件的實際權限,等于默認權限 減去 掩碼的權限。
umask
?功能:
查看或修改文件掩碼修改掩碼
格式: umask 權限值
說明:將現有的存取權限減去權限掩碼后,即可產生建立文件時預設權限。超級用戶默認掩碼值為0022,普通用戶默認為0002
? 從下面也可以看出,普通用戶lijun 新建一個文件夾try,和文件try.c,可以看出其權限發呢別是775和664,和默認權限777、666 相比,w權限都被去掉了。然后使用umask指令查看其掩碼,確實是0002.?

如何理解 mask & (~umask)?在這里給出個人的一些看法:

可執行權限: 如果目錄沒有可執行權限, 則無法cd到目錄中
可讀權限: 如果目錄沒有可讀權限, 則無法用ls等命令查看目錄中的文件內容.
可寫權限: 如果目錄沒有可寫權限, 則無法在目錄中創建文件, 也無法在目錄中刪除文件
? 如下,首先查看當前目錄下的詳細信息。
? 然后切換成 lijun 用戶,對目錄 leo 進行操作,從詳細信息中可以看出,目錄leo 的 other沒有任何權限,且其擁有者和所屬組都是用戶 leo,那么用戶 lijun 對于目錄 leo 就是其他,所以第二個紅色個方框里面的任何操作都沒有權限。
? 但是,對于目錄 lijun,其擁有者的權限是rwx,并且其擁有者和所屬組都是用戶 lijun,當用戶lijun對目錄 lijun進行操作時,擁有任何權限,如第三個紅色方框里面的內容。

? 從下面可以看出,一開始對于目錄 lijun,給other加上可讀權限,切換成用戶 leo,用戶leo對于目錄 lijun 是other,所以只能讀,不能cd 進入目錄 lijun。后來給目錄 lijun 的other加上 可執行權限之后,用戶 leo才可以cd 進入目錄 lijun。

? 如下圖,現在有一個public 目錄,其擁有者和所屬組是root,other 有 rwx 的權限,假設這個目錄是給各個用戶來備份一些資料的。
? 切換成leo用戶,該用戶對于public來說是other,進入public目錄之后,創建一個leo.txt 和 leodic,這是屬于leo 用戶的目錄和文件。并且向leo.txt 里面寫入一句話。
? 切換成lijun用戶,可見該用戶對于 leo.txt 是other,而leo.txt 的other 只具有讀的權限,所以可以讀,但是寫入內容則沒有權限。但是,最重要的來了,我是 lijun 用戶,但是我卻可以刪除 leo.txt 這個屬于 leo的文件。這明顯不合理,為什么我會可以刪除 leo.txt 呢?這是因為,對于public目錄,我有寫的權限,所以我可以刪除public目錄里面的內容。但是, leo.txt 是用戶leo的,可能記載著他的一些日志或者重要的內容,我怎么可以直接就刪掉呢?這不合適,所以對于這樣的問題,Linux引入了粘滯位的概念。

? 粘滯位的作用是:
當一個目錄被設置為"粘滯位"(用chmod +t),則該目錄下的文件只能由
一、超級管理員刪除
二、該目錄的所有者刪除
三、該文件的所有者刪除
? 如下,先給public 這個目錄添加粘滯位,然后切換為用戶lijun ,進入 public,試圖刪除用戶leo的目錄和文件夾,發現不可以。這就是粘滯位。?

注意,粘滯位只在other 所具有的權限里面,擁有著和所屬組是不具備t 權限的。如下,即使給所有用戶加上 t 權限,也只有other 得到了改變。

? 1.如下,使用 ll 指令查看的時候,詳細信息解讀如圖。至于在權限后面的那個數字,對于目錄而言,是指它的第一級子目錄的個數;對于其他文件而言,表示指向它的鏈接文件的個數。

2.雖然文件類型和文件后綴無關,但是,這是對于Linux 系統而言。對于Linux 里面的工具,比如 gcc 等,文件后綴和它有關。如下,我把try.c 名字改成 try.txt ,但是里面的內容不變,依然是一個C 語言的代碼。但是,此時用gcc 編譯,卻發現不可以。

? 3. 權限=人+文件屬性。 文件屬性=文件類型+文件權限。

關于 Linux 的權限,暫時就寫到這里,如有錯誤,歡迎指正!!
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
本文題目:【Linux】詳解Linux權限管理-創新互聯
分享URL:http://www.js-pz168.com/article48/hchhp.html
成都網站建設公司_創新互聯,為您提供企業建站、虛擬主機、響應式網站、建站公司、小程序開發、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯