Linux之文件(目錄)默認權限、特殊權限與隱藏權限


文件默認權限

Linux之用戶組、文件權限詳解了解到文件與目錄的基本權限管理,文件在創建時如果不指定具體的權限,那么系統會給它分配一個默認的權限,這個默認權限就是umask。

vbird@Ubuntu1604:~$ umask   //我們可以使用umask命令來查看默認權限
0002

第1個0是特殊默認權限,可以先不用管。后面002就是我們創建文件/目錄的默認權限。由於普通文件默認沒有可執行權限,即只有r、w權限,所以權限最大為666(-rw-rw-rw-)。目錄需要進入訪問權限,需要有r、w、x權限,所以權限最大為777(drwxrwxrwx)。而umask是該默認值需要減去的權限,此時,umask為002(第1個0先不管),普通文件默認權限=(-rw-rw-rw-)-(--------w-)=664(-rw-rw-r--),目錄默認權限=(drwxrwxrwx)-(--------w-)=775(drwxrwxr-x)。

vbird@Ubuntu1604:~$ touch aa
vbird@Ubuntu1604:~$ mkdir bb
vbird@Ubuntu1604:~$ ls -l
total 20
-rw-rw-r-- 1 vbird vbird    0 9月   9 14:56 aa
drwxrwxr-x 2 vbird vbird 4096 9月   9 14:56 bb

剛才使用umask查看到默認權限是0002,linux中除了常見的讀(r)、寫(w)、執行(x)權限以外,還有3個特殊的權限,分別是setuid、setgid和stick bit,就對應着第1個0值。

文件特殊權限:SUID、SGID、SBIT

setuid:SUID,全稱為set UID,在高位起第三位上表現為s。

當我們普通用戶使用passwd進行修改密碼的時候,passwd會去訪問/etc/shadow,但是普通用戶根本沒有讀寫的權限,那怎么辦呢?linux在我們運行passwd修改密碼的時候,會暫時獲取/etc/shadow文件擁有者root的權限,然后對/etc/shadow進行讀寫訪問,訪問完之后釋放文件擁有者的權限。這就是setuid的魅力。簡單來說就是,使用者暫時獲取文件(目錄)擁有者的權限,使用完再釋放。

setgid:SGID和SUID類似,在高起第六位上表現為s。

SGID改變的是執行者的所屬組,可以對可執行文件和目錄設置。通過對目錄設置SGID屬性,可以使得訪問在該目錄下創建的所有文件的所有權,都繼承原目錄的所有者,而非創建者。因為一旦有用戶進入到該目錄下,由於具有SGID權限,進入目錄后的用戶就會變成該目錄的所有者,在該目錄下創建的所有文件,都以該目錄的所有者的身份創建。

利用好這個權限位在很多團隊合作的項目上更加方便管理。比如一個共同維護的數據文件夾,為了方便管理,只允許管理員對里面的數據具有改變和刪除的權利,但是卻有很多用戶需要有在該目錄下添加數據文件的權利,利用SGID可以很好的解決這一點。

stick bit:SBID權限同樣只對目錄有效,在權限位的最低位表現為t。

通過對目錄設置SBID權限,並且該目錄的權限為777,則所有用戶可以在該目錄下都可以創建文件,並且文件所有者是自己。但是在SBID權限的目錄下,只有root和文件的所有者才能刪除該文件,即使文件的屬性為777也不能被其他用戶刪除。這個權限在共享過程中非常實用。共享的文件任何人都有讀寫的權利,但是只有文件的所有者才能刪除該文件。

SUID/SGID/SBIT權限設置

SUID數值為4,SGID數值為2,SBIT數值為1,umask中默認權限中的從左往右第1個值為SUID/SGID/SBIT權限。

文件隱藏權限

除了以上權限外,linux還提供了一套隱藏權限機制。需要使用chattr設置隱藏權限,lsattr查看隱藏權限。

命令功能:

查看文件的隱藏權限

命令格式:

lsattr [ -RVadv ] [ files...  ]

命令參數:

-R  遞歸查看目錄下文件

-V  顯示程序的版本

-a  不忽略以“.”開頭的隱藏文件

-v  列出文件的版本號和生成號

命令實例:

見chattr 

命令功能:

查看文件的隱藏權限

命令格式:

chattr [ -RVf ] [ -v version ] [ mode ] files...

命令參數:

+-= :分別為 [+ 增加] [- 減少] [= 設定] 屬性的意思
A  :當設定了 A 這個屬性時,這個檔案(或目錄)的訪問時間atime (access) 將不可被修改, 可避免例如手提式計算機容易有磁盤 I/O 錯誤的情況發生!
S  :這個功能有點類似 sync 的功能!就是會將數據同步寫入磁盤當中!可以有效的避免數據流失!
a  :當設定 a 之后,這個檔案將只能增加數據,而不能刪除,只有 root 才能設定這個屬性。
c  :這個屬性設定之后,將會自動的將此檔案壓縮,在讀取的時候將會自動解壓縮出來,但是在儲存的時候,將會先進行壓縮之后再儲存(看來對於大檔案似乎蠻有用的!)
d  :當 dump (備份)程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)具有 dump 功效!
i  :這個 i 可就很厲害了!他可以讓一個檔案不能被刪除、改名、設定連結也無法寫入或新增數據!對於系統安全性有相當大的幫助! (只有root才能設置)
j  :當使用 ext3 這個檔案系統格式時,設定 j 屬性將會使檔案在寫入時先記錄在 journal 中! 但是當 filesystem 設定參數為 data=journalled 時,由於已經設定了日志了,所以這個屬性無效!
s  :當檔案設定了 s 參數時,他將會被完全的移除出這個硬盤空間。
u  :與 s 相反的,當使用 u 來設定檔案時,則數據內容其實還存在磁盤中,可以使用來找回該文件。

-R  遞歸查看目錄下文件

-V  顯示程序的版本

-v  列出文件的版本號和生成號

備注:chattr命令很多設置必須root才能設置

命令實例:

1.新建1個文件aa,然后設置隱藏權限i使之不能被刪除。(只有root才能執行此操作)

root@Ubuntu1604:/home/vbird# touch aa
root@Ubuntu1604:/home/vbird# lsattr aa
-------------e-- aa
root@Ubuntu1604:/home/vbird# chattr +i aa
root@Ubuntu1604:/home/vbird# lsattr aa
----i--------e-- aa
root@Ubuntu1604:/home/vbird# rm aa
rm: cannot remove 'aa': Operation not permitted
root@Ubuntu1604:/home/vbird# chattr -i aa
root@Ubuntu1604:/home/vbird# rm aa
root@Ubuntu1604:/home/vbird# ls aa
ls: cannot access 'aa': No such file or directory

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM