Linux 下許可權的管理
我們都知道,Linux系統對於使用者的許可權管理是十分嚴格的。
那麼,我們就來具體瞭解一下。
一. 使用者
在Linux中按照型別使用者分為兩種:1.超級使用者 2.普通使用者
那麼它們之間都有上面區別呢:
- 超級使用者的行為不受限制(我們一般稱之為root使用者)。
- 普通使用者的行為受到一定的限制。
- 超級使用者的命令提示符為
#
,普通使用者的命令提示符為$
。 - 超級使用者只能有一個(root),普通使用者可以有多個。
那麼我們怎麼切換使用者呢?
1. 怎麼切換使用者
命令: su 使用者名稱
功能:切換使用者
示例:
-
普通使用者切換為root使用者 -> 需要輸入root使用者的密碼
命令:su root 、su
-
root使用者切換為普通使用者 -> 不需要輸入普通使用者的密碼
命令:su 使用者名稱
示例:su opc
-
普通使用者切換為普通使用者 -> 需要輸入被切換使用者的密碼
命令:su 使用者名稱
示例:su opc
2. 普通使用者怎麼臨時使用root使用者的權利
在日常操作的時候,我們經常會需要root的權利來操作一些事務,如:安裝某個應用包,來查閱一些資料夾等等。
如果我們沒有root的許可權就會出現如下情況:
Error: This command has to be run with superuser privileges (under the root user on most systems).
此時,我們要怎麼做呢?
我們只需將我們所需要提升許可權的命令前加一個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 ~]$
這時我們只需以root的身份來編輯/etc.sudoers
這個檔案,在下述語句之後加一句你的使用者名稱 ALL=(ALL) ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
具體操作命令:
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
命令時,它會列出一些檔案的許可權資訊,我們具體就來看看這些到底是什麼
1. 檔案訪問者
對於使用者來說,對許可權的操控可以分為以下三種:
- 擁有者:檔案和檔案目錄的所有者:u---User
- 所屬組:檔案和檔案目錄的所有者所在的組的使用者:g---Group
- 其它使用者:其它使用者:o---Others
另外還要說明幾點:
- 在Linux中,所有的使用者都應隸屬一個相應的組,儘管組中只有他一個人。
- 假設有一個Linux系統裡普通使用者有
fanya
和zhang
兩個人,當fanya
建立了一個檔案,那麼對於這個檔案它的所有者就是fanya
,zhang
就是其他使用者了。
2. 檔案型別和訪問許可權
在使用ls -l
命令時,會發現有形如drwxrwxr-x
.這樣的一串字元,那麼它的意義是什麼呢?
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 則分別表示 檔案所有者、檔案所屬組及其他人的相應許可權
1). 字元表示
2). 數字表示(八進位制)
注意:一個八進位制數字代表一種使用者的許可權,以3個八進位制組成為一個檔案的完整許可權。例如777就代表著rwxrwxrwx
。
4.設定檔案相關訪問許可權
假設我們有如下檔案:
現有一個需求,我們需要修改test檔案的許可權,讓其他人無法檢視,我們需要怎麼樣做呢?
這時就需要chomod
命令了。
1). chmod
修改檔案的許可權
功能:設定檔案的訪問許可權
格式:chmod
[引數] 許可權 檔名
常用選項:
- R :遞迴修改目錄檔案的許可權
說明:只有檔案的擁有者和超級使用者才可以改變檔案的許可權
chmod
命令許可權值的格式:
-
使用者表示符 +/-/= 許可權字元
- +/-/=
- +:向許可權範圍增加許可權代號所表示的許可權
- -:向許可權範圍取消許可權代號所表示的許可權
- =:向許可權範圍賦予許可權代號所表示的許可權
- 使用者表示符
- u:擁有者
- g:擁有者同組
- o:其它使用者
- a:所有使用者
示例:
# 將test檔案修改為其他使用者無許可權 # 原來的test檔案許可權:rw-rw-r-- chmod o=--- test # 或 chomd o-rwx test # 修改後的test檔案許可權:rw-rw----
# 將test檔案修改為其他使用者可讀可寫可執行 # 原來的test檔案許可權:rw-rw-r-- chmod o=rwx test # 或 chomd o+rwx test # 修改後的test檔案許可權:rw-rw-rwx
- +/-/=
-
三位八進位制數字
示例:
# 將test檔案修改為其他使用者無許可權 # 原來的test檔案許可權:rw-rw-r-- chmod 660 test # 修改後的test檔案許可權:rw-rw----
# 將test檔案修改為其他使用者可讀可寫可執行 # 原來的test檔案許可權:rw-rw-r-- chmod 667 test # 修改後的test檔案許可權:rw-rw-rwx
2). chown
修改檔案的擁有者
功能:修改檔案的擁有者
格式:chown [引數] 使用者名稱 檔名
常用選項:
- R :遞迴修改目錄檔案的許可權
注意:修改擁有者需以root身份進行
示例:
# 將test的擁有者改為opc
sudo chown opc test
3). chgrp
修改檔案的所屬組
功能:修改檔案的擁有者
格式:chgrp [引數] 使用者名稱 檔名
常用選項:
- R :遞迴修改目錄檔案的許可權
注意:修改所屬組需以root身份進行
示例:
# 將test的所屬組改為opc
sudo chgrp opc test
4). umask
檢視或修改檔案掩碼
當我們建立檔案或是建立資料夾時,我們會發現它會帶一些預設的許可權,如圖所示:
而這些許可權是怎麼產生的呢?
這就需要用到新的的知識了:
實際上,新建檔案的預設許可權為0666,新建目錄的預設許可權為0777。其中第一位的0與特殊許可權有關,我們這裡不必深究,而後面三位就是許可權的八進位制數值表示方法,我們將其翻譯為字元表示方法。
但是我們發現,它實際上與我們建立出來的檔案許可權並不相同,這又是為什麼呢?
原因就是建立檔案或目錄的時候還要受到umask的影響。假設預設許可權是mask,則實際建立的出來的檔案許可權是: mask & ~umask
格式:umask 許可權值
說明:
- 將現有的存取許可權減去許可權掩碼後,即可產生建立檔案時預設許可權。
- 超級使用者預設掩碼值為0022
- 普通使用者預設為0002
- 檢視當前預設umask只需在命令列下輸入umask
那麼現在繼續來解釋上述問題,如上圖所示,此時的umask為0002,檔案的預設許可權為0666,資料夾的預設許可權為0777.
此時我們發現,此時得出的許可權與上述圖中顯示的一致。
當然,我們可以通過控制umask的值,來控制最終生成的許可權:
三. 目錄
在剛才的講解中,我們發現目錄也有著可讀可寫可執行的許可權,而它們又代表著什麼意思呢?
1. 目錄的許可權
- 可執行許可權: 如果目錄沒有可執行許可權, 則無法cd到目錄中
- 可讀許可權: 如果目錄沒有可讀許可權, 則無法用ls等命令檢視目錄中的檔案內容
- 可寫許可權: 如果目錄沒有可寫許可權, 則無法在目錄中建立檔案, 也無法在目錄中刪除檔案
但是!!!
在這裡存在一個嚴重的問題,不知大家發現了沒有?
只要使用者具有這個目錄的寫許可權,使用者就可以刪除目錄中的檔案,而不論該使用者是否有這個檔案的寫許可權。
換句話來說就是,張三建立了一個檔案,但是李四卻能刪了它。這本就充滿著極大的不合理性!
我們來具體實踐一下:
那要怎麼避免這種情況的發生呢?Linux中引入了粘滯位的概念。
2.粘滯位
語法: chmod +t
目錄名
功能: 給目錄加上粘滯位
當一個目錄被設定為"粘滯位"(用chmod +t
),則該目錄下的檔案被刪除的情況只有三種:
- 一、超級管理員刪除
- 二、該目錄的所有者刪除
- 三、該檔案的所有者刪除
示例:
注意: 雖然目錄被加上了粘滯位,但如果使用者有該目錄的可寫許可權,則不影響其在該目錄下建立檔案