對於多用戶,多任務的Linux來說,文件和目錄的權限管理非常重要。在Linux中目錄是一種特殊的文件,這裏將文件和目錄統稱爲文件。
文件權限就是指對文件的訪問控制,決定哪些用戶,哪些組對文件具有哪種訪問權限。
Linux將文件訪問者身份分爲3個類別:
- 所有者owner
- 所屬組group
- 其他用戶others
然後將訪問權限,也分爲3種:
- 讀read
- 寫write
- 執行execute
那麼對文件權限管理,就包括這兩個方面,即文件的訪問者身份和不同身份對文件的訪問權限。
1. 訪問者身份
訪問者身份分爲上面的三種,所有者,所屬組,其他用戶,下面我們依次來簡單說一下,
(1)所有者
每個文件都有它的所有者,默認情況下,文件的創建者即爲其所有者,所有者對文件具有所有權,是一種特別權限。
只有root賬戶可以將文件的所有全轉讓給其他用戶,使其對文件具有所有權,成爲所有者。使用chown
命令可修改文件所有者
chown命令格式如:
chown [選項] [新所有者] 文件列表
示例: # 將文件test.txt的所有者改爲user1 chown user1 test.txt # —R參數,遞歸改變整個test目錄及子目錄所有文件的所有者爲user1 chown -R user1 test/
(2)所屬組
這是指文件所有者所屬的組,可爲該組指定訪問權限。默認情況下,文件創建者的主要組即爲該文件的所屬組。
root賬戶同樣可以修改文件的所屬組。使用chgrp
命令修改所屬組,文件所有者用戶也可以修改文件所屬組,但是所有者用戶必須是修改的目標所屬組的組員,否則無法修改。
chgrp命令格式如下:
chgrp [選項] [新的所屬組] 文件列表
示例: # 修改test.txt文件的所屬組爲group1 chgrp group1 test.txt # -R參數,通chwon,遞歸修改整個test目錄及子目錄所有文件的所屬組爲group1 chgrp -R group1 test/
(3)其他用戶
其他用戶就是指文件所有者和所屬組之外的所有用戶,可以授予最低級別的權限。
2. 訪問權限
上面說了,訪問權限有3種,讀,寫,執行,然後對於每一個訪問者身份都有這3種權限。
文件的訪問權限在文件屬性中,通過ls -l
就可以查看到文件權限和屬性。如下:
$ ls -l
-rw-r--r-- 1 root root 358 May 14 15:23 test.txt
如上,第一個root爲文件的所有者,第二個root爲文件的所屬組。文件屬性的第一個參數就是文件的權限:-rw-r--r--
這個就是文件權限,一共爲10個字符,代表的意思如下:
- 第一個字符:文件類型
- 字符2-4:所有者權限
- 字符5-7:所屬組權限
- 字符8-10:其他用戶權限
第一個字符表示文件類型,常見的文件類型有:
- -:表示文件
- d:表示目錄
- l:表示鏈接文件
- b:表示塊設置文件
- c:表示字符設備文件
接下來的字符,以3個爲一組,分別表示所有者,所屬組,其他用戶的權限,每一種訪問者身份的3種訪問權限依次用r,w,x
分別表示讀,寫,執行。這3種訪問權限的位置不會變,如果沒有此權限,則使用-
表示。
所以上面的文件權限:
-rw-r--r-- 1 root root 358 May 14 15:23 test.txt
理解爲,這是一個文件,所有者的權限爲rw,可讀寫。 所屬組的權限爲r,只讀。其他用戶的權限爲r,只讀。
此文件的所有者爲root,所屬組也爲root。
3. 修改訪問權限
root用戶和文件所有者可以修改文件訪問權限,使用命令chmod
來修改文件權限,格式爲:
chmod [選項] [模式] 文件
同樣,使用-R參數,可以遞歸修改整個目錄及子目錄的所有文件的訪問權限。
文件權限可以用字符或者數字來表示。所以相對的,修改文件訪問權限,也可以通過字符或者數字:
(1)通過字符修改權限
這時需要具體操作符號來修改權限,
+
:表示增加某種權限-
:表示取消某種權限=
:表示指定某種權限u
:表示所有者g
:表示所屬組o
:表示其他用戶a
:表示所有用戶(即上面3種用戶)r,w,x
:表示3種權限,讀,寫,執行
下面列舉幾個例子:
# 所屬組增加寫權限,其他用戶增加讀權限
chmod g+w,o+r test.txt
# 同時取消所屬組和其他用戶的讀權限
chmod go-r test.txt
# 對所有用戶的權限都設置爲讀和執行
chmod a=rx test.txt
# 對所有用戶都增加執行權限
chmod +x test.txt
(2)通過數字修改權限
將3種權限,分別用數字進行表示:
- 4:表示讀權限r
- 2:表示寫權限w
- 1:表示執行權限x
每一類訪問身份的權限用各項訪問權限所對應的數字的和表示,依次爲所有者,所屬組,其他用戶設置權限,使用3個數字表示這3個身份的權限。
比如:
644 :表示所有者爲讀寫權限,所屬組和其他用戶爲只讀權限 754 : 表示所有者的權限爲rwx,所屬組的權限爲rx,其他用戶的權限爲r
同樣使用命令chmod
修改文件權限,示例如下:
# 修改文件的權限爲,所有者爲rwx,所屬組爲rw,其他用戶爲r。
chmod 764 test.txt
等同於
chmod u=rwx,g=rw,o=r test.txt
修改默認的訪問權限
你會發現,我們創建文件時,並沒有指定文件的權限,就會有一個默認的文件權限:
- 文件的默認權限爲644
- 目錄的默認權限爲755
默認權限實際上是通過umask
(掩碼)來實現的,該掩碼用數字表示,實際上是文件權限碼的“補碼”,默認爲022。
創建目錄的最大權限爲777,減去umask
的值022,就等於755,也就是創建文件時的默認權限。
由於文件創建時不能有執行權限,所有創建文件的最大權限爲666,減去umask
的值022,就等於644,也就是創建文件的默認權限。
可使用umask
命令來查看和修改umask
的值:
# 查看當前的umask
$ umask
0022 # 最前面的0表示特殊權限,可忽略不看
# 臨時修改umask爲022,重新登錄或者打開新的shell則失效。
$ umask 002
如果想永久修改umask
的值,可以修改/etc/profile
文件中關於umask
值的設置:
總結
Linux的文件權限管理就說到這裏,這是Linux系統中的基礎知識,作爲運維人員是必須瞭解的。
有任何問題,歡迎留言
更多內容,查看我的個人博客,文章首發地址:
https://amos-x.com