4、許可權管理

7七柒發表於2024-06-28

基本許可權:UGO

許可權概念

由超管決定某個計算機使用者,能否訪問某個檔案。(圖片檔案,影片檔案,普通檔案)只有當權力衝突時,許可權才會起作用

許可權的三類物件:UGO

  • u:所屬主(檔案或目錄的建立者,也就是主人)
  • g:所屬組(檔案或目錄主人的使用者組組員)
  • o:其他人(除了上面兩種以外的其他使用者)
  • a:所有使用者,也就是u+g+o,上面三類物件的簡寫

許可權的三種型別

  • 可讀:r = 4
  • 可寫:w = 2
  • 可執行:x = 1

注意:數字表示可以用數字代替字母,例如:給某個使用者r和w許可權,可以寫成4+2,也就是6

三種許可權對與檔案和目錄的含義

許可權型別 對檔案的含義 對目錄的含義
r(讀) 可以讀取檔案內容 可以看到目錄所包含的檔案
w(寫) 可以更改檔案內容 可以增刪改目錄中的檔案
x(執行) 可以作為程式執行 可以進入目錄,但是不能看到和修改目錄中的檔案

檢視檔案許可權詳情

使用ls -l 命令,或者 ll命令,後者是前者的簡寫

以file.txt檔案為例:

許可權詳情如下:

許可權表示式

可以使用+、-、=來設定許可權物件的許可權型別,其中許可權型別可以用字母也可以用數字

  • +:新增許可權

    例如:給屬主新增r和w許可權,也就是讀寫許可權

    • 字母表示式:u+r+w

    • 數字表達示:u+6

    注意:假設新增已有的許可權型別,不會有任何變化,也不會報錯

  • -:刪除許可權

    例如:給屬組去掉 x 許可權,也就是執行許可權

    • 字母表示式:g-x
    • 數字表示式:g-1

    注意:假設刪除本來就沒有的許可權型別,不會有任何變化,也不會報錯

  • =:強制賦值許可權

    例如:給屬主強制賦值r許可權,也就是不管屬主有無什麼許可權,強制屬主只有r許可權

    • 字母表示式:u=r
    • 數字表示式:u=4

設定多個許可權物件

使用逗號隔開即可,如果一次性設定三個許可權物件的許可權型別,可以把許可權物件省略,但是要注意順序是:屬主、屬組、其他人

例如:u=7,g=7,o=4 等價於:774

chmod:設定檔案或目錄的許可權

片語change mode的縮寫,其功能是改變檔案或目錄許可權的命令。預設只有檔案的所有者和管理員可以設定檔案許可權,普通使用者只能管理自己檔案的許可權屬性。

設定許可權時可以使用數字法,亦可使用字母表示式,對於目錄檔案,建議加入-R引數進行遞迴操作,這意味著不僅對於目錄本身,而且也對目錄內的子檔案/目錄進行新許可權的設定。

語法格式:chmod 引數 許可權表示式 檔名

常用引數

引數 描述
-c 改變許可權成功後再輸出成功資訊
-f 改變許可權失敗後不顯示錯誤資訊
-R 遞迴處理所有子檔案
-v 顯示執行過程詳細資訊
--help 顯示幫助資訊
--no-preserve-root 不特殊對待根目錄
--preserve-root 禁止對根目錄進行遞迴操作
--reference 使用指定參考檔案的許可權
--version 顯示版本資訊

使用示例

  • 設定檔案file.txt的許可權為774,並顯示執行過程

    [root@lyy tmp]# chmod -v 774 file.txt
    mode of "file.txt" changed from 0644 (rw-r--r--) to 0775 (rwxrwxr-x)
    
  • 設定目錄:dir2可以被所有人進入且檢視內部檔案,並顯示執行過程

    [root@lyy tmp]# chmod -v a=r+x dir2
    mode of "dir2" changed from 0755 (rwxr-xr-x) to 0555 (r-xr-xr-x)
    

chown:更改檔案或目錄的所屬主和組

chown命令來自英文片語change owner的縮寫,其功能是改變檔案或目錄的使用者和使用者組資訊。管理員可以改變一切檔案的所屬資訊,而普通使用者只能改變自己檔案的所屬資訊。

語法格式:chown 引數 所屬主.所屬組 檔名

語法格式:chown 引數 所屬主:所屬組 檔名

上面中都可以

常用引數

引數 描述
-c 顯示所屬變更資訊
-f 若該檔案擁有者無法被更改也不顯示錯誤
-h 僅對連結檔案(而非真正指向的檔案)進行更改
-P 不遍歷任何符號連結
-R 遞迴處理所有子檔案
-v 顯示執行過程詳細資訊
--help 顯示幫助資訊
--no-preserve-root 不特殊對待根目錄
--preserve-root 不允許在根目錄上執行遞迴操作
--version 顯示版本資訊

使用示例

  • 改變檔案file.txt的所屬主為liu

    [root@lyy tmp]# chown liu file.txt
    
  • 改變檔案file.txt的所屬組為liu( " . "也可以用 " : " 代替)

    [root@lyy tmp]# chown .liu file.txt
    
    [root@lyy tmp]# chown :liu file.txt
    
  • 同時改變檔案file.txt的所屬主為root,所屬組為root

    [root@lyy tmp]# chown root.root file.txt
    
    [root@lyy tmp]# chown root:root file.txt
    
  • 改變目錄:dir1及目錄下子檔案的屬主和組都為liu

    [root@lyy tmp]# chown liu.liu dir1
    
    [root@lyy tmp]# chown -R liu:liu dir1
    

chgrp:更檔案或目錄的所屬組

片語”change group“的縮寫,其功能是用於更改檔案所屬使用者組。Linux系統中常用chown命令更改檔案所屬使用者及使用者組身份資訊,如僅需要修改檔案所屬使用者組身份資訊,則可以使用chgrp命令更快地完成。

語法格式:chgrp [引數] 檔案/目錄名

常用引數

引數 描述
-c 顯示除錯資訊
-f 不顯示錯誤資訊
-h 對符號連結檔案做修改
-L 遍歷每個符號連結
-P 不遍歷每個符號連結
-R 遞迴處理所有子檔案
-v 顯示執行過程詳細資訊
--help 顯示幫助資訊
--vesion 顯示版本資訊

使用示例

  • 改變目錄dir1的所屬組為liu

    [root@lyy tmp]# chgrp liu dir1
    
  • 改變目錄dir1及目錄下所以子檔案的所屬組為:liu

    [root@lyy tmp]# chgrp -R liu dir1
    

進階許可權:ACL

ACL簡介

ACL(access control list),訪問控制列表,透過給指定的使用者或組制定ACL策略規則來控制使用者對檔案或目錄的訪問

ACL和UGO的區別

  • UGO可設定的許可權物件中,屬主和屬組都只能有一個,無法設定多個使用者或使用者組對於相同檔案或目錄的不同許可權,其餘使用者都屬於其他裡面

    假設想要設定使用者對於file.txt檔案的訪問,使用者1的許可權只能是 r 許可權,使用者2的許可權只能是 w 許可權,使用者3的許可權只能是 x 許可權,使用UGO顯然無法完成預期的效果

  • ACL可以設定多個使用者或使用者組對同一個檔案或目錄的不同訪問許可權,屬於是UGO的進階版

    假設設定使用者對於file.txt檔案的訪問許可權,可以這樣設定:使用者1設定r許可權,使用者2設定rw許可權,使用者3設定x許可權,使用者4設定rwx許可權,使用者5什麼許可權都沒有等等

    使用者組也是同理

許可權的優先順序

  1. 如果檔案的屬於者訪問檔案,那麼將使用屬主許可權進行訪問限制
  2. 如果訪問的使用者設定了acl許可權,那麼使用acl對該使用者設定的許可權,對該使用者進行訪問限制
  3. 如果訪問的使用者在屬主的使用者組內,那麼將使用屬組許可權進行訪問限制
  4. 如果訪問的使用者在設定了acl許可權的使用者組內,那麼使用acl對該使用者組設定的許可權,對該使用者進行訪問限制
  5. 除去上面情況外的使用者來訪問,則使用其他人許可權進行訪問限制

不管是檔案還是組,只要使用acl設定後都以acl設定的許可權為最高階(針對ugo)

設定acl策略規則

假設有使用者:user1;使用者組grp1;

  • 給使用者user1設定acl規則為:rw

    u:user1:rw
    
  • 給使用者組grp1設定acl規則為:rwx

    g:grp1:rwx
    
  • 給檔案擁有人設定acl規則為:rwx

    U::rwx
    
  • 檔案檔案屬主所在的使用者組設定acl規則為:rw

    g::rw
    
  • 給檔案其他人設定acl規則:r

    o::r
    

getfacl:顯示檔案或目錄的acl策略規則

getfacl命令來自英文片語get file access control list的縮寫,其功能是顯示檔案或目錄的ACL策略。

語法格式:getfacl 引數 檔案或目錄名

常用引數

引數 描述
-a 顯示檔案的ACL策略
-c 不顯示註釋標題
-d 顯示目錄的ACL策略
-e 顯示所有的有效許可權
-h 顯示幫助資訊
-L 找到符號連結對應的檔案
-n 顯示使用者ID和組群ID
-P 不找符號連結對應的檔案
-R 遞迴處理所有子檔案
-t 設定表格輸出格式
-v 顯示版本資訊

使用示例

  • 顯示檔案file的acl策略

    [root@lyy tmp]# getfacl file
    # file: file
    # owner: root
    # group: root
    user::rw-
    user:liu:rw-
    group::r--
    group:group01:r--
    mask::rw-
    other::r--
    
  • 不顯示註釋

    [root@lyy tmp]# getfacl -c file
    user::rw-
    user:liu:rw-
    group::r--
    group:group01:r--
    mask::rw-
    other::r--
    
  • 以表格的形式顯示

    [root@lyy tmp]# getfacl -t file
    # file: file
    USER   root      rw-     
    user   liu       rw-     
    GROUP  root      r--     
    group  group01   r--     
    mask             rw-     
    other            r--
    

setfacl:設定檔案或目錄的acl策略規則

片語set file access control list的縮寫,其功能是設定檔案ACL策略規則。FACL即檔案訪問控制列表策略

透過該技術可以更加精準地控制許可權的分配,例如僅允許某個使用者訪問指定目錄,或僅有某個使用者才具有寫入許可權。把許可權約束在一個極小的範圍內,系統也就更加安全了。

語法格式:setfacl 引數 給物件設定的acl規則 檔案或目錄名

常用引數

引數 描述
-b 刪除指定檔案或目錄所配置的所有acl規則
-d 應用到預設訪問控制列表
-k 移除預設訪問控制列表
-L 跟蹤符號連結檔案
-m 更改或新增指定物件的ACL策略規則
-P 找到符號連結對應的檔案
-R 遞迴處理所有子檔案
-x 刪除指定物件的所有ACL規則
--help 顯示幫助資訊
--vesion 顯示版本資訊

使用示例

  • 對使用者liu設定acl規則,允許對檔案file進行讀寫。對使用者user01設定acl規則,允許對檔案讀

    // 為使用者liu設定acl
    [root@lyy tmp]# setfacl -m u:liu:rw file
    [root@lyy tmp]# getfacl file	// getfacl:檢視檔案或目錄的acl策略規則
    # file: file					// 檔名
    # owner: root					// 屬主
    # group: root					// 屬組
    user::rw-						// 屬主的許可權
    user:liu:rw-					// 單獨為使用者liu設定的許可權
    group::r--						// 屬組的許可權
    mask::rw-						// acl掩碼
    other::r--						// 其他人許可權
    
    // 為使用者user01設定acl
    [root@lyy tmp]# setfacl -m u:user01:r file
    [root@lyy tmp]# getfacl file
    # file: file
    # owner: root
    # group: root
    user::rw-
    user:liu:rw-					// 單獨為使用者liu設定的許可權
    user:user01:r--					// 單獨為使用者user01設定的許可權
    group::r--
    mask::rw-
    other::r--
    
    
  • 刪除使用者liu在file檔案的所有許可權

    [root@lyy tmp]# setfacl -x liu file
    
    // 該檔案已經沒有使用者liu的acl許可權了,liu再訪問該檔案的許可權就是其他人許可權了
    [root@lyy tmp]# getfacl file
    # file: file
    # owner: root
    # group: root
    user::rw-
    user:user01:r--
    group::r--
    mask::r--
    other::r--
    
  • 刪除檔案file配置的所有acl規則

    [root@lyy tmp]# setfacl -b file
    
    // file檔案配置的所有acl規則都被刪除了
    [root@lyy tmp]# getfacl file
    # file: file
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
  • 為目錄dir配置使用者liu的acl規則為:rwx,配置使用者組group01的acl規則為:rx。(注意:-R必須在-m前面,否則會報錯)

    // 為目錄dir配置使用者liu的acl規則為:rwx
    [root@lyy tmp]# setfacl -Rm g:group01:rx dir
    
    // 為目錄dir配置使用者組group01的acl規則為:rx
    [root@lyy tmp]# setfacl -Rm u:liu:rwx dir
    
    // 使用getfacl檢視是否配置成功
    [root@lyy tmp]# getfacl dir
    # file: dir
    # owner: root
    # group: root
    user::rwx
    user:liu:rwx			// 為使用者liu配置的acl規則
    group::r-x
    group:group01:r-x		// 為使用者組group01配置的acl規則
    mask::rwx
    other::r-x
    
  • 對其他使用者(o)設定acl規則,可以對檔案file進行讀

    [root@lyy tmp]# setfacl -m o::r file
    

ls -l與getfacl

ls -l命令(簡寫為ll)並不正確的顯示擁有acl策略規則的檔案或目錄

  • 使用ls -l命令檢視一個擁有acl策略的檔案file01:
-rw-rw-r--+ 1 root root 0 4月  25 06:11 file01
  • 使用ls -l命令檢視一個沒有acl策略的檔案file02
-rw-r--r--. 1 root root 0 4月  25 07:32 file02

透過上面對比可以看出:selinux標識處,顯示+的表示該檔案或目錄擁有acl策略,如果是一個 " . " 則表示該檔案沒有acl策略

所以當我們使用ls -l命令檢視檔案許可權時,發現selinux標識處是 + ,那麼就需要使用getfacl命令來檢視該檔案

特殊許可權

特殊許可權概述

linux檔案的三種特殊許可權分別是:suid許可權、sgid許可權、sticky許可權;

  • suid許可權作用於檔案屬主
  • sgid許可權作用於屬組上
  • sticky許可權作用於other其他上

suid許可權

作用:讓普通使用者臨時擁有該檔案的屬主的執行許可權

注意:suid許可權只能應用在二進位制可執行檔案(命令)上,而且suid許可權只能設定在屬主位置上。

增加、移除suid許可權

  • suid許可權使用s表示,增加許可權u+s,移除許可權u-s;

  • suid許可權也可以使用數字形式表示,0表示去除suid許可權,4表示新增suid許可權,而且是在原許可權的數字表達形式開頭加0或4

    如:0755移除suid許可權,4755新增suid許可權。

使用示例:

例如,普通使用者無法使用cat命令檢視/root裡面的檔案,因為許可權不夠

想要普通使用者也可以使用cat命令檢視/root裡面的檔案,這需要切換到超級管理員給/usr/bin/cat檔案新增suid,讓普通使用者使用cat命令時的許可權跟root一樣

最後記得將移除suid許可權

過程如下

// 普通使用者無法使用cat命令檢視root裡面的檔案,許可權不夠
[liu@lyy ~]$ cat /root/rootdir/file
cat: /root/rootdir/file: 許可權不夠

// 切換到root超級管理員的賬號
[liu@lyy ~]$ su - root
密碼:
上一次登入:四 4月 25 17:35:55 CST 2024從 192.168.10.1pts/1 上
    
// 給cat檔案新增suid許可權。下面命令等價於:chmod 4755 /user/bin/cat
[root@lyy ~]# chmod u+s /usr/bin/cat

// 檢視檔案許可權,發現屬主位置上的執行許可權變為:s。表示suid許可權新增成功
[root@lyy ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    
// 切換到普通使用者:liu
[root@lyy ~]# su - liu
上一次登入:四 4月 25 19:43:31 CST 2024pts/1 上
    
// 再使用cat命令,發現可以檢視/root中的檔案了
[liu@lyy ~]$ cat /root/rootdir/file
宋嘉龍大傻逼

// 實驗完成,切換到超級管理員的賬號,移除suid許可權
[liu@lyy ~]$ su - root
密碼:
上一次登入:四 4月 25 17:35:55 CST 2024從 192.168.10.1pts/1 上

// 移除suid許可權。下面命令等價於:chmod 0755 /user/bin/cat
[root@lyy ~]# chmod u-s /usr/bin/cat

// 使用ll命令檢視,確認移除完成
[root@lyy ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat

注:以// 開頭的是註釋,並不是命令或執行結果

總結

  • 給cat檔案新增suid許可權。下面兩個命令等價

    [root@lyy ~]# chmod 4755 /user/bin/cat
    [root@lyy ~]# chmod u+s /usr/bin/cat
    
  • 移除cat檔案的suid許可權。下面兩個命令等價

    [root@lyy ~]# chmod 0755 /user/bin/cat
    [root@lyy ~]# chmod u-s /usr/bin/cat
    

sgid許可權

作用:sgid許可權一般應用在目錄上,當一個目錄擁有sgid許可權時,任何使用者在該目錄下建立的檔案的屬組都會繼承該目錄的屬組。

注意:sgid只能作用在屬組位置上

增加、移除sgid許可權

  • sgid許可權也使用s表示,增加許可權g+s,移除許可權g-s;
  • sgid許可權也可以使用數字形式表示,0表示去除sgid許可權,2表示新增sgid許可權,而且是在原許可權的數字表達形式開頭加0或2,如:0755移除sgid許可權,2755新增sgid許可權。

使用示例

// 當前登入的使用者身份:root
// 檢視目錄dir1的詳細可知,他的屬組是使用者組:liu
[root@lyy rootdir]# ll -d dir1
drwxr-xr-x. 2 root liu 6 4月  26 07:41 dir1

// 為目錄dir1新增sgid許可權。等價於命令:chmod 2755 dir1
[root@lyy rootdir]# chmod g+s dir1

// 檢視目錄dir1的詳細資訊,發現屬組位置的執行許可權變為:s,說明成功新增了sgid許可權
[root@lyy rootdir]# ll -d dir1
drwxr-sr-x. 2 root liu 6 4月  26 07:41 dir1

// 使用root身份在目錄dir1下面建立檔案file
[root@lyy rootdir]# touch dir1/file

// 檢視檔案file的詳細資訊,發現檔案還是屬於使用者組liu
[root@lyy rootdir]# ll dir1/file
-rw-r--r--. 1 root liu 0 4月  26 07:44 dir1/file

// 移除目錄dir1的sgid許可權。等價於命令:chmod 0755 dir1
[root@lyy rootdir]# chmod g-s dir1

// 再用root身份在目錄dir1下建立一個檔案file02
[root@lyy rootdir]# touch dir1/file02

// 檢視檔案file02的詳情,發現他的屬組又是root組的了
-rw-r--r--. 1 root root 0 4月  26 07:46 dir1/file02

// 下面是兩個檔案對比,一個在目錄有sgid許可權時新增的,一個是在目錄沒有sgid許可權時新增的
[root@lyy rootdir]# ll dir1
總用量 0
-rw-r--r--. 1 root liu  0 4月  26 07:44 file
-rw-r--r--. 1 root root 0 4月  26 07:46 file02

總結:

  • 新增目錄dir1的sgid許可權。下面兩個命令等價

    [root@lyy rootdir]# chmod 2755 dir1
    [root@lyy rootdir]# chmod g+s dir1
    
  • 移除目錄dir1的sgid許可權。下面兩個命令等價

    [root@lyy rootdir]# chmod 0755 dir1
    [root@lyy rootdir]# chmod g-s dir1
    

sticky許可權

作用:sticky許可權一般針對目錄來設定,作用是隻允該目錄下的檔案的建立者刪除自己的建立的檔案,不允許其他人刪除檔案。(root使用者除外,因為root使用者是超級管理員)

注意:sticky許可權只能設定在other位置上。

新增、移除sticky許可權

  • sticky許可權使用t表示,增加許可權o+t,移除許可權o-t;
  • sticky許可權也可以使用數字形式表示,0表示去除許可權,1表示新增許可權,而且是在原許可權的數字表達形式開頭加0或1,如下:如:0755移除sticky許可權,1755新增sticky許可權。

使用示例

// 登入普通使用者:user01,並建立目錄:user01_dir
[user01@localhost tmp]$ mkdir user01_dir

// 在目錄下建立檔案:file
[user01@localhost tmp]$ touch user01_dir/file

// 將目錄user01_dir及下面的子檔案的許可權都設定成可讀可寫可執行
[user01@localhost tmp]$ chmod -R 777 user01_dir

// 給目錄user01_dir新增sticky許可權。等價於命令:chmod 1777 user01_dir
[user01@localhost tmp]$ chmod o+t user01_dir

// 檢視目錄user01_dir的詳細資訊,發現其他人的執行許可權變為:t,說明sticky許可權設定成功
[user01@localhost tmp]$ ll -d user01_dir
drwxrwxrwt. 2 user01 user01 18 4月  26 00:19 user01_dir

// 切換另一個普通使用者:user02
[user01@localhost tmp]$ su - user02
密碼:

// 對使用者user01建立的檔案進行讀寫,發現都麼有任何問題
[user02@localhost tmp]$ vim user01_dir/file
[user02@localhost tmp]$ cat user01_dir/file
111
222
333

// 但是無法刪除檔案,因為該檔案所在的目錄有sticky許可權,除了屬主和root以為都不能刪
[user02@localhost tmp]$ rm user01_dir/file
rm: 無法刪除"user01_dir/file": 不允許的操作

// 切換到使用者user01,並刪除檔案,刪除成功
[user01@localhost ~]$ rm /tmp/user01_dir/file    

// 使用root超管的身份,移除user01_dir目錄的sticky許可權。等價於命令:chmod 0777 user01_dir
[root@localhost ~]# chmod o-t /tmp/user01_dir

// 檢視是否移除成功
[root@localhost ~]# ll -d /tmp/user01_dir
drwxrwxrwx. 2 user01 user01 18 4月  26 00:25 /tmp/user01_dir

總結

  • 為目錄:user01_dir新增sticky許可權。下面兩個命令等價

    [user01@localhost tmp]$ chmod 1777 user01_dir
    [user01@localhost tmp]$ chmod o+t user01_dir
    
  • 移除目錄:user01_dir的sticky許可權。下面兩個命令等價

    [root@localhost ~]# chmod 0777 user01_dir
    [root@localhost ~]# chmod o-t /tmp/user01_dir
    

特殊許可權的大寫與小寫

使用 ll 命令後,可以透過特殊許可權的大小寫來分辨是否開啟了物件的執行許可權:

  • 當特殊許可權為大寫時,該物件沒有執行許可權
  • 當特殊許可權為小寫是,該物件有執行許可權

如下:

  • 這是一個什麼許可權也沒有的檔案file

    [root@localhost rootdir]# ll /root/rootdir/file
    ----------. 1 root root 0 4月  26 01:18 /root/rootdir/file
    
  • 為他加上全部特殊許可權後,特殊許可權顯示大寫,因為他的三個許可權物件都沒有執行許可權

    [root@localhost rootdir]# chmod u+s file
    [root@localhost rootdir]# chmod g+s file
    [root@localhost rootdir]# chmod o+t file
    
    [root@localhost rootdir]# ll /root/rootdir/file
    ---S--S--T. 1 root root 0 4月  26 01:18 /root/rootdir/file
    
  • 為三個許可權物件加上執行許可權後,特殊許可權的位置就顯示小寫了

    [root@localhost rootdir]# chmod u+x file
    [root@localhost rootdir]# chmod g+x file
    [root@localhost rootdir]# chmod o+x file
    
    [root@localhost rootdir]# ll /root/rootdir/file
    ---s--s--t. 1 root root 0 4月  26 01:18 /root/rootdir/file
    

隱藏許可權

chattr:更改檔案的隱藏許可權

片語change attribute的縮寫,其功能是更改檔案隱藏許可權

常用的ls命令僅能檢視檔案的一般許可權、特殊許可權、SELinux安全上下文與是否有FACL(檔案訪問控制列表)等情況,但卻無法檢視到檔案的隱藏許可權

語法格式:chattr 引數 許可權 檔名

常用引數

引數 描述
-R 遞迴處理所有子檔案
-v 設定檔案或目錄版本
-V 顯示執行過程詳細資訊
+ 開啟檔案或目錄的指定隱藏屬性
關閉檔案或目錄的指定隱藏屬性
= 設定檔案或目錄的指定隱藏屬性

常用許可權

引數 描述
i 無法對檔案進行任何修改(包括移動、重新命名、刪除等)
a 僅允許補充內容,無法覆蓋/刪除內容
S 檔案內容在變更後立即同步到硬碟
s 徹底從硬碟中刪除,不可恢復
A 不再修改這個檔案或目錄的最後訪問時間
b 不再修改檔案或目錄的存取時間
D 檢查壓縮檔案中的錯誤
d 使用dump命令備份時忽略本檔案/目錄
c 預設將檔案或目錄進行壓縮
u 當刪除某檔案後依然保留其在硬碟中的資料
t 讓檔案系統支援尾部合併
x 可以直接訪問壓縮檔案中的內容

使用示例

  • 給檔案file新增隱藏許可權:i,無法對file檔案進行任何修改

    [root@localhost rootdir]# chattr +i file
    
  • 移除檔案file的隱藏許可權:i

    [root@localhost rootdir]# chattr -i file
    
  • 為目錄:dir1及其他的子檔案都新增隱藏許可權:i,並顯示執行過程

    [root@localhost rootdir]# chattr -R -V +i dir1
    chattr 1.42.9 (28-Dec-2013)
    dir1的標誌被設為 ----i-----------
    
  • 移除目錄:dir1及其他的子檔案的隱藏許可權:i,並顯示執行過程

    [root@localhost rootdir]# chattr -R -V -i dir1
    chattr 1.42.9 (28-Dec-2013)
    dir1的標誌被設為 ----------------
    

lsattr:檢視檔案的隱藏許可權

片語list attribute的縮寫,其功能是顯示檔案的隱藏屬性。

隱藏屬性也叫隱藏許可權,顧名思義就是用chattr命令新增在檔案上的隱藏許可權屬性。這些屬性資訊用常規的ls命令無法檢視,需要使用lsattr命令檢視。

語法格式:lsattr 引數 檔名

常用引數

引數 描述
-a 顯示目錄中的所有檔案
-d 僅顯示目錄名稱
-D 顯示屬性的名稱及預設值
-E 顯示從使用者裝置資料庫中獲得的當前值
-F 設定使用者定義的格式
-l 顯示裝置的邏輯名稱
-R 遞迴處理所有子檔案
-V 顯示版本資訊

使用示例

  • 檢視指定檔案:file的隱藏屬性

    [root@localhost rootdir]# lsattr file
    ----i-d--------- file
    
  • 檢視指定目錄dir1的隱藏屬性

    [root@localhost rootdir]# lsattr -d dir1
    ---------------- dir1
    
  • 檢視指定目錄dir1中全部檔案的隱藏屬性

    [root@localhost rootdir]# lsattr -R dir1
    ---------------- dir1/file01
    ---------------- dir1/file02
    ---------------- dir1/file03
    

掩碼

掩碼的作用

Linux系統對於普通檔案的預設許可權是0666,目錄的預設許可權是0777

但是為什麼我們建立的檔案或目錄不是這個許可權呢,如下

[root@localhost rootdir]# touch file
[root@localhost rootdir]# mkdir dir
[root@localhost rootdir]# ll
總用量 0
drwxr-xr-x. 2 root root 6 4月  26 16:40 dir
-rw-r--r--. 1 root root 0 4月  26 16:39 file

出現上述原因是因為檔案和目錄的許可權都經過掩碼過濾了

使用umask命令檢視掩碼的值

[root@localhost rootdir]# umask
0022

經過掩碼過濾(也就是按位相減),就得到我們現在看到的檔案和目錄的許可權:0644和0755

umaks:設定/檢視掩碼

片語“user file-creation mode mask”的縮寫,其功能是用於管理許可權掩碼。umask中文常被譯為檔案掩碼,許可權掩碼是由3個八進位制的數字所組成,將現有的存取許可權減掉許可權掩碼後,即可獲得建立檔案時預設的許可權

語法格式:umask [引數] [許可權掩碼]

常用引數

引數 描述
-p 輸出的掩碼可以直接作為指令執行
-S 使用文字來表示許可權掩碼

使用示例

  • 檢視當前系統的掩碼

    [root@localhost rootdir]# umask
    0022
    
  • 設定掩碼為0111

    [root@localhost rootdir]# umask 0111
    
  • 使用文字表示許可權掩碼

    [root@localhost rootdir]# umask -S
    u=rwx,g=rx,o=rx
    

相關文章