Linux權限管理

1 Linux 權限介紹

上一篇介紹了 Linux 用戶管理,接下來介紹一下 Linux 的權限管理。Linux 是多用戶的操做系統,容許多個用戶同時登陸和工做,Linux 權限是操做系統用來限制不一樣用戶對資源的訪問機制。這裏暫且將 Linux 中的權限分爲三類:算法

  • 基本權限:給文件和目錄的所屬者(u)所屬組(g)其餘用戶(o) 分配的 讀(r)寫(w)執行(x) 權限
  • ACL權限ACL 權限能夠針對單一用戶或用戶組設定權限,是基本權限以外更細化的權限設定,彌補了基本權限設定不能知足的一些場景
  • 特殊權限:除了讀寫執行權限(rwx) 的另外一種 特殊權限(s/t, SUID/SGID/SBIT)

2 基本權限

2.1 權限位介紹

使用 ls 命令時,長格式顯示的第一列就是文件的權限,例如:數據庫

[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 28425 11月 30 18:50 install.log

第一列的權限位 -rw-r--r--.,則共11位,這11位權限位的含義以下圖所示:
image.pngvim

  • 第1位:表明文件類型。Linux不像Windows使用擴展名錶示文件類型,而是使用權限位的第一位表示文件類型。雖然Linux文件的種類不像Windows中那麼多,可是分類也很多,詳細狀況可使用「info ls」 命令查看。這裏列出一些常見的文件類型:segmentfault

    • -: 普通文件
    • d: 目錄文件。Linux中一切皆文件,因此目錄也是文件的一種
    • l: 軟連接文件
    • b: 塊設備文件。這是一種特殊設備文件,存儲設備都是這種文件,如分區文件/dev/sda1就是這種文件
    • c: 字符設備文件。這也是特殊設備文件,輸入設備通常都是這種文件,如鼠標、鍵盤等
    • p: 管道符文件。這是一種很是少見的特殊設備文件。
    • s: 套接字文件。這也是一種特殊設備文件,一些服務支持socket訪問就會產生這樣的文件
  • 第2~4位:表明文件所屬者的權限數組

    • r: 表明read,是讀取權限
    • w: 表明write,是寫權限
    • x: 表明execute,是執行權限
  • 第5~7位:表明文件所屬組的權限,一樣擁有 "rwx" 權限
  • 第8~10位:表明文件其餘人的權限,一樣擁有 "rwx" 權限
  • 第11位安全

    • .:若是是個點表明受 SELinux 安全上下文保護,這裏忽略暫不作詳細介紹
    • +:若是是個加號表示設置了ACL權限,下文再作詳細介紹

2.2 權限含義解釋

讀、寫、執行權限對文件和目錄的含義是不一樣的bash

  • 權限對文件的做用app

    • 讀(r):對文件有讀權限,表明能夠讀取文件中的數據。若是把權限對應到命令上,那麼一旦對文件有讀權限,就能夠對文件執行 catmorelessheadtail 等文件查看命令
    • 寫(w):對文件有寫權限,表明能夠修改文件中的數據。若是把權限對應到命令上,那麼一旦對文件有寫權限,就能夠對文件執行 vimecho 等修改文件數據的命令。注意:對文件有寫權限,是不能刪除文件自己的,只能修改文件中的數據,若是想要刪除文件,則須要對文件的上級目錄擁有寫權限
    • 執行(x):對文件有執行權限,表明文件能夠運行。在Linux中,只要文件有執行權限,這個文件就是執行文件了,只是這個文件到底能不能正確執行,不只須要看執行權限,還要看文件的代碼是否是正確的語言代碼
  • 權限對目錄的做用less

    • 讀(r):對目錄有讀權限,表明能夠查看目錄下的內容,也就是能夠查看目錄下有哪些文件和子目錄。若是包權限對應到命令上,那麼一旦對目錄擁有了讀權限,就能夠在目錄下執行 ls 命令查看目錄下的內容了
    • 寫(w):對目錄有寫權限,表明能夠修改目錄下的數據,也就是能夠在目錄中新建、刪除、複製、剪貼子文件或子目錄。若是把權限對應到命令上,那麼一旦對目錄擁有了寫權限,就能夠在目錄下執行 touchrmcpmv 等命令
    • 執行(x):目錄是不能運行的,那麼對目錄擁有執行權限,表明能夠進入目錄。若是把權限對應到命令上,那麼一旦對目錄擁有了執行權限,就能夠對目錄執行 cd 命令進入目錄

2.3 權限設定

2.3.1 chmod 命令

chmod 命令用來修改文件或目錄的權限。異步

命令格式:chmod [選項] 權限模式 文件或目錄

  • 選項:

    • -R:遞歸設置權限,也就是給予目錄中的全部文件和子目錄設定權限
    • --reference=參考文件或目錄:使用參考文件或參考目錄的權限來設置目標文件或目錄的權限
  • 權限模式:權限模式分爲符號組合八進制數組合
  • 符號組合的格式是[ugoa][[+-=][permission]],也就是[用戶身份][[賦予方式][權限]]的格式。

    • 用戶身份

      • u:表明全部者(user)
      • g:表明所屬組(group)
      • o:表明其餘人(other)
      • a:表明所有身份(all)
    • 賦予方式

      • +:加入權限
      • -:減去權限
      • =:設置權限
    • 權限

      • r: 讀取權限(read)
      • w: 寫權限(write)
      • x: 執行權限(execute)
  • 八進制數組合的格式是 [0-7][0-7][0-7] 三位數字組成(每一位數字都是權限之和),第一位是所屬者權限之和,第二位是所屬組權限之和,第三位其餘人權限之和

    • r 讀取權限對應的數字是 4
    • w 寫權限對應的數字是 2
    • x 執行權限對應的數字是 1
    • 例如讀寫權限 rw 八進制數表示 6

示例:

# 1. 添加組用戶的寫權限。
chmod g+w test.log 
# 2. 刪除其餘用戶的全部權限。權限爲空,即權限設置爲'---'
chmod o= test.log
# 使全部用戶都沒有寫權限 
chmod a-w test.log 
# 3. 當前用戶具備全部權限,組用戶有讀寫權限,其餘用戶只有讀權限  
chmod u=rwx, g=rw, o=r test.log 
等價於 
chmod 754 test.log 
# 4. 將目錄以及目錄下的文件都設置爲全部用戶都擁有讀寫權限
chmod -R a=rw testdir/ 
# 5. 根據參考文件 a.log 的權限來 設置文件 test.log 的權限
chmod --reference=a.log ./test.log

2.3.2 chown 命令

chown 命令用來修改文件和目錄的全部者和所屬組。

命令格式:chown [選項] 全部者[:所屬組] 文件或目錄

  • 選項:

    • -R:遞歸修改目錄下全部的文件及子目錄的所屬者和所屬組
    • --reference=參考文件或目錄:使用參考文件或參考目錄的所屬者和所屬組來設置目標文件或目錄的所屬者和所屬組
  • 全部者[:所屬組]:當省略 ":所屬組",僅改變文件所屬者
注意:普通用戶不能修改文件的所屬者和所屬組,哪怕本身是這個文件的所屬者也不行。普通用戶能夠修改所屬者是本身的文件權限

示例:

# 修改文件的所屬者爲 user1,所屬組爲 group1
chown user1:group1 test.log

2.3.3 chgrp 命令

chown 命令只能用來修改文件和目錄的所屬組,其實徹底能夠由 chown 命令來替代。

命令格式:chgrp 用戶組 文件或目錄

  • 選項:

    • -R:遞歸修改目錄下全部的文件及子目錄的所屬組
    • --reference=參考文件或目錄:使用參考文件或參考目錄的所屬組來設置目標文件或目錄的所屬組

2.4 默認權限與 umask

2.4.1 權限掩碼:umask

當建立一個新的文件和目錄是都默認會有一些權限,新建的文件權限通常是 "-rw-r--r--",新建的目錄權限通常是 "drwxr-xr-x"。這些新建文件或目錄的默認權限是由權限掩碼 umask來決定的。在講解 umask 以前,須要先了解一下文件和目錄的默認最大權限

  • 文件默認最大權限:對於文件來說,新建文件的默認最大權限是 666 (即 -rw-rw-rw-),沒有執行權限,只是由於執行權限對文件來說比較危險,不能再新建文件的時候默認賦予,而必須經過用戶手工賦予
  • 目錄默認最大權限:對於目錄來說,新建目錄的默認最大權限是777 (即 drwxrwxrwx),這是由於對目錄而言,執行權限僅僅表明進入目錄,因此即便新建目錄時直接默認賦予也沒有什麼危險

查看權限掩碼值 和 新文件新目錄的預設權限,以下

[root@localhost ~]# umask
0022
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
[root@localhost ~]# touch testfile
[root@localhost ~]# mkdir testdir 
[root@localhost ~]# ls -ld testfile testdir/
drwxr-xr-x. 2 root root 4096 4月  22 14:48 testdir/
-rw-r--r--. 1 root root    0 4月  22 14:47 testfile
[root@localhost ~]#

權限掩碼值所表示的權限就是新建文件和新建目錄要從默認最大權限裏要排除的權限。查詢掩碼值由兩種方式,直接執行 "umask" 以數字方式展現,能夠看到有四位 '0022',其中第一位是特殊權限用的,這裏暫時先無論,主要看後三位 "022",即"----w--w-";執行 "umask -S" 以符號方式展現,其中缺乏的權限對應的權限值就是掩碼值,這裏用戶組和其餘用戶都缺乏 w,因此掩碼值是 022

2.4.2 默認權限計算方式

按照官方的標準算法,umask 默認權限須要使用二進制進行邏輯與和邏輯非聯合運算才能夠獲得正確的新建文件和目錄的默認權限,這種方法既很差計算也很差理解,不推薦。咱們這裏按照權限字母相減的方式來講明默認權限的計算方式,以權限掩碼值等於 "022" 爲例:

  • 新建文件:文件的默認最大權限是 -rw-rw-rw- ,經過計算 (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--),則新建文件默認權限是 -rw-r--r--,即 644
  • 新建目錄:目錄的默認最大權限是 drwxrwxrwx ,經過計算 (drwxrwxrwx) - (d----w--w-) = (drwxr-xr-x),則新建目錄默認權限是 drwxr-xr-x,即 655
注意
計算新建文件的默認權限時,網上有些教程直接使用使用權限數字相減獲得默認權限,這樣實際上是不對的。例如 umask 值爲 003(即 --------wx),權限數字相減 666 - 003 = 663,獲得的默認權限是 663(即 -rw-rw--wx), 顯然不對,由於經過權限掩碼能夠看出默認權限裏 other 是不該該包含 wx權限的。正確的計算結果是 (-rw-rw-rw-) - (--------wx) = (-rw-rw-r--),即 664。形成這個錯誤的根本緣由是文件的默認最大權限是 666,全部二進制位並無滿 1,而目錄的默認最大權限是 777,全部二進制位都滿 1了,因此新建目錄的默認權限計算是可使用權限數字相減的,而新建文件的默認權限計算不能使用權限數字相減的

2.4.3 修改權限掩碼:umask 命令

umask 命令是用來顯示或設置建立文件或目錄的權限掩碼的。

命令格式:umask [選項] [權限模式]

  • 選項:

    • -S:以符號組合的方式輸出權限掩碼,不使用該選項時以八進制數的形式輸出
  • 權限模式:與上面 chmod 命令的權限模式相同
使用 umask 命令設置的權限掩碼只是臨時有效,若是須要永久有效,須要修改 /etc/bashrc 文件裏的內容,可是不建議修改

示例:

# 修改權限掩碼爲 033。等價於 "umask u=rwx,g=r,o=r"
[root@localhost testdir]# umask 033
[root@localhost testdir]# umask
0033
[root@localhost testdir]# umask -S
u=rwx,g=r,o=r
[root@localhost testdir]# touch testfile2
[root@localhost testdir]# mkdir testdir2
[root@localhost testdir]# ls -ld testfile2 testdir2/
drwxr--r--. 2 root root 4096 4月  22 16:36 testdir2/
-rw-r--r--. 1 root root    0 4月  22 16:36 testfile2
[root@localhost testdir]#

3 ACL 權限

3.1 ACL 權限介紹

假若有這樣一種場景,有一個這樣一個文件,權限是 "rwx-r----",所屬者是 user1,所屬組組 gruop1。如今須要對另外一個用戶 user2 單獨設置該文件的寫(w) 權限,可以想到的方法是 把其餘用戶(other) 的權限賦予寫權限,可是這樣除了 user2 以外的其餘用戶都能對該文件進行寫操做了,顯然不合適;若是把 user2 加入到用戶組 group1,並設置 group1 對該文件有寫權限,一樣也不合適,由於這樣 group1 內的用戶對該文件都有了寫權限;若是把全部者改成 user2 顯然更不合適,這樣該文件原有的所屬者 user1 就對該文件沒有了操做權限。

上面那種場景,只經過 所屬者(u)、所屬組(g)、其餘用戶(o) 配合 讀(r)、寫(w)、執行(x)權限 是沒法知足的。這時就須要設定 ACL 權限來實現。ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統的 owner、group、othersread、write、execute 權限以外的細部權限設定,ACL 能夠針對單一使用者,單一文件或目錄來進行 r、w、x 的權限規範。

ACL 主要是針對三個方面來控制權限的:

  • 用戶(user):針對用戶爲對象來設定權限。用戶不必定是所屬者,能夠是任意用戶
  • 用戶組(group):針對用戶組爲對象來設定權限。用戶組不必定是所屬組,能夠是任意用戶組
  • 有效權限(mask):針對目錄下新建文件或子目錄時,規範新數據的有效權限

3.2 ACL 權限設定

3.2.1 檢查 ACL 是否開啓

事實上,本來 ACL 是 unix-like 操做系統的額外支持項目,但由於近年以來 Linux 系統對權限細部設定的熱切需求,所以目前 ACL 幾乎已經預設加入在全部常見的 Linux 文件系統(ext2/ext3/ext4/xfs 等)的掛載參數中!因此你無須進行任何動做,ACL 就能夠被使用了!不過,若是你不放心文件系統是否真的支持 ACL 的話,那麼就檢查一下磁盤分區信息,以確保開啓了 ACL。

1. 查看磁盤分區是否開啓 ACL

# 1. 查看當前系統有哪些分區。其中"/dev/mapper/VolGroup-lv_root"是邏輯卷分區,"/dev/sda1"是傳統分區
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  3.7G   13G  23% /
tmpfs                 490M     0  490M   0% /dev/shm
/dev/sda1             477M   35M  417M   8% /boot
# 2. 查看指定分區文件信息。若是輸出包含"acl"字眼則表明該分區已經開啓了 ACL
[root@localhost ~]# dumpe2fs -h /dev/mapper/VolGroup-lv_root | grep -i acl
dumpe2fs 1.41.12 (17-May-2010)
Default mount options:    user_xattr acl
[root@localhost ~]# dumpe2fs -h /dev/sda1 | grep -i acl
dumpe2fs 1.41.12 (17-May-2010)
Default mount options:    user_xattr acl
[root@localhost ~]#

2. 開啓 ACL
若是上面的查看信息中分區沒有開啓 ACL的話,你也能夠經過下面兩種方式來開啓 ACL

  • 執行命令從新掛載並加入ACL權限,如 "mount -o remount,acl /"。這種方式只能臨時生效,系統重啓又會恢復
  • 修改配置文件 "vim /etc/fstab",找到對應分區那一行,在 "defaults" 後面追加 "acl",以下圖。而後重啓系統或者從新掛載 "mount -o remount /" 使修改生效

image.png

3.2.2 命令:setfacl、getfacl

setfacl 命令用來設定 acl 權限,命令格式:setfacl 選項 文件或目錄

  • 選項

    • -m [u|g|m]:[用戶名|組名]:權限:設定 acl 權限。也能夠設置 acl 的有效權限(不用指定用戶或用戶組)
    • -x [u|g]:[用戶名|組名] :刪除指定的 acl 權限。與 -m 選項是相對的
    • -b:刪除所有 acl 權限
    • -R:遞歸設定 acl 權限,指目錄下現有的全部文件和子目錄也設定相同的 acl 權限
    • -d:設定默認 acl 權限,指目錄下後續新建的文件和子目錄擁有的默認 acl 權限
    • -k:刪除默認 acl 權限

getfacl 用來查看 acl 權限,命令格式:getfacl 文件或目錄

3.2.2 針對用戶設定 ACL 權限

image.png

  • 若是文件或者目錄設置了 acl 權限,使用 ll 命令查看,第一列權限位的最後一個字符顯示 "+"。注意,此時看到的權限(664)和實際的權限(644)是有所差異的,此時實際權限就須要經過 getfacl 命令查看了
  • 經過 getfacl 命令查詢 acl 權限輸出結果中,"user:user1:rw-" 表示用戶 user1 對該文件擁有讀寫權限,若是省略中間的用戶名,即"user::rw-"表明文件所屬者擁有的權限,用戶組表示規則也同樣
  • "mask::rw-" 爲 acl 的默認最大有效權限,即給用戶或者用戶組設置的 acl 權限不能超出該範圍

3.2.3 針對用戶組設定 ACL 權限

與針對用戶設定 acl 權限類似,以下:
image.png

3.2.3 設定 ACL 最大有效權限

使用 getfacl 命令查詢輸出的結果中, mask 表明針對用戶和用戶組可以設定的最大有效權限,即設定的 acl 權限不能超出 mask 的範圍。若是超出了,超出的部分權限是不生效的。
image.png

3.2.4 給目錄遞歸設定 ACL 權限

能夠經過 "-R" 選項給目錄設定 acl 權限的同時,也給該目錄下面的全部文件和子目錄設定相同的 acl 權限。以下:
image.png

3.2.5 給目錄將來文件設定默認 ACL 權限

相對有 "-R" 選項給目錄先現有的文件和子目錄設定 acl 權限,而 "-d" 選項是給目錄下未來要新建的文件和子目錄設定默認 acl 權限,即該目錄下文件一旦成功建立成功就擁有的 acl 權限。以下:

image.png

其中 " setfacl -d -m u:user2:rwx /tmp/acl_test_dir/" 等同於 " setfacl -m d:u:user2:rwx /tmp/acl_test_dir/"

3.2.6 刪除 ACL 權限

  • 刪除指定的 acl 權限,如:setfacl -x u:user1 /tmp/acl_test_file
  • 刪除目錄默認 acl 權限,如:setfacl -k /tmp/acl_test_dir/
  • 刪除所有 acl 權限,包括目錄設定的默認權限,如:setfacl -b /tmp/acl_test_dir/

4 特殊權限:SUID、SGID、SBIT

Liunx 中處理常見的 "讀寫執行(rwx)" 權限外還有一些特殊權限 st,以下:
image.png
這些特殊權限是什麼意思呢?咱們先從 SUID 開始提及

4.1 SetUID

s 權限標誌出如今文件所屬者的 x 權限位時,如 "/usr/bin/passwd" 的權限狀態 "-rwsr-xr-x",則表明該文件被設置了 SetUID 權限,簡稱 SUID。若是文件被設置了 SUID 所起到的做用是任何用戶去執行該文件時,用戶的身份會被切換爲該文件所屬者的身份去執行而不是以該用戶本身的身份去執行

以仍是 "/usr/bin/passwd" 命令爲例,使用 passwd 命令修改密碼時,實際上修改的是 "/etc/shadow" 文件,而該文件的權限是 "----------",所屬者和所屬組都是 root,也就是說只有 root 用戶才能夠強制修改 "/etc/shadow" 文件。可是實際使用中普通用戶也是能夠修改本身的密碼的,即也能修改 "/etc/shadow" 文件,這是由於 "/usr/bin/passwd" 被設置了 SUID,普通用戶執行 passwd 命令的過程當中其實是以 root 身份去執行的。

SUID 的限制與功能

  • 只有可執行的二進制程序文件才能設置 SUID 權限
  • 命令執行者包括所屬者要對該二進制程序擁有執行(x)權限
  • 命令執行者在執行二進制程序時得到該程序文件的所屬者身份
  • SUID 權限只在二進制程序執行過程當中有效,即身份的改變只發生在程序的執行過程當中

設置 SUID 權限

  • 命令格式:chmod u+s 可執行二進制程序文件chmod 4(0-7)(0-7)(0-7) 可執行二進制程序文件
  • 設置的 SUID 權限即 s 權限標誌佔用所屬者本來的 x 權限位。若是顯示的是大 S,說明是在所屬者沒有執行權限的狀況下設置的 SUID,這時設置的 SUID 權限是無效的,須要把所屬者的執行權限加上纔能有效,即變爲小 s
  • 權限標誌 s 對應的數值是 4
通常不要輕易設置 SUID 權限,由於該動做很危險,試想一下,若是給 "/usr/bin/vim" 設置 SUID 權限,那麼任何用戶都能使用 "vim" 命令修改任何文件了

4.2 SetGID

s 權限標誌出如今文件所屬組的 x 權限位時,如 "/usr/bin/locate" 的權限狀態 "-rwx--s--x",則表明該文件被設置了 SetGID 權限,簡稱 SGID。與 SUID 相比,SGID既能夠針對文件來設定,又能夠針對目錄來設定,功能分別以下:

針對文件 SGID 的限制與功能

  • 只有可執行的二進制程序文件才能設置 SGID 權限
  • 命令執行者包括所屬組要對該二進制程序擁有執行(x)權限
  • 命令執行者在執行二進制程序時,所屬組身份升級爲該二進制程序文件的所屬組
  • SGID 權限只在二進制程序執行過程當中有效,即用戶組身份的改變只發生在程序的執行過程當中

例如,任何用戶都能使用 locate 命令來查詢數據庫文件 "mlocate.db"。由於使用 locate 命令時,所屬組都會被切換爲 "slocate"
image.png

針對目錄 SGID 的限制與功能:

  • 普通用戶必須對此目錄擁有 rx 權限
  • 普通用戶在此目錄中的有效組會變爲此目錄的所屬組
  • 若普通用戶對此目錄擁有 w 權限時,新建文件的所屬組是此目錄的所屬組

設置 SGID 權限

  • 命令格式:chmod g+s 目錄或文件chmod 2(0-7)(0-7)(0-7) 目錄或文件
  • 設置的 SGID 權限即 s 權限標誌佔用所屬組本來的 x 權限位。若是顯示的是大 S,說明是在所屬組沒有執行權限的狀況下設置的 SGID,這時設置的 SGID 權限是無效的,須要把所屬組的執行權限加上纔能有效,即變爲小 s
  • 權限標誌 s 對應的數值是 2

4.3 Sticky Bit

t 權限標誌出如今文件其餘用戶(other)的 x 權限位時,如 "/tmp/" 的權限狀態 "drwxrwxrwt",則表明該文件被設置了 Sticky Bit 權限,簡稱 SBITSBIT 權限只能針對目錄生效。

SBIT 的限制與功能

  • 只有目錄才能夠設置 SBIT 權限
  • 普通用戶對此目錄擁有 wx 權限
  • 普通用戶在此目錄下新建文件或子目錄時,只有本身和 root 才能刪除

例如,目錄 "/tmp/" 被設置了 SBIT 權限,普通用戶是不能刪除該目錄下所屬者非本身的文件的,即使全部用戶對 "/tmp/" 目錄都有寫權限
image.png

設置 SBIT 權限

  • 命令格式:chmod o+t 目錄chmod 1(0-7)(0-7)(0-7) 目錄
  • 設置的 SBIT 權限即 s 權限標誌佔用其餘用戶本來的 x 權限位。若是顯示的是大 T,說明是在其餘用戶(other)沒有執行權限的狀況下設置的 SBIT,這時設置的 SBIT 權限是無效的,須要把其餘用戶(other)的執行權限加上纔能有效,即變爲小 t
  • 權限標誌 t 對應的數值是 1

5 文件隱藏屬性

除了上面所說的幾種權限外,還能夠給文件或目錄設置隱藏屬性起到權限限制的做用。關於隱藏屬性的設置和查看涉及到兩個命令 chattrlsattr

5.1 設置隱藏屬性:chattr

命令格式:chattr [+-=][屬性] 文件或目錄

  • +-=+ 增長屬性;-:移除屬性;=:設定屬性,覆蓋原有值
  • A:當設定了 A 這個屬性時,存取此文件(或目錄)時,訪問時間 atime 將不會被修改。可避免 I/O 較慢的機器過分的存取磁盤
  • S:通常文件是異步寫入磁盤的,若是加上 S 這個屬性時,當你進行文件的修改時,會當即同步寫入磁盤中
  • a:文件將只能增長數據,而不能刪除也不能修改數據
  • c:會自動的將此文件壓縮,在讀取的時候將會自動解壓縮。對於大文件挺有用的
  • d:使文件(或目錄)不會被 dump 備份
  • i:讓一個文件(或目錄)不能被刪除、更名、設定連結也沒法寫入或新增數據
  • s:文件被刪除時,將會被徹底的移除出這個硬盤空間,因此若是誤刪了,徹底沒法救回來了
  • u:與 s 相反的,該文件被刪除了,則數據內容其實還存在磁盤中,能夠恢復該文件

示例:

# 1. 建立一個文件
[root@localhost ~]# touch testfile
# 2. 給 testfile 文件設置 "i" 屬性
[root@localhost ~]# chattr +i testfile 
# 3. 試圖刪除 testfile 文件失敗,即便是 root 用戶
[root@localhost ~]# rm -rf testfile 
rm: 沒法刪除"testfile": 不容許的操做
# 4. 移除 "i" 屬性
[root@localhost ~]# chattr -i testfile 
# 5. 再次刪除成功
[root@localhost ~]# rm -rf testfile 
[root@localhost ~]#
chattr 命令只有在 ext2/ext3/ext4 文件系統下才生效

5.1 查詢隱藏屬性:lsattr

命令格式:lsattr 選項 文件或目錄

  • 選項

    • -a:將目錄下隱藏文件的屬性也展現出來
    • -d:若是查詢的是目錄,僅列出目錄自己的屬性而非目錄內的文件
    • -R:連同子目錄的數據也一併列出來

示例:

[root@localhost ~]# touch testfile
[root@localhost ~]# lsattr testfile 
-------------e- testfile
[root@localhost ~]# chattr +aiS testfile 
[root@localhost ~]# lsattr testfile 
--S-ia-------e- testfile
[root@localhost ~]#
相關文章
相關標籤/搜索