Linux 下許可權的管理

HighLight_FanYa發表於2021-11-10

Linux 下許可權的管理

我們都知道,Linux系統對於使用者的許可權管理是十分嚴格的。

那麼,我們就來具體瞭解一下。

一. 使用者

在Linux中按照型別使用者分為兩種:1.超級使用者 2.普通使用者

那麼它們之間都有上面區別呢:

  1. 超級使用者的行為不受限制(我們一般稱之為root使用者)。
  2. 普通使用者的行為受到一定的限制。
  3. 超級使用者的命令提示符為#,普通使用者的命令提示符為$
  4. 超級使用者只能有一個(root),普通使用者可以有多個。

那麼我們怎麼切換使用者呢?

1. 怎麼切換使用者

命令su 使用者名稱

功能:切換使用者

示例

  1. 普通使用者切換為root使用者 -> 需要輸入root使用者的密碼
    命令:su root 、su

    image-20211024220722555

  2. root使用者切換為普通使用者 -> 不需要輸入普通使用者的密碼
    命令:su 使用者名稱
    示例:su opc

    image-20211024220539872

  3. 普通使用者切換為普通使用者 -> 需要輸入被切換使用者的密碼
    命令:su 使用者名稱
    示例:su opc

    image-20211024220857965

2. 普通使用者怎麼臨時使用root使用者的權利

在日常操作的時候,我們經常會需要root的權利來操作一些事務,如:安裝某個應用包,來查閱一些資料夾等等。

如果我們沒有root的許可權就會出現如下情況:

Error: This command has to be run with superuser privileges (under the root user on most systems).

image-20211024221705604

此時,我們要怎麼做呢?

我們只需將我們所需要提升許可權的命令前加一個sudo即可,例如sudo yum install redis

但是,會有人出現如下情況:

[fanya@centos ~]$ sudo yum install redis

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for fanya: 
fanya is not in the sudoers file.  This incident will be reported.
[fanya@centos ~]$

image-20211024222431060

這時我們只需以root的身份來編輯/etc.sudoers這個檔案,在下述語句之後加一句你的使用者名稱 ALL=(ALL) ALL

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL

image-20211024223916802

具體操作命令:

su # 切換為root使用者
vi /etc/sudoers # 或 vim /etc/sudoers
# 以下命令依次在vim視窗輸入
1. 敲擊鍵盤上的 Esc 按鍵
2. 敲擊鍵盤上的 :按鍵 -> 你會發現螢幕下方出現了一個橫條
3. 輸入100,敲擊回車
4. 敲擊鍵盤上的y鍵兩遍
5. 敲擊鍵盤上的p鍵
6. 敲擊鍵盤上的i鍵
7. 將root替換為你的使用者名稱
8. 敲擊鍵盤上的 Esc 按鍵
9. 敲擊鍵盤上的 :按鍵 -> 你會發現螢幕下方出現了一個橫條
10.輸入 wq!,敲擊回車即可

或在root身份下以以下一行命令搞定:

sed -i "101i fanya    ALL=(ALL)   ALL" /etc/sudoers # 將 fanya 修改為你的使用者名稱

二. 檔案

在之前說到 ls -l命令時,它會列出一些檔案的許可權資訊,我們具體就來看看這些到底是什麼image-20211106160321320

1. 檔案訪問者

對於使用者來說,對許可權的操控可以分為以下三種:

  • 擁有者:檔案和檔案目錄的所有者:u---User
  • 所屬組:檔案和檔案目錄的所有者所在的組的使用者:g---Group
  • 其它使用者:其它使用者:o---Others

另外還要說明幾點:

  1. 在Linux中,所有的使用者都應隸屬一個相應的組,儘管組中只有他一個人。
  2. 假設有一個Linux系統裡普通使用者有fanyazhang兩個人,當fanya建立了一個檔案,那麼對於這個檔案它的所有者就是fanyazhang就是其他使用者了。image-20211106163242645

2. 檔案型別和訪問許可權

在使用ls -l命令時,會發現有形如drwxrwxr-x.這樣的一串字元,那麼它的意義是什麼呢?

image-20211106161025420

1). 檔案型別

  • d:資料夾
  • -:普通檔案
  • l:軟連結(類似Windows的快捷方式)
  • b:塊裝置檔案(例如硬碟、光碟機等)
  • p:管道檔案
  • c:字元裝置檔案(例如螢幕等串列埠裝置)
  • s:套介面檔案

2). 基本許可權

  • i. 讀(r):Read對檔案而言,具有讀取檔案內容的許可權;對目錄來說,具有瀏覽該目錄資訊的許可權
  • ii.寫(w):Write對檔案而言,具有修改檔案內容的許可權;對目錄來說具有刪除移動目錄內檔案的許可權
  • iii.執行(x):execute對檔案而言,具有執行檔案的許可權;對目錄來說,具有進入目錄的許可權
  • iv.“-”表示不具有該項許可權

3.許可權的表示

表示許可權的這串字元共有10個字元,它分為 1 + 3 + 3 + 3

  • 1 表示的時檔案的型別,如普通檔案、目錄、可執行檔案等等。
  • 3 表示某種檔案訪問者的可讀、可寫及可執行許可權分別用r、w、x來表示
  • 3 + 3 + 3 則分別表示 檔案所有者、檔案所屬組及其他人的相應許可權

image-20211106164410832

1). 字元表示

image-20211109212958133

2). 數字表示(八進位制)

image-20211109213033786

注意:一個八進位制數字代表一種使用者的許可權,以3個八進位制組成為一個檔案的完整許可權。例如777就代表著rwxrwxrwx

4.設定檔案相關訪問許可權

假設我們有如下檔案:

image-20211109213906185

現有一個需求,我們需要修改test檔案的許可權,讓其他人無法檢視,我們需要怎麼樣做呢?

這時就需要chomod命令了。

1). chmod 修改檔案的許可權

功能:設定檔案的訪問許可權

格式chmod [引數] 許可權 檔名

常用選項

  • R :遞迴修改目錄檔案的許可權

說明:只有檔案的擁有者和超級使用者才可以改變檔案的許可權

chmod命令許可權值的格式:

  1. 使用者表示符 +/-/= 許可權字元

    • +/-/=
      • +:向許可權範圍增加許可權代號所表示的許可權
      • -:向許可權範圍取消許可權代號所表示的許可權
      • =:向許可權範圍賦予許可權代號所表示的許可權
    • 使用者表示符
      • u:擁有者
      • g:擁有者同組
      • o:其它使用者
      • a:所有使用者

    示例

    # 將test檔案修改為其他使用者無許可權
    # 原來的test檔案許可權:rw-rw-r--
    chmod o=--- test
    # 或
    chomd o-rwx test
    # 修改後的test檔案許可權:rw-rw----
    

    image-20211109215637649

    # 將test檔案修改為其他使用者可讀可寫可執行
    # 原來的test檔案許可權:rw-rw-r--
    chmod o=rwx test
    # 或
    chomd o+rwx test
    # 修改後的test檔案許可權:rw-rw-rwx
    

    image-20211109215847781

  2. 三位八進位制數字

    示例:

    # 將test檔案修改為其他使用者無許可權
    # 原來的test檔案許可權:rw-rw-r--
    chmod 660 test
    # 修改後的test檔案許可權:rw-rw----
    

    image-20211109220225821

    # 將test檔案修改為其他使用者可讀可寫可執行
    # 原來的test檔案許可權:rw-rw-r--
    chmod 667 test
    # 修改後的test檔案許可權:rw-rw-rwx
    

    image-20211109220325064

2). chown 修改檔案的擁有者

功能:修改檔案的擁有者

格式:chown [引數] 使用者名稱 檔名

常用選項

  • R :遞迴修改目錄檔案的許可權

注意:修改擁有者需以root身份進行

示例

# 將test的擁有者改為opc
sudo chown opc test

image-20211109221204457

3). chgrp 修改檔案的所屬組

功能:修改檔案的擁有者

格式:chgrp [引數] 使用者名稱 檔名

常用選項

  • R :遞迴修改目錄檔案的許可權

注意:修改所屬組需以root身份進行

示例

# 將test的所屬組改為opc
sudo chgrp opc test

image-20211109221401951

4). umask 檢視或修改檔案掩碼

當我們建立檔案或是建立資料夾時,我們會發現它會帶一些預設的許可權,如圖所示:

image-20211109223033679

而這些許可權是怎麼產生的呢?

這就需要用到新的的知識了:

實際上,新建檔案的預設許可權為0666,新建目錄的預設許可權為0777。其中第一位的0與特殊許可權有關,我們這裡不必深究,而後面三位就是許可權的八進位制數值表示方法,我們將其翻譯為字元表示方法。

image-20211109223646361

但是我們發現,它實際上與我們建立出來的檔案許可權並不相同,這又是為什麼呢?

原因就是建立檔案或目錄的時候還要受到umask的影響。假設預設許可權是mask,則實際建立的出來的檔案許可權是: mask & ~umask

格式:umask 許可權值
說明

  • 將現有的存取許可權減去許可權掩碼後,即可產生建立檔案時預設許可權。
  • 超級使用者預設掩碼值為0022
  • 普通使用者預設為0002
  • 檢視當前預設umask只需在命令列下輸入umask

image-20211109224139252

那麼現在繼續來解釋上述問題,如上圖所示,此時的umask為0002,檔案的預設許可權為0666,資料夾的預設許可權為0777.

image-20211109225235850

此時我們發現,此時得出的許可權與上述圖中顯示的一致。

當然,我們可以通過控制umask的值,來控制最終生成的許可權:

image-20211109225856039

三. 目錄

在剛才的講解中,我們發現目錄也有著可讀可寫可執行的許可權,而它們又代表著什麼意思呢?

1. 目錄的許可權

  • 可執行許可權: 如果目錄沒有可執行許可權, 則無法cd到目錄中
  • 可讀許可權: 如果目錄沒有可讀許可權, 則無法用ls等命令檢視目錄中的檔案內容
  • 可寫許可權: 如果目錄沒有可寫許可權, 則無法在目錄中建立檔案, 也無法在目錄中刪除檔案

但是!!!

在這裡存在一個嚴重的問題,不知大家發現了沒有?

只要使用者具有這個目錄的寫許可權,使用者就可以刪除目錄中的檔案,而不論該使用者是否有這個檔案的寫許可權。

換句話來說就是,張三建立了一個檔案,但是李四卻能刪了它。這本就充滿著極大的不合理性!

我們來具體實踐一下:

image-20211110183804513

那要怎麼避免這種情況的發生呢?Linux中引入了粘滯位的概念。

2.粘滯位

語法: chmod +t 目錄名

功能: 給目錄加上粘滯位

當一個目錄被設定為"粘滯位"(用chmod +t),則該目錄下的檔案被刪除的情況只有三種:

  • 一、超級管理員刪除
  • 二、該目錄的所有者刪除
  • 三、該檔案的所有者刪除

示例

image-20211110185524668

注意: 雖然目錄被加上了粘滯位,但如果使用者有該目錄的可寫許可權,則不影響其在該目錄下建立檔案

相關文章